标签:GOPATH github golang user go com hello 结构
golang包管理
一、GOPATH
GOPATH:进行golang开发时的工作空间,你编写的go源代码和编译后生成的可执行程序都将存放在GOPATH下。注意,GOPATH只是一个普通的文件目录并且你所有的编码工作都应该在该目录下完成(golang 1.11版本引入 包依赖管理工具go mod,可以在GOPATH以外编写go程序)。
配置GOPATH:首先创建一个目录C:\go(windows),$HOME/go(linux),该目录将作为GOPATH;GOPATH的目录结构如下:
bin:存放编译后的可执行文件。
src:存放GO程序源码,它们被组织成包(每个目录都对应一个包)。
pkg:包对象。
在环境变量中配置GOPATH:
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
注意:GOPATH可以包含多个目录,这些目录不能和go的安装目录相同。
二、包导入
go程序的第一行语句必须是 package pkgname
package hello // hello 为包名
go中的包名称通常以一个全小写的单词(缩写)命名(如fmt),为了自己的包名称不和go标准库中的包名称重名,对于你自己的包必须要选择一个基本路径。例如你有一个fmt的包,那你必须选择一个基本路径example.com/user/,才不会和标准库中的fmt冲突。go官方推荐使用github.com/user做为包的基本路径(user为github账号名)。go文件中的包名称(package pkgname)为go源文件所在文件夹(包)的最后一级文件夹名。
注意:对于可执行文件的包名必须为main。
package main
例子:
定义一个自己的go库:
在GOPATH/src下创建一个包github.com/user/hello(如果使用go mod init 可以在任意位置创建包):
# golang 1.11前 GOPATH模式
$ mkdir $GOPATH/src/github.com/user/hello
$ cd $GOPATH/src/github.com/user/hello
# golang 1.11后 go mod模式
$ mkdir $HOME/github.com/user/hello
$ go mod init github.com/user/hello # 创建一个模块(项目)
在hello目录(包)下创建hello.go:
package hello // 包名称,包名称为go源文件所在文件夹(包)的最后一级文件夹名
import (
"fmt"
)
func Hello() {
fmt.Println("hello world")
}
执行go命令:
$ go build github.com/user/hello # 将会去GOPATH/src寻找github.com/user/hello
使用自定义的库:
在GOPATH/src下创建一个包github.com/user/test:
$ mkdir $GOPATH/src/github.com/user/test
$ cd $GOPATH/src/github.com/user/test
在test目录(包)下创建test.go
package main // 包名称
import (
"fmt"
"github.com/KillerTwo/hello" // 导入自定义包
)
func main() {
hello.Hello() // 调用hello包中的Hello()
}
执行go命令:
$ go install /github.com/user/test # 将会去GOPATH/src寻找github.com/user/test
该命令将会在$GOPATH/bin 下生成可执行文件(二进制文件)test。
运行可执行文件:
$ hello
# 输出: hello world
对于golang包管理官方文档有很好的介绍和例子,本文只是自己看官方文档的简单总结,如有写的不清楚的地方请看官方文档(https://golang.google.cn/doc/code.html#Command)。
标签:GOPATH,github,golang,user,go,com,hello,结构 来源: https://www.cnblogs.com/yourblog/p/12811839.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。