【初识Go】| Day1 Go语言特征&开发环境配置

久闻 Go 语言大名,了解它是 Google 开发的一门静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。由于 Go 对于高并发的处理表现优异,很多互联网大厂纷纷投奔,比如听说字节跳动早期为了快速构建系统,很多后台应用使用 Python 语言,随着用户量和访问量的增加逐渐使用 Go 进行替代,还有滴滴、腾讯内部也都有很多采用 Go 语言作为后端语言的项目。

虽然之前也尝试学习和编写简单 Go 程序,但并未完全坚持下来,现在重拾起来,并通过学习笔记的方式进行记录,希望借此入门 Go 语言。

Go语言特性

通过查阅资料可以得知 Go 具有以下特性,

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值(C++、Java 本身不支持,需借助其他数据结构)
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性
  • ……………

由于个人学习习惯,在学习一门语言的时候不喜欢看大量理论,所以 “该知道的都知道,不知道的慢慢了解”,直接搭建环境开干!

Go环境配置

之前一直习惯于在Windows下进行开发和编程,进行过Go环境安装,Windows下安装Go环境比较简单,直接运行MSI安装包,并在环境变量配置 GOPATH=安装位置即可。

因为一直听说 Linux / Mac 系统对开发工作更加友好,尝试在 Virtual Box 中搭建 Ubuntu 虚拟机,并基于此系统进行 Go 环境的搭建,后续通过 Windows 下的 VSCode 的 Remote-SSH 插件远程连接,进行开发工作。

下面记录在Ubuntu虚拟环境下搭建Go环境的过程,及在过程中遇到的关于 Linux 下设置环境变量的坑

Linux下配置Go环境

  1. Windows 下安装 Ubuntu 虚拟机

    网上有大量教程,不再赘述。(替换为国内代理源)

  2. Go 安装

    参考 https://studygolang.com/dl 和 https://docs.studygolang.com/doc/install

    • 下载 Go 安装包至 Linux 下;

    • 解压安装 Go 安装包

      sudo tar -C /usr/local -xzf go1.15.6.linux-amd64.tar.gz
      
    • 配置环境变量 **(此处有坑)**

      export PATH=$PATH:/usr/local/go/bin
      export GO111MODULE=on
      export GOPROXY=https://goproxy.cn
      
    • 验证

      go version
      
  3. VS Code 远程虚拟机进行 Go 开发

    • 安装 Remote-SSH 插件

      虚拟机网络配置选择 “桥接网卡”,在 Remote-SSH 插件中配置虚拟机 IP 地址即可远程连接上虚拟机环境。

    • 安装 Go 插件

      为在开发过程中获得更友好的代码提示和调试体验,安装 Go 插件。

    • VS Code 连接虚拟机进行开发:

      • 使用 Ctrl + shift + P 调用 VS Code 快速命令。
      • 搜索 Toggle Terminal 打开终端。
      • mkdir 新建一个 Projects 文件夹。
      • code Projects 即可打开 Projects 文件夹,把文件夹作为项目文件夹在下面编写代码。

★Linux环境变量配置的坑

在 terminal 界面配置好环境变量后,发现 go version 可以返回正确提示。但当重开 terminal 界面或者重启虚拟机后再次运行,有错误提示。

zsh: command not found: go

仔细回头翻阅官网的安装指南https://docs.studygolang.com/doc/install,发现有这样的说法,

You can do this by adding the following line to your $HOME/.profile or /etc/profile (for a system-wide installation):

export PATH=$PATH:/usr/local/go/bin

go环境变量如果直接写在terminal只对当前窗口有效,需要写入到 $HOME/.profile 或者 /etc/profile(对所有用户有效)中,可参考https://www.cnblogs.com/xiaofeng666/p/11171783.html 和 https://www.linuxprobe.com/environment-variable-configuration.html,具体操作步骤,

生效时间:新开终端生效,或者手动source /etc/profile生效
生效期限:永久有效
生效范围:对所有用户有效
Linux环境变量配置方法六:vim /etc/environment
该方法是修改系统环境配置文件,需要管理员权限或者对该文件的写入权限:

# 如果/etc/bashrc文件不可编辑,需要修改为可编辑
chmod -v u+w /etc/environment
 
vim /etc/profile
 
# 在最后一行加上
 export PATH=$PATH:/usr/local/go/bin
 export GO111MODULE=on
 export GOPROXY=https://goproxy.cn

操作完发现仍有问题,报错 zsh: command not found: go,通过查阅资料,发现是由于自己安装了zsh,

需要在把.bash_profile 全部环境变量加入 zsh shell,或者在 zsh shell 中加入 go 环境变量。这里直接将环境变量添加到.zshrc 中了。

sudo vim .zshrc
# 在最后一行加上
export PATH=$PATH:/usr/local/go/bin
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
source ~/.zshrc

第一个Go程序 Hello World

永远的 Hello,World

package main

import "fmt"
func main() {
   /* Always Hello, World! */
   fmt.Println("Hello, World!")
}

解释:

  1. package main 定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包。package main 表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

  2. import “fmt” 告诉编译器程序运行需要用 fmt 包,fmt 包含有格式化 I/O 函数,类似于 C 语言的 printf 和 scanf。

  3. func main () 是程序开始执行的函数,main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init () 函数则会先执行该函数)。

  4. {} 中 “{” 不可以单独放一行。

    ★注:Go 比较特别,遵守分号注入规则(automatic semicolon injection):编译器会在每行代码尾部 – 特定分隔符后加; 来分隔多条语句,比如会在 ) 后加分号:所以 {} 中 “{” 不可以单独放一行,防止出现:

    // 等效于
    func main();    // 无函数体                    
    {
        println("hello world")
    }
    
  5. // 是注释,在程序执行时将被忽略。// 单行注释, /* … */ 多行注释也叫块注释,不可以嵌套使用,一般用于包的文档描述或注释成块的代码片段。

  6. fmt.Println (…) 将字符串输出到控制台,并在最后自动增加换行字符 \n。用 fmt.Print (“hello, world\n”) 可以得到相同的结果。

关于 GO111MODULE(和 GOPROXY)的小困惑

对于环境变量,GO111MODULEGOPROXY 的作用理解的不是很透彻,翻看了一些博客但还是一知半解,此处不求甚解‍,略略略~,等到了“第8节、包管理”后再回头研究一下这里,参考:

https://learnku.com/go/t/39086

https://www.cnblogs.com/pu369/p/12068645.html

你可能感兴趣的:(初识Go,go,golang,linux,编程语言,ubuntu)