Go包代码示例
原创
©著作权归作者所有:来自51CTO博客作者hyjy2504164765的原创作品,请联系作者获取转载授权,否则将追究法律责任
代码结构:
(1) package/calc/add.go
packagecalc
import
"fmt"
)
// Add 函数
func Add(x, y int) int
return x + y
}
// init 函数
// (1) init函数没有参数也没有返回值,我们也不能在代码中主动调用它
// (2) init函数在包导入的时候自动执行
// (3) init函数多用来做一些初始化的操作
// (4) 包内的init函数是在全局声明(变量、函数)之后执行的,init函数在包导入的时候自动执行
// (5) 一个包的初始化过程是按照代码中引入的顺序来进行的,所有在该包中声明的init函数都将被串行调用并且仅调用执行一次。
// 每一个包初始化的时候都是先执行依赖的包中声明的init函数再执行当前包中声明的init函数。确保在程序的main函数开始执行
// 时所有的依赖包都已初始化完成。
// go语言包
// (1) 包可以理解为一个文件夹下存放多个go文件,该文件以"package <包名>"开头
// (2) 在一个包中通常将实现不同功能的代码放到不同的文件中,这样逻辑会更清晰
// (3) 同一个包中的不同文件可以直接调用,不受标识符首字母大小写的影响
// (4) 不允许循环引用包和导入包而不使用
// (5) 当导入的包重名时可以给包起别名
// (6) 包内标识符首字母大写表示对外包可见,不对外包可见的标识符都要首字母小写,结构体转json时需要将字段首字母大写
// 注: 标识符
// 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。Go语言中标识符由字母数字和_(下划线)组成
// ,并且只能以字母和_开头。
// (7) 包的导入包括单行导入和多行导入,通常使用多行导入
// (8) 导入包却不使用它,只想使用包中的init函数对包资源进行初始化,叫做匿名导入包(import _)
func init() {
fmt.Println("this is calc add.init()")
}
(2) package/calc/sub.go
packagecalc
import
"01GoBase/package/snow"
"fmt"
)
func Sub(x, y int) int
snow.Snow()
return x - y
}
func init() {
fmt.Println("this is calc sub.init()")
}
(3) package/main/main.go
packagemain
import
"01GoBase/package/calc"
"fmt"
)
func main() {
add := calc.Add(1, 2)
fmt.Println(add)
}
/*结果:
this is snow snow.init()
this is snow snow.init()
this is calc add.init()
this is calc sub.init()
3
*/
(4) package/snow/snow.go
packagesnow
import "fmt"
func Snow() {
fmt.Println("下雪了")
}
func init() {
fmt.Println("this is snow snow.init()")
}
func init() {
fmt.Println("this is snow snow.init()")
}
(1) package/test1/main02.go
packagemain
import
"01GoBase/package/test2"
"fmt"
)
func main() {
name := test2.Info{
Name: "刘畅",
Age: "18",
}
fmt.Println(name) // {刘畅 18}
test2.Add(100, 12) // 88
}
(2) package/test2/add02.go
packagetest2
type Info struct
Name string
Age string
}
func Add(x, y int) {
sub(x, y)
}
(3) package/test2/sub02.go
packagetest2
import "fmt"
func sub(x, y int) {
fmt.Println(x - y)
}