[Golang从零到壹] 1.环境搭建和第三方包管理

文章目录

    • 安装go环境
    • go.mod
      • 第一种情况,选择GOPATH
      • 第二种情况,不选择GOPATH(推荐)
    • GO111MODULE
    • go module
    • 可执行文件位置

安装go环境

go在安装时选择好安装目录完成安装之后,还需要设置两个环境变量:GOROOTGOPATH

GOROOT即go的安装目录,配置成go的安装目录就可以

[Golang从零到壹] 1.环境搭建和第三方包管理_第1张图片

GOPATH即go将来做存储的路径,随便新建一个路径就可以

[Golang从零到壹] 1.环境搭建和第三方包管理_第2张图片

同时也要把环境变量中的用户变量的GOPATH也改成相应的值

[Golang从零到壹] 1.环境搭建和第三方包管理_第3张图片

然后需要在GOPATH目录下创建如下目录,以后会自动用到这些目录,go最原始的是这样,但是现在这三个文件夹用处改变了,但是为了安全起见还是创建这三个文件夹

pkg:编译后生成文件

src :项目的源代码

bin:编译后可执行的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQQNqF5C-1680186331518)(images/image-20221224135440302.png)]

安装golang开发环境IDE,选择刚才安装的go编译环境即可,可以写个helloworld测试

go程序必须有一个package main,当发现main包时,从main包中的main函数开始执行。

编译时会声明main包的代码所在目录的目录名作为可执行程序的文件名

package main
import "fmt"
func main() {
	fmt.Println("hello")
}

配置go get的代理镜像

[Golang从零到壹] 1.环境搭建和第三方包管理_第4张图片

go.mod

go-v1.19.4版本测试,在创建项目时有以下两种情况

第一种情况,选择GOPATH

golang中新建项目时如果选择GOPATH,并勾选Index entire GOPATH,将项目放到非GOPATH路径下(这里我放在E:\go1-workpath)

[Golang从零到壹] 1.环境搭建和第三方包管理_第5张图片

此时项目路径下没有go.mod文件(不会自动生成go.mod),这时项目是可以看到GOPATH/src的,并且通过go get安装的第三方包也是放在GOPATH/src下面,项目中的go程序可以导入这里的包。

如果设置了go modules的代理GOPROXY,就看不到GOPATH/src了,通过go get安装的第三方包也是放在GOPATH/src下面,但是此时go文件也不能import包。

这种方法的应用背景:直接go get下载不下来,就可以先设置proxy,这样会将第三方包下载到GOPATH/src下面,然后在取消goproxy,这样项目中的文件就可以导入包了。

第二种情况,不选择GOPATH(推荐)

golang中新建项目时如果没有选择GOPATH,则会在项目目录下自动生成一个go.mod文件,将项目放到非GOPATH路径下(这里我放在E:\go2-workpath)

此时不管是否设置了goproxy都看不到GOPATH

由于网络问题不设置goproxy下载不下来

设置了goproxy后,go get会将第三方包下载到GOPATH/pkg/mod目录下,并且此时可以直接导入包

GO111MODULE

自己理解的就是现在高版本的go如果项目路径下有go.mod,就开启了GO111MODULE,这样就不必须将项目路径放在GOPATH/src下了

GO111MODULE是go modules功能的开关

  • GO111MODULE=off,无模块支持,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找

  • GO111MODULE=on,模块支持,go命令行会使用modules,这样就不必须用到GOPATH

  • GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:

    • 当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。
    • 当前文件在包含go.mod文件的目录下面。

在使用go modules时,GOPATH是无意义的,不过它还是会把下载的依赖存储在$GOPATH/pkg/mod 中
也会把go install 的结果放在 $GOPATH/bin 中。

go module

如果一个项目依赖多个第三方包可以挨个go get,但是这样比较慢了,可以用go的第三方包管理器go module来做,这也是现在高版本的go的做法。

当然在go mod init之后,也可以用go get下载第三方包,会自动更新go.mod文件

  • 初始化,新建项目时golang不选择GOPATH会自动创建go.mod,或者手动创建go mod init <模块名>

  • 更新依赖go mod tidy这个命令将会扫描所有我们 import 到的包,并生成对应的记录到 gomod 文件里。

  • 下载依赖go mod download⽬前所有模块版本数据均缓存在 $GOPATH/pkg/mod$GOPATH/pkg/sum 下,同时会在项⽬根⽬录下⽣成 go.sum ⽂件, 该⽂件是依赖的详细依赖。

  • 导⼊依赖 go mod vendor我们的依赖下载完成后是存储了 $GOPATH ⽬录下的,如果有特殊需要,需要将 GOPATH 下的依赖转移⾄该项⽬根 ⽬录下的 vendor(⾃动新建) ⽂件夹下,可以使⽤该命令。

可执行文件位置

默认情况下生成路径如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cxg3OtNf-1680186331522)(images/image-20230330123637986.png)]

可以通过golang界面中右上角edit configuration设置将可执行文件生成到当前目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hIkC5hWH-1680186331523)(images/image-20230330123929023.png)]

参考链接

田老八的离线笔记

go语言:环境变量GOPROXY和GO111MODULE设置

关于go get 以后下载的包不在src下而在pkg的源头并且不可以import(Goland Modules模块的使用)

golang 系列: go mod 使用

【狂神说】Go语言零基础学习视频通俗易懂

你可能感兴趣的:(golang,golang,java,linux)