go手工引入包注意事项
本项目只是检测一些自建的包的引用关系需要注意的事项。
并没有引用第三方的包也没有进行依赖管理等。
testpackage项目目录文件结构:
并没有引用第三方的包也没有进行依赖管理等。
testpackage项目目录文件结构:
C:\Program Files\Go\src\testpackage>tree /f 文件夹 PATH 列表 卷序列号为 3AE9-D7D1 C:. │ go.mod │ main.go ├─imp //imp是包名 │ add.go //定义Gadd函数被main.go引用 │ sub.go //定义sub函数,作用是内部调用,不对外 └─internelimp interl.go //定义Intelfunc函数被imp包内的Gadd函数引用
main.go(主程序)
package main import ( "fmt" "testpackage/imp" ) /* 1.Go语言中不允许导入包而不使用 2.Go语言中不允许循环导入包 3.需要注意引用其他包的函数的首字母要大写. 4.代码放在$GOPATH/src目录下的话,导入包的路径是从$GOPATH/src+项目名称 这里项目名称为testpackage,包引入imp 5.引入的包内文件(库源文件)不能包含main函数 6.关于命令源文件: 如果一个 Go 源文件被声明属于 main 包,并且该文件中包含 main 函数,则它就是命令源码文件。 命令源文件属于程序的入口,可以通过Go语言的go run命令运行或者通过go build命令生成可执行文件。 7.库源文件:库源文件则是指存在于某个包中的普通源文件,并且库源文件中不包含 main 函数。 */ //init函数用来做一些初始化工作的 func init() { fmt.Println("-----main执行初始化工作-----") } func main() { fmt.Println("-----main执行开始------------------------------") ret := imp.Gadd(10, 20) fmt.Println(ret) //输出imp包内声明的变量Name fmt.Println(imp.Neaning) fmt.Println("----main执行成功,生成可执行文件-----------------") }
imp/add.go
package imp import ( //导入包规则: $GOPAH/src/项目名称/+引用目录 "testpackage/internelimp" "fmt" ) /* 1、标识符首字母大写标识对外可见 2、通常不对外的标识符都是要首字母小写 */ var Neaning = "我是imp包的变量Neaning-------" //首字母大写,别的包调用的话 func Gadd(a, b int) int { fmt.Println("----Gadd函数调用internelimp包开始-----")
//internelimp包内的Inelfunc函数 internelimp.Intelfunc() fmt.Println("----Gadd函数调用internelimp包结束-----") return a + b } /* 说明 1.init函数在包导入的时候自动执行 2.init函数没有参数也没有返回值 */ func init() { fmt.Println("---初始化Gadd函数开始 init----")
//同一个包内,内部引用,所以用小写,也不用加包名. su := sub(50, 40) fmt.Println(su) //-10 fmt.Println("---初始化Gadd函数结束 init----") //fmt.Println(Neaning) }
imp/sub.go
package imp import ( "fmt" ) //内部引用,若首字母为小写,则对外不可见 func sub(x, y int) int { fmt.Println("----我是sub,Gadd函数在调用我-----") ret := x -y return ret }
C:\Program Files\Go\src\testpackage\internelimp\interl.go
package internelimp import "fmt" //被其他包引用,首字母需大写 func Intelfunc() { fmt.Println("---Intelfunc函数被调用---") } func init() { fmt.Println("internelimp --------init()-----") }