Go语言中的包Package怎么使用
导读:本文共1994.5字符,通常情况下阅读需要7分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 问题一、Go使用Package组织源码的好处是什么?1.任何源码属于一个包2.用包组织便于代码的易读和复用问题二、Go语言中Package的种类Go语言中存在两种包、一种是可执行程序的包、一种是类库函数的包。可执行程序的包,编译完成后会生成一个可执行文件、静态库的包编译之后会生成一个.a为后缀的文件,自己不能执行只能被可执行包引用。可执行程序的包必须以main作... ...
目录
(为您整理了一些要点),点击可以直达。问题一、Go使用Package组织源码的好处是什么?
1.任何源码属于一个包
2.用包组织便于代码的易读和复用
问题二、Go语言中Package的种类
Go语言中存在两种包、一种是可执行程序的包、一种是类库函数的包。
可执行程序的包,编译完成后会生成一个可执行文件、静态库的包编译之后会生成一个.a为后缀的文件,自己不能执行只能被可执行包引用。
可执行程序的包必须以main作为包名,静态库的包名没有要求。
例如下面的实例:landlords存在如下几层结构 dal层、logic层、main以及proto层
可以看到编辑后的结果是,生成了一个db.a数据库访问的库、redis.a 缓存访问的库、logic.a 业务逻辑层的库 以及一个proto.a 协议层的库(websocket.a 是由于引用了github.com下面的包),main包最终编译成了一个可执行文件。
main包和其他类库通过静态链接,最终形成的可执行文件是没有任何外部依赖的。
补充:如何生成一个静态库的包。
打比方我创建了如下的项目,现在有这样一个包,我想要在main里面引用它。
必须使用 go install
命令,生成一下package,发现报错了。因为我没有配置gopath,所以命令报错了。
还有一个关键原因就是,我这个项目不是建立在GoPath下Src目录的,所以go install就用不了。
这也是问题的关键,就是我们在创建项目的时候,需要先配置一个GoPath加入到环境变量当中,然后里面新建三个文件夹src、pkg以及bin文件夹,然后在src下面建立自己的项目。
我把改项目,放到了一个GoPath的src目录下,重新go install之后,在对应的pkg文件夹下生成了 calc.a文件。
然后我们就可以在main中引用这个包了,如下:
packagemainimport("PackageDemo/Calc""fmt")funcmain(){vara,bint=3,1varadd=Calc.Add(a,b)varmin=Calc.Min(a,b)fmt.Println("Addresult:",add)fmt.Println("Minresult",min)}
问题三、包引用和init函数的执行顺序问题。
一个包引用另一个包的初始化顺序,像下面的这个流程,main引用了add包,add包引用了sub包。
是从底层还是初始化的。
add.go
packageaddimport("fmt""PackageDemo/sub")funcinit(){fmt.Println("我是add包的init函数")}funcAdd(){sub.Sub()}
sub.go
packagesubimport"fmt"funcinit(){ fmt.Println("我是sub包的init函数")}funcSub(){ fmt.Println("")}
main.go
packagemainimport( "fmt" "PackageDemo/add")funcinit(){ fmt.Println("我是Main里面的init函数")}funcmain(){ add.Add()}
结果:
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
Go语言中的包Package怎么使用的详细内容,希望对您有所帮助,信息来源于网络。