文章目录
- 前言
- 一、自定义导入包
- 二、Go mod的好处
- 三、Go常用命令
前言
在Go语言入门环境搭建中有两个重要的概念GOPATH和GOROOT,其中GOROOT是我们安装的go路径例如D:\Go
,将这个路径设置到环境变量就配置好了GO目录的安装路径了。PATH环境变量就是%GOROOT%\bin
路径,如D:\Go\bin
路径。
而GOPATH则是我们的工作目录,就是写代码的目录,在环境变量中配置之后,我们编译源代码等生成的文件都会放到这个目录下,这个目录下我们一般会新建三个文件夹:src、pkg、bin:
- src 目录存放的是我们的go源代码,不同工程项目的代码以包名区分。
- pkg 编译后生成的文件(比如:.a)
- bin文件夹存放
go install
命名生成的可执行文件,
如果要修改的话可以直接在cmd执行相应的设置命令如:set GO111MODULE=on
,日常开发中我们通常需要自定义导入包,初学go在自定义导入包时被难住的人应该也不在少数,下面将介绍如何自定义导入包。
一、自定义导入包
在src下新建目录结构如下,此次测试主要涉及UserImport文件夹下的测试(主要是测试,不在意细节)
Hello.go:
package apk //自定义
import "fmt"
func Hello(name string) {
fmt.Println("apk----name:", name)
}
Service.go:
package apk //自定义
import "fmt"
func Register(name string) {
maps := make(map[string]int)
maps[name] = 2
fmt.Println(maps[name])
}
testApk.go:
package main
import "UserImport/apk"
func main() {
apk.Hello("xiaozhang")
apk.Register("dingli")
}
此时我们会发现在testAp.go中导入是报错的,我们需要在UserImport下执行一次go mod init命令
执行完之后在UserImport下就会多一个文件go.mod,打开为如下内容:
此时发现我们的导入不会报错了,可直接执行使用。另一个需要注意的事项是暴露方法的方法名称首字母需要大写,因为go根据方法字段首字母大小写判断方法的可见性,这是很容易犯的错。
总结下来就几个步骤:
- 设置变量GO111MODULE为on
- go mod init + projectname:初始化mod
其中go.mod称为模块根,定义了它所在目录为一个模块,优势是不受GOPATH的限制,可以在任意的文件夹下创建工程,在GoLand中使用go mod模式创建工程,会自动生成go.mod文件,然后就可以正产编译包了。
二、Go mod的好处
在开发中,我们可能会配置多个GOPATH,每个project使用不同的GOPATH。多个project会导致多个GOPATH目录,而go优先使用第一个GOPATH目录,会导致编译冲突,解决办法就是使用如下目录将多个project或工具组件都放在GOPATH的src目录下,此时GOBIN可以为空。GOPATH目录和GOPATH下的src不应该添加到源代码管理中,而是各个project目录myApp1、myApp2、myApp3各自独立进行源代码管理:
goWorkSpace // goWorkSpace为GOPATH目录
-- bin
-- myApp1 // 编译生成
-- myApp2 // 编译生成
-- myApp3 // 编译生成
-- pkg
-- src
-- common 1
-- common 2
-- common utils ...
-- myApp1 // project1
-- models
-- controllers
-- others
-- main.go
-- myApp2 // project2
-- models
-- controllers
-- others
-- main.go
-- myApp3 // project3
-- models
-- controllers
-- others
-- main.go
三、Go常用命令
go build :编译源码文件,go install 生成可执行文件,go clean:清除相关应用包,go run 运行代码
golang 的go build、go install 命令都是可生成可实行文件,了解它们的小区别以选择适合自己的。
go install和go build在没有参数时运行,都会在当前目录下编译,如果当前目录是软件主程序(package main)
- go build会生成可实行文件放在当前目录中
- go install则会把它放到$GOPATH/bin中。
go install还会把导入的依赖包编译到$GOPATH/pkg,并缓存,如果包未做更改,下次编译则直接使用缓存。go build命令加参数-i也能达到go install的效果。
如果当前目录是非主包,则go install直接把编译结果安装到$GOPATH/pkg。如果项目很大,每次编译都要花很长时间,则建议使用go install来编译,充分利用它对依赖包的缓存功能。