Loading

Go包代码示例

代码结构: image-20220521173757435

(1) package/calc/add.go

package calc

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

package calc

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

package main

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

package snow

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

package main

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

package test2

type Info struct {
Name string
Age  string
}

func Add(x, y int) {
sub(x, y)
}

(3) package/test2/sub02.go

package test2

import "fmt"

func sub(x, y int) {
fmt.Println(x - y)
}

posted @ 2022-05-21 17:52  云起时。  阅读(140)  评论(0编辑  收藏  举报