go
Wei Jieyang Lv4

安装

运行环境

  1. Mac下使用Homebrew安装
1
2
3
$ brew install go
$ go version
go version go1.16 darwin/amd64
  1. 或者在官网下载安装文件

安装包下载地址为:https://golang.org/dl/

如果打不开可以使用这个地址:https://golang.google.cn/dl/

  1. 解压下载文件
1
$ tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz
  • Mac用户直接双击.pkg文件,安装目录为/usr/local/go
  1. 安装完成后将 /usr/local/go/bin 目录添加至PATH环境变量:
1
$ export PATH=$PATH:/usr/local/go/bin

开发工具

Go采用的是UTF-8编码的文本文件存放源代码,理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用VS CodeGolandVS Code是微软开源的编辑器,而Goland是jetbrains出品的付费IDE。

  1. GoLand

GoLand 是 Jetbrains 家族的 Go 语言 IDE,有 30 天的免费试用期。

安装也很简单访问 Gogland 的下载页面,根据你当期的系统环境三大平台(Mac、Linux、Windows)下载对应的软件。

  1. LiteIDE

LiteIDE 是一款开源、跨平台的轻量级 Go 语言集成开发环境(IDE)。

支持的 操作系统

  • Windows x86 (32-bit or 64-bit)
  • Linux x86 (32-bit or 64-bit)

下载地址 :http://sourceforge.net/projects/liteide/files/

源码地址 :https://github.com/visualfc/liteide

  1. VS Code(本人使用)

VS Code的官方下载地址

安装Go插件

截屏2021-03-10 下午1.56.48
  • 配置包管理

    1. 进入项目根目录$GOPATH/src,运行命令$ go mode init 生成**go.mod包管理文件,此时在vs code中点击右上角的三角形即可成功运行(推荐**)
    2. 或者手动执行以下命令来添加
    1
    2
    3
    4
    5
    6
    7
    8
    9
    go get -u -v github.com/nsf/gocode
    go get -u -v github.com/rogpeppe/godef
    go get -u -v github.com/golang/lint/golint
    go get -u -v github.com/lukehoban/go-find-references
    go get -u -v github.com/lukehoban/go-outline
    go get -u -v sourcegraph.com/sqs/goreturns
    go get -u -v golang.org/x/tools/cmd/gorename
    go get -u -v github.com/tpng/gopkgs
    go get -u -v github.com/newhook/go-symbols
  1. Idea

在plugins中安装go插件

打开项目目录$GOPATH/src

创建一个项目文件夹hello,并添加第一个程序main.go

右上角设置运行环境edit configurations

根据红框更改配置

截屏2021-03-10 下午3.41.22

最后在终端中进入上面设置的 /Users/weijieyang/go/src 目录,运行命令$ go mode init 生成**go.mod**包管理文件

进入idea,点击右上角的三角形即可成功运行

包管理

go没有一个自己的包管理平台。社区里go的第三方包托管在各个git托管平台。需要用到包时通过go get 命令工具安装,但这个工具没有版本描述性文件,在go的世界里没有“package.json”这种文件。这个给我们带来直接的影响就是依赖放在外网,而且没有版本约束,这个月下的版本,可能下个月更新了。有道是“工欲善其事,必先利其器”,这个时候我们就需要一个依赖管理工具。
目前依赖工具有很多,如:glide、godep、gomod等。

dep和godep是两个东西

dep

下载:

  • Mac:

    1
    $ brew install dep
    • 该工具将会被下载到 /usr/local/Cellar/dep/0.5.4 中去
  • Debian:

    1
    $ sudo apt-get install go-dep
  • Other:

    1
    $ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh

使用

dep version

  • 查看dep、golang等版本

dep init

  • 初始化dep管理环境
  • 将在目录下生成 Gopkg.lockGopkg.tomlvendor
    • Gopkg.lock:是生成的文件,不要手工修改 Gopkg.lock 官方文档。
    • Gopkg.toml:是依赖管理的核心文件,可以生成也可以手动修改,
      • 一般情况下Gopkg.toml里面只定义直接依赖项,而Gopkg.lock里面除了包含Gopkg.toml中的所有项之外,还包含传递依赖项。比如我们的项目依赖项目A, 而项目A又依赖B、C,那么只有A会包含在Gopkg.toml中,而A、B、C都会定义在Gopkg.lock中。所以Gopkg.lock定义了所有依赖的项目的详细信息(commit ID和packages),使得每次build我们自己的项目时,始终基于确定不变的依赖项。Gopkg.toml 官方文档。
    • vendor目录:golang1.5 以后依赖管理目录,这个目录的依赖代码是优先加载的,类似 node 的 node_module 目录。

dep ensure

  • 将在 vendor 文件夹和 Gopkg.lock 文件中安装最新版本代码的依赖。
  • 相当于 node 中的 npm install,但并其功能更加复杂

注意:删除依赖只需要确保代码中没有使用,并再次执行 dep ensure 即可

dep ensure -add

  • 添加一条依赖
    • dep ensure -add github.com/bitly/go-simplejson
    • dep ensure -add github.com/bitly/go-simplejson@=0.4.3
      • 这里 @= 参数指定的是 某个 tag
  • 添加后一定记住执行 dep ensure 来同步

dep ensure -update -v

  • 更新依赖
  • -v:是为了更好的查看执行过程,建议加上。

dep status

  • 列出应用程序中使用的版本以及开发人员发布的最新版本

mod

go 会自动查找代码中的包,下载依赖包,并且把具体的依赖关系和版本写入到go.mod和go.sum文件中。
查看go.mod,它会变成这样:

1
2
3
4
5
module test

require (
github.com/gohouse/gorose v1.0.5
)
  • 使用Go的包管理方式,依赖的第三方包被下载到了 $GOPATH/pkg/mod 路径下。
  • 格式:
    • module:指定包的名字(路径),一般使用相对$GOPATH/src的路径最为包名
    • require:指定依赖项模块,前面是包名,后面 v1.11.1 是引用的版本号
    • replace:可以替换依赖项模块,比如可以替代远程github为本地包
    • exclude:可以忽略的依赖项模块

go mod init hello

  • 初始化当前文件夹为名为hello的模块,并且生成 go.mod 记录当前依赖包名及版本信息,由程序自动维护

go mod tidy

  • 下载缺少的依赖项,删除不需要的依赖项,并生成 go.sum 文件

结构

环境变量

1
2
3
4
5
6
7
8
# 查看环境变量
$ go env NAME

# 设置环境变量
# 1.仅在当前命令窗口设置,退出后将编绘原来的设置
$ export NAME=...
# 2.直接更改go env环境变量
$ go env -w GOPARTH=$HOME/go

下图为本机环境变量:

B73C0FB2855C12EA5F08CF4CBD86DFD5

GO111MODULE

  • GO111MODULE=off
    • go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
  • GO111MODULE=on
    • go命令行会使用modules,而一点也不会去GOPATH目录下查找。
    • 1.12后,无论在$GOPATH/src里还是在外面,都会使用go.mod 里 require的包
  • GO111MODULE=auto
    • 默认值,go命令行将会根据当前目录来决定是否启用module功能。
    • 项目在 $GOPATH/src 里会使用 $GOPATH/src 的依赖包
    • $GOPATH/src 外,就使用go.mod 里 require的包

GOROOT

  • go的安装路径
  • 默认为 /usr/local/Cellar/go/1.16/libexec

GOPATH

  • go install /。go get和 go的工具等会用到 GOPATH 环境变量.
  • GOPATH 是作为编译后二进制的存放目的地和import包时的搜索路径 (其实也是你的工作目录, 你可以在src下创建你自己的go源文件, 然后开始工作)。
    1. GOPATH 之下主要包含三个目录: bin、pkg、src
    2. bin目录主要存放可执行文件;
    3. pkg目录存放编译好的库文件, 主要是*.a文件;
    4. src目录下主要存放go的源文件
  • 不要把 GOPATH 设置成go的安装路径,一般可以设置为 $HOME/go

项目结构

在进行Go语言开发的时候,我们的代码总是会保存在$GOPATH/src目录下。在工程经过go buildgo installgo get等指令后,会将下载的第三方包源代码文件放在$GOPATH/src目录下, 产生的二进制可执行文件放在 $GOPATH/bin目录下,生成的中间缓存文件会被保存在 $GOPATH/pkg 下。

如果我们使用版本管理工具(Version Control System,VCS。常用如Git)来管理我们的项目代码时,我们只需要添加$GOPATH/src目录的源代码即可。binpkg 目录的内容无需版本控制。

个人开发者

我们知道源代码都是存放在GOPATHsrc目录下,那我们可以按照下图来组织我们的代码

1300537-20190325205527275-638377643

目前流行的项目框架

  • Go语言中也是通过包来组织代码文件,我们可以引用别人的包也可以发布自己的包,但是为了防止不同包的项目名冲突,我们通常使用顶级域名来作为包名的前缀,这样就不担心项目名冲突的问题了。

  • 因为不是每个个人开发者都拥有自己的顶级域名,所以目前流行的方式是使用个人的github用户名来区分不同的包。

  • 以后我们从github上下载别人包的时候,如:

    1
    2
    $ go get github.com/username/package
    import "github.com/username/package"
1300537-20190325205546430-23281384

企业开发者

1300537-20190325205654857-1473178176

语法

  • Post title:go
  • Post author:Wei Jieyang
  • Create time:2021-03-10 12:24:29
  • Post link:https://jieyang-wei.github.io/2021/03/10/go/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.