一、项目
Go
项目须放在 $GOPATH/src/项目
下,其大致结构如下:
F:\GoPath
├── bin
├── pkg
└── src└── hello // 项目1| └── hello.go // 项目中文件└── test // 项目2└── test.go
1.11
版本后引入 Module
包管理机制,项目文件就可以放在任意目录,也解决了包依赖管理等问题。
二、Go 文件
go
文件已 .go
结尾,命名以小写字母组成,也可以是下划线连接,下面是示例:
hello.go
test_hello.go
代码结构
package main import "fmt" func main() {fmt.Println("Hello World!")
}
package main
:每个Go
文件都需要定义package 包名称
,表示当前文件所属的包import fmt
:导入一个模块,fmt.Println
打印输出func main()
程序入口函数,因为定义了package main
三、运行
三种方式运行:
go build
:编译为二进制(可执行文件),再运行go run
:等价于go build
,再执行可执行文件,相当于二者合一go install
:编译并将编译文件放在$GOPATH/src/
和$GOPATH/pkg/
目录
go build
// 切换到项目目录,目前只有在一个 hello.go 文件
F:\GoPath\src\hello>dir
hello.go// 编译
F:\GoPath\src\hello>go build// 编译后生成一个 hello.exe 文件,unix 是 hello 可执行文件 ./hello 执行即可
F:\GoPath\src\hello>dir
hello.go hello.exe// 执行
F:\GoPath\src\hello>hello.exe
Hello World!
其他可选参数:
go build -n // 编译时会显示编译信息
go build -o 名称 // 指定可执行文件名称
go run
可直接运行 go
文件,生成的可执行文件保存在系统临时目录中,可使用:go run -work main.go
查看:
go run hello.goF:\GoPath\src\hello>go run -work hello.go
WORK=C:\Users\hj\AppData\Local\Temp\go-build149010642
Hello World!
go install
编译并将编译文件放在 $GOPATH/src/
和 $GOPATH/pkg/
目录
// 切换到项目目录
go install// 查看可执行文件
F:\GoPath\bin>dir
hello.exe
注意:若项目没
main
包(只是一个类库),则go install
生成的包文件会放在$GOPATH/pkg
目录;有main
包则可执行文件生成在$GOPATH/bin
目录中
包文件
包文件可以当做一个类库给其他程序使用。
1、创建一个项目 utils
用于生成包文件(类库):
$GOPATH/src/
└── utils└── page.go
package utils
/*
实现一个数字相加的功能,接收两个整数,函数内部把两个值相加并返回
*/
func Add(n1 int, n2 int) int {return n1 + n2
}
go install
生成包文件:
cd utils
go install
命令执行成功,会在 $GOPATH/pkg/linux_amd64
生成一个 utils.a
的包文件。
2、创建一个新项目 crm
,内部调用 utils.a
包文件:
$GOPATH/src/
└── crm└── main.go
package main
import ("fmt""utils" // 导入utils包
)
func main() {// 调用utils包中定义的Add函数result := utils.Add(1, 2)fmt.Println(result)
}
接下来编译 crm
项目,但不能使用 build、install
,否则会直接调用 utils
项目而不是调用 utils.a
包文件,故而需要手动编译:
// 切换到 crm 项目中
cd /src/crm// 编译main.go
// -I 选项指定了包的安装路径,供main.go导入使用, 编译完成生成 main.o 文件
go tool compile -I $GOPATH/pkg/darwin_amd64 main.go// 链接main.o
// -L 选项指定了包的安装路径,链接完成之后生成 main 文件(也可以是 main.exe 等其他文件名)
go tool link -o main -L $GOPATH/pkg/darwin_amd64 main.o// 编译完毕后,会在当前目录生成一个 main 的可执行文件和 main.o 包文件
[root@localhost crm]# ls
main main.go main.o// 执行
[root@localhost crm]# ./main
13
四、输出
go
输出分为两种:
- 内置函数提供:
Print、Pringln
函数,不推荐使用,官方不保证后续会保留次功能,可能会被移除,用于标准错误输出而非标准输出 fmt
标准库(推荐)
内置函数
print
:输出println
:输出并在最后位置添加换行符
package main//import "fmt"func main() {print("输出")println("输出1") // 进行了换行操作println("输出2")
}
输出:
[root@localhost test]# go run test.go
输出输出1
输出2
fmt 标准库
fmt
标准库是官方推荐的输出方式,总共有三种使用方式:
fmt.Print
:输出fmt.Println
:输出并在末尾添加换行符fmt.Printf
:格式化输出,第一个参数为占位符的字符串,后面参数用于格式化字符串
package mainimport "fmt"func main() {fmt.Print("输出")fmt. Println("输出2")fmt.Println("输出3")fmt.Printf("我的名字叫:%s,今年:%d,我的英文成绩为:%.2f", "rose", 18, 93.20123)
}
输出:
[root@localhost test]# go run test.go
输出输出2
输出3
我的名字叫:rose,今年:18,我的英文成绩为:93.20
格式化符号
%b 表示为二进制
%c 该值对应的unicode码值
%d 表示为十进制,格式化整型
%o 表示为八进制
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于"U+%04X"
%E 用科学计数法表示
%f 用浮点数表示,十进制小数
%s 格式化字符串
%.2f 保留小数点后两位(四舍五入)
其他格式化占位符,可查看:Go 编译器安装目录/src/fmt/doc.go
查看。
五、注释
- 单行注释:
//
- 多行注释:
/* */