【原创】go言语进修(十一)package简介
2019-11-18杂谈搜奇网73°c
A+ A-目次
- Go源码构造体式格局
- main函数和main包
- 编译敕令
- 自定义包
- init函数以及实行行递次
- _标识符
Go源码构造体式格局
1、 Go经由过程package的体式格局来构造源码
package 包名
注重:任何一个源码都属于一个包
作用:代码复用和可读性
2、可执行顺序的包名必需为main,而且包括一个main函数
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、除了可执行顺序以外,用户能够写自定义包,自定义包编译成静态库
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 }
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函数,在顺序启动时会被自动挪用
package calc import ( "fmt" ) // 先执⾏行行全局 // 变量量初始化 var a int=10 // 然后再执行 // init函数 func init() { } // 末了执行 // main函数 func Add(a, b int) int{ return a+b }
2、 假如一个包import别的一个包
_标识符
1、_ 没有援用保存包
package calc import ( “fmt" _ “sub” ) func Add(a, b int) int{ return a+b }
未定义标签