Go发展及环境搭建

Go发展

诞生

Go的诞生要从Ken Thompson说起。

1966年,Ken Thompson就职于贝尔实验室,参与了MULTICS项目,独自开发了B语言,并利用一个月时间用B语言开发了一个精简的操作系统,起名UNICS。后来,同事Dennis Ritchie基于B语言发明了C语言。他们一起用C重写了Unix系统。

Rob Pike是贝尔实验室Unix组成员,也是《Unix环境编程》和《程序设计实践》作者之一。1992年和Ken Thompson共同设计了UTF-8编码。2002年加入Google,研究操作系统。

2006年,Ken Thompson加入Google。

2007年9月20日,身处Google的Rob Pike对不断扩充新特性的C++非常不满,与Robert Griesemer(之前参与JavaScript V8引擎和Java HotSpot虚拟机)、Ken Thompson进行了一次关于设计一门新语言的讨论。第二天,三人继续进行了对新语言设计的讨论会,并在会后由Robert Griesemer发出了一封邮件,总结了设计思路:新语言要在C语言基础上,修正一些明显缺陷,删除一些被诟病的特征,吸取Java、Python等语言优秀特征来增加一些缺失的功能。

2007年9月25日,Rob Pike在一封回复邮件中把新语言命名为Go。

2009年10月30日,Go语言首次公之于众。

2009年11月10日正式开源,这一天被Go官方确定为Go语言诞生日。

Go语言也拥有了自己的吉祥物(Rob Pike夫人Renee French设计的地鼠)。Go程序员被称为Gopher。

重要版本

2012年3月28日,Go 1.0正式发布。
2015年8月19日,Go 1.5这个里程碑版本发布。

  • Go不在依赖C编译器,Go编译器和运行时都使用Go代码了,实现了自举
  • GOMAXPROCS的默认值1改为运行环境的CPU核数

2018年8月25日,Go1.11版本发布。

  • 引入Go Module包管理机制

2021年2月18日,Go 1.16版本发布。

  • Go Module-aware模式成为默认模式,即GO111MODULE默认从auto改为on
  • go build/run命令不再自动更新go.mod和go.sum文件

2022年3月15日,Go 1.18版本发布

  • 引入了泛型Generic
  • 支持工作区Workspace

设计理念

其它语言的弊端

  • 对多核CPU缺乏支持。很多语言诞生过早,还停留在单核CPU时代,对多核CPU并行开发未做设计
  • C语言等原生语言缺乏好的依赖管理(C语言依赖头文件)
  • Java、C++等语言过于笨重。很小一个需求,也需要很多代码,甚至需要引入很重的框架
  • C、C++没有提供垃圾回收,这对很多程序员来说并不友好

Go设计者推崇“最小方式”思维,即一件事仅有一种方式,或尽可能少的方式去完成。目的是减少开发人员选择的痛苦,减少理解别人选择的苦恼。

  • 仅有25个关键字,简洁的语法
  • 内置垃圾回收器,大大降低程序员管理内存的负担
  • 去除大部分隐式类型转换、去除指针算数,提高语言健壮性
  • 首字母大小写决定可见性,通过约定而不是声明告诉开发者,提高阅读效率
  • 不支持函数默认参数,必须明确每个参数意义,提高设计的清晰度和代码可读性
  • 没有面向对象的类,也没有子类,没有构造函数和析构函数
  • 偏好组合;定义多个功能,把多个功能组合到一起使用
  • 任何类型都可以拥有方法,也容易为其增加方法(接口类型除外)
  • 接口只是方法的集合,其实现是隐式的(无需像Java语言一样用implements显示声明)
  • n--、n++都是语句,不是表达式。没有--n、++n、a=a++、a=a--
  • 没有三元运算符,只能使用if...else或switch
  • 内存总是初始化为零值
  • 没有异常,只有错误
  • 内置字符串、切片、map等常用数据类型
  • 内置并发支持,对多核计算机支持友好。goroutine、channel、select就是为并发而生的
  • 官方提供了丰富的工具链,涵盖了编译、编辑、依赖获取、调试、文档、性能分析等诸多方面

环境与开发

官方网站:https://go.dev/https://golang.google.cn/ 小道消息未来可能后者合并到前者

目前主要使用的版本是1.18.x+,官方最新为1.22.x。

注:对于所有语言,不追求最新版本。新版会引进新特性、新功能,这些都可能导致Bug,而且项
目中使用的第三方库未必兼容。因此,使用最新版本有很大风险。如果尝鲜可以试装新版。

Go的安装环境要求:

  • Go 1.11+ 要求Win7+、Win Server2008 R2+
  • Go 1.17+ 要求Win7+、Win Server2012+、MacOS 10.13+
  • Go 1.21+ 要求Win10+、Win Server 2016+、MacOS 10.15+

安装

安装文档 https://golang.google.cn/doc/installhttps://go.dev/doc/install

Windows安装

1、下载go安装包

下载地址:

https://go.dev/dl/go1.22.4.windows-amd64.msi

按照向导进行安装,一直下一步就行

2、验证是否安装成功
>go version
go version go1.22.4 windows/amd64
3、添加环境变量

阿里云参考 https://developer.aliyun.com/mirror/goproxy
七牛云参考 https://goproxy.cn/
建议:https://goproxy.cn,direct

  • GO111MODULE可以不配置了,默认开启
  • 如果是当前用户使用,就是用户环境变量;如果是系统所有用户使用,就是系统变量,需要管理员权限
  • 也可以使用go env命令增加环境变量
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
4、验证环境变量是否修改成功

修改完环境变量后可cmd 界面输入下列指令查看是否修改成功:

go env

Linux安装

1、下载安装包
wget https://golang.google.cn/dl/go1.22.4.linux-amd64.tar.gz
2、解压文件至/usr/local
tar zxvf go1.22.4.linux-amd64.tar.gz -C /usr/local
3、配置环境变量
echo PATH=/usr/local/go/bin/:'$PATH' >> /etc/profile && source /etc/profile
go env -w GOPROXY=https://goproxy.cn,direct

环境变量

  • GOROOT:GO安装目录,源码目录
  • PATH:环境变量PATH添加GOROOT下的bin目录,go可执行文件所在目录
  • GOPATH 第三方依赖包安装路径

    • 例如我本机默认GOPATH=~go,即家目录下的go目录
    • GOMODCACHE存储第三方依赖包
  • GO111MODULE=on

    • go早期版本管理依赖包方式使用GOPATH和vendor文件夹
    • 从1.11引入Go Module,1.16版本开始GO111MODULE默认为on,会根据go.mod管理和下载依赖
  • GOPROXY 1.13开始支持。国外站点经常失败,建议改为国内镜像站地址

一定要配置,不然后面安装包经常下载包很困难

Windows主要环境变量,如下
>go env
set GO111MODULE=
set GOARCH=amd64
set GOENV=C:\Users\17633\AppData\Roaming\go\env
set GOMODCACHE=C:\Users\17633\go\pkg\mod
set GOOS=windows
set GOPATH=C:\Users\17633\go
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:\Program Files\Go
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVERSION=go1.22.4
Linux主要环境变量,如下
[root@localhost ~]# go env
GO111MODULE=""
GOARCH="amd64"
GOENV="/root/.config/go/env"
GOMODCACHE="/root/go/pkg/mod"
GOOS="linux"
GOPATH="/root/go"
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVERSION="go1.22.4"

# echo $PATH
PATH=/usr/local/go/bin/:$PATH

开发工具

  • Git版本管理工具。
    下载地址:https://git-scm.com/downloads
  • VSCode 微软推出的跨平台、轻量级、插件化、多语言开发IDE。

    • 下载地址 https://code.visualstudio.com/Download
    • Windows、MAC、Debian、RedHat
    • Windows User版是当前用户一人使用;System版当前机器所有用户使用
    • Ubuntu可以在应用市场搜索vscode或官方下载安装

VSCode插件安装

1、go插件

打开VSCode->Ctrl+Shift+x(打开扩展按钮)->左上角搜索框输入go->找到go扩展点击安装

2、gopls插件

gopls(发音Go please)是官方提供的模块,实现语言服务器协议LSP的Language Server,具有构建、格式化、自动完成等功能。
LSP是由微软开发的开发标准,它为编辑器提供对语言特性的支持。
当使用模块和 VSCode 时,在编辑器中点击保存将不再直接运行 go build 命令。现在发生的情况是,一个请求被发送给 gopls,gopls 运行适当的 Go 命令和相关的 API 来提供编辑器反馈和支持。
安装步骤
Ctrl+R->输入cmd->输入“go install -v golang.org/x/tools/gopls@latest”
参考配置 https://github.com/golang/tools/blob/master/gopls/doc/settings.md
Vscode中打开Settings,搜索gopls,点击Edit in settings.json设置"formatting.gofumpt": true。

{
"gopls": {
"formatting.gofumpt": true,
"ui.completion.usePlaceholders": true
    }
}
3、dlv(必须)

go-delve是Go语言的调试利器。
编写一个main.go,输入pkgm自动补全

package main

import "fmt"

func main() {
}

安装dlv命令如下

go install -v github.com/go-delve/delve/cmd/dlv@latest

也可在VSCode安装Outline Map、Golang postfix以提高编码效率

Go命令

使用 go help <command> 查看帮助
语言参考 https://golang.google.cn/doc/https://go.dev/doc/

查看版本

go version

查看环境变量

go env

Go Module工程化模块相关命令。模块化后就可以进行更好的工程管理、依赖管理。

go mod init github.com/test 
go mod tidy

go mod init github.com/test 初始化模块目录,产生go.mod文件,和git init等很类似
go mod tidy 扫描当前模块,从go.mod中移除未使用依赖,添加新的依赖

查找依赖包,如果未下载,则下载项目依赖包,添加相关信息到go.mod中,文件存储到环境变量GOMODCACHE 指定的目录中(默认GOPATH/pkg/mod)。

go get -u github.com/user/repo

-u 下载最新包或有效更新包。默认情况下,本地有包就不下载了。如果网上有最新版,-u选项会更新本地包。

如果需要编译包,就执行go install,并把编译好的可执行文件放到GOPATH/bin下。

go install golang.org/x/tools/gopls@latest

编译Go代码,生成可执行文件,-o 指定生成的可执行文件。

go build [-o output] [build flags] [packages]

编译生成可执行文件并执行。

go run main.go 指定main函数所在文件
go run github.com/test 去该模块找main函数
最后修改:2024 年 06 月 08 日
如果觉得我的文章对你有用,请随意赞赏