赞
踩
在Go语言入门环境搭建中有两个重要的概念GOPATH和GOROOT,其中GOROOT是我们安装的go路径例如D:\Go,将这个路径设置到环境变量就配置好了GO目录的安装路径了。PATH环境变量就是%GOROOT%\bin路径,如D:\Go\bin路径。
而GOPATH则是我们的工作目录,就是写代码的目录,在环境变量中配置之后,我们编译源代码等生成的文件都会放到这个目录下,这个目录下我们一般会新建三个文件夹:src、pkg、bin:
go install命名生成的可执行文件,
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根据方法字段首字母大小写判断方法的可见性,这是很容易犯的错。
总结下来就几个步骤:
其中go.mod称为模块根,定义了它所在目录为一个模块,优势是不受GOPATH的限制,可以在任意的文件夹下创建工程,在GoLand中使用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 build :编译源码文件,go install 生成可执行文件,go clean:清除相关应用包,go run 运行代码
golang 的go build、go install 命令都是可生成可实行文件,了解它们的小区别以选择适合自己的。
go install和go build在没有参数时运行,都会在当前目录下编译,如果当前目录是软件主程序(package main)
go install还会把导入的依赖包编译到$GOPATH/pkg,并缓存,如果包未做更改,下次编译则直接使用缓存。go build命令加参数-i也能达到go install的效果。
如果当前目录是非主包,则go install直接把编译结果安装到$GOPATH/pkg。如果项目很大,每次编译都要花很长时间,则建议使用go install来编译,充分利用它对依赖包的缓存功能。
更多go mod相关知识可以参见:怎么配置golang项目module模块?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。