命令是go tool vet
命令的简单封装。
go tool pprof
go tool pprof
命令来交互式的访问概要文件的内容。
go tool cgo
可以使我们创建能够调用C语言代码的Go语言源码文件。
go env
go env
用于打印Go语言的环境信息。
名称 |
说明 |
CGO_ENABLED |
指明cgo工具是否可用的标识。 |
GOARCH |
程序构建环境的目标计算架构。 |
GOBIN |
存放可执行文件的目录的绝对路径。 |
GOCHAR |
程序构建环境的目标计算架构的单字符标识。 |
GOEXE |
可执行文件的后缀。 |
GOHOSTARCH |
程序运行环境的目标计算架构。 |
GOOS |
程序构建环境的目标操作系统。 |
GOHOSTOS |
程序运行环境的目标操作系统。 |
GOPATH |
工作区目录的绝对路径。 |
GORACE |
用于数据竞争检测的相关选项。 |
GOROOT |
Go语言的安装目录的绝对路径。 |
GOTOOLDIR |
Go工具目录的绝对路径。 |
Hello World
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
程序基本语法
- 所有go源码以.go结尾;
- 注释不会被编译,单行注释是以 // 开头,多行注释以 /* 开头,以 */ 结尾;
- 标识符以字母或下划线开头,大小写敏感,_ 是特殊标识符,用来忽略结果;
- 保留关键字:
break |
default |
func |
interface |
select |
case |
defer |
go |
map |
struct |
chan |
else |
goto |
package |
switch |
const |
fallthrough |
if |
range |
type |
continue |
for |
import |
return |
var |
append |
bool |
byte |
cap |
close |
complex |
complex64 |
complex128 |
uint16 |
copy |
false |
float32 |
float64 |
imag |
int |
int8 |
int16 |
uint32 |
int32 |
int64 |
iota |
len |
make |
new |
nil |
panic |
uint64 |
print |
println |
real |
recover |
string |
true |
uint |
uint8 |
uintptr |
程序基本结构
1. 任何一个代码文件隶属于一个包
2. golang可执行程序,package main,并且有且只有一个main入口函数
3. 包中函数调用:
- 同一个包中函数,直接调用
- 不同包中函数,通过包名+点+函数名进行调用
4. 包访问控制规则:
- 大写意味着这个函数/变量是可导出的
- 小写意味着这个函数/变量是私有的,包外部不能访问
项目目录
$ tree project
project
├── bin
│ ├── example1
│ └── goroute_example
├── pkg
├── src
│ └── go_dev
│ └── day1
│ ├── example1
│ │ ├── debug
│ │ └── hello.go
│ └── goroute_example
│ ├── goroute
│ │ └── add.go
│ └── main
│ └── main.go
└── vender
Src 源码文件
Bin 编译后二进制文件
vender 第三方
pkg 静态文件
简单栗子
$ tree project
project
├── bin
│ └── goroute_example
├── pkg
├── src
│ └── go_dev
│ └── test1
│ └── goroute_example
│ ├── goroute
│ │ └── add.go
│ └── main
│ └── main.go
└── vender
[main.go]
package main
import (
"fmt"
"go_dev/test1/goroute_example/goroute"
)
func main() {
pipe := make(chan int, 1)
go goroute.Add(pipe, 10, 20)
sum := <-pipe
fmt.Println(sum)
}
[add.go]
package goroute
func Add(pipe chan int, a int, b int) {
pipe <- (a + b)
}
$ go build -o bin/goroute_example go_dev/test1/goroute_example/main
$ bin/goroute_example
30
$