Go中的包是什么?其实就是一个目录,用来把go文件组织起来便于归类、复用等,Go语言中包名和文件所在的目录名是一样的。
Go中包如何命名的?遵循简洁、小写、与go文件所在目录同名的原则,按照约定包名与导入路径的最后一个元素一致。
如何导入包?import关键字来导入包,比如使用go自带的http包,需导入net/http即全路径(net为顶级包,http包在net里面)。
如何导入多个包?分组导入,使用一对圆括号包好的导入块,每个包单独占一行。
如何导入远程包?前提是必须是该包托管在一个分布式的版本控制系统上,比如Github、Bitbucket等,并且是public权限。
顶级包一般如何命名?由于需要全路径导入,为避免与他人重,故一般采用域名作为顶级包的方式。
没有域名怎么办?what???必须github.com,在github上必须有一个自己账号,没有必须赶紧申请一个。
Go中的main包?go中一个包名若声明为main相当于告诉go编译程序,这是一个可执行的程序,故编译程序就会尝试把它编译成
一个二进制的可执行文件。main包一定包含main()函数,作为程序入口。
注:go中,同时满足main包和包含main()函数,才会被编译成一个可执行文件,且其名字就是该main包的go文件所在目录的名字。
Go中重要的环境变量?GOROOT(安装Go的路径)、GOPATH(自己定义的开发者工作区间)。比如我的go安装在:/opt/go,开发
目录是:/home/admin/go。
编译时候如何找导入的包?先在GOROOT里搜索,其次GOPATH,即编译器使用这两个路径加上import导入的相对全路径来查找,
一旦找到,立即停止,若未找到,编译异常。
编译时候如何找远程包导入?现在GOPATH下搜索,未找到就使用go get工具从版本控制系统比如Github上获取,并且把获取到的源代码
存储在GOPATH目录下对应的URL的目录里,供编译使用。
导入的包名有重复的咋办?对导入的包重新命名,即命名导入(在导入时候,在包名左侧,起一个新的包名即可)。比如:myfmt "mylib/fmt"
导入一个包又不想使用它咋办?Go语言规定,导入的包必须使用,否则报编译错误。可用空白标识符_来重命名导入的包即可被忽略。
Go中包的init函数?每个包可有任意多个init函数,且都会在main函数之前执行。init函数通常用来初始化变量、设置包或者其他需要在
程序执行前的引导工作。比如:空白标识符_导入一个包,目的就是想执行该包里的init函数。
例子:Go语言为统一关于数据库的访问,使用database/sql抽象一层数据库的操作,可以满足我们操作MYSQL、Postgre等数据库,其
作用是不管使用这些数据库的哪一个驱动,编码操作都一样。原理是:定义了init函数,程序运行之前把实现好的驱动注册到sql包里。
导出名是什么?Go中,一个名字以大写字母开头,则它是已导出的,并且导入一个包时你只能引用其中已导出的名字,任何“未导出“的名字在该包外均无法访问。