细节说明
1、在给一个文件打包时,该包对应一个文件夹,比如这里的
utils
文件夹对应的包名就是utils
, 文件的包名通常和文件所在的文件夹名一致
,一般为小写字母
。2、 当一个文件要使用其它包函数或变量时,需要先引入对应的包
// 引入方式 1:
import "包名"
//引入方式 2:
import (
"包名"
"包名"
)
package
指令在 文件第一行,然后是import
指令。
在
import
包时,路径从$GOPATH
的src
下开始,不用带src
, 编译器会自动从src
下开始引入
- 3、为了让其它包的文件,可以访问到本包的函数,则该函数名的首字母需要大写,类似其它语言 的
public
,这样才能跨包访问。比如utils.go
的 - 4、在访问其它包函数,变量时,其语法是
包名.函数名
, 比如这里的main.go
文件中 - 5、如果包名较长,
Go 支持给包取别名
, 注意细节:取别名后,原来的包名就不能使用了
import (
"fmt"
util "demofunc01/utils"
)
- 6、 在
同一包下
,不能有相同的函数名
(也不能有相同的全局变量名
),否则报重复定义 - 7、 如果你要编译成一个可执行程序文件,就需要将这个包声明为
main
, 即package main
.这个就是一个语法规范,如果你是写一个库 ,包名可以自定义
编译一个可执行文件案例
1、演示一个案例,项目的目录如上图。
2、编译的指令,在项目目录下,编译路径不需要带src,编译器会自动带。
matsu workspace_go
$ go build demofunc01/main
3、编译时需要编译main包所在的文件夹。
4、项目的目录结构最好按照规范来组织。
5、编译后生成一个有默认名的可执行文件,在$GOPATH目录下,可以指定名字和目录,
比如:放在bin目录下:
//main.go路径 /Users/matsu/Documents/workspace/workspace_go/src/demofunc01/main
matsu workspace_go
$ go build -o bin/my.exe demofunc01/main