【原创】go语言学习(十一)package简介
目录
Go源码组织方式
main函数和main包
编译命令
自定义包
init函数以及执行行顺序
_标识符
Go源码组织方式
1、 Go通过package的方式来组织源码
1
package 包名
注意:任何一个源码都属于一个包
作用:代码复用和可读性
2、可执行程序的包名必须为main,并且包含一个main函数
1
2
3
4
5
6
7
package main
import (
"fmt"
)
func main() {
fmt.Println(“hello world”)
}
3、package组织案例例
再src/calc的包编辑完成后再pkg中
main函数和main包
1、链接工程
package main -- | 静态链接
|----------------------> 可执行文件
pkg/windows_amd64/.../*.a ---|
自定义包
1、除了可执行程序之外,用户可以写自定义包,自定义包编译成静态库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package calc
// package calc2 不建议这么写
// 包组织方式,自定义包
// 使用go install生成静态库
// calc_test中调用静态库
var (
Sum int
)
func Add(a int, b int) int {
return a + b
}
// 小写方法名为私有,不能调用
func sub(a int, b int) int {
return a - b
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main
import (
"fmt"
"github.com/gostudy/listen11/calc"
// _ 没有引用保留包
// _ "github.com/gostudy/listen11/calc"
)
// 调用pkg\windows_and64\githbu.com\gostudy\listen11\calc.a
// 执行全局变量,再执行init初始化
var a int = 10
var b int = 10
// init 函数,再main函数之前执行
func init() {
fmt.Println(a, b)
fmt.Println("init func in main")
}
// init函数可以多个,可以有多文件,多init,按编译顺序执行
// 1初始化sub 包
// 2初始化add import
// 3初始化main
func init() {
fmt.Println("init2 func in main")
}
func main() {
var sum = calc.Add(2, 3)
fmt.Printf("sum=%d\n", sum)
}
注意:go_path 要配置好路径
编译命令
1、go run运⾏行行go代码, 如果有多个⽂文件,需要把所有⽂文件都写到go run后⾯面
2、go build 编译go代码,如果是可执行程序,默认会在当前⽬目录⽣生成可执行程序,可以使⽤用-o指定可执行程序生成的目录。
3、go install编译go代码,并且把可执行程序拷贝到GOPATH的bin目录,自定义或第三方包会拷贝到GOPATH的pkg目录
init函数以及执行行顺序
1、一个包里可以有0个或多个init函数,在程序启动时会被自动调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package calc
import (
"fmt"
)
// 先执⾏行行全局
// 变量量初始化
var a int=10
// 然后再执行
// init函数
func init() {
}
// 最后执行
// main函数
func Add(a, b int) int{
return a+b
}
2、 如果一个包import另外一个包
_标识符
1、_ 没有引用保留包
1
2
3
4
5
6
7
8
package calc
import (
“fmt"
_ “sub”
)
func Add(a, b int) int{
return a+b
}
https://www.cnblogs.com/wangshuyang/p/11807454.html