Golang(1)
Go命令
- Go build
编译*.go文件,生成二进制文件 - Go Run
直接运行go文件 - Go Install
编译go文件,并将可执行文件复制至$GOPATH/bin目录
交叉编译
GoLang支持交叉编译,在一个平台上生成另一个平台的可执行程序
相关命令参数:
- CGO_ENABLED=0。表示设置CGO工具不可用,使用go自己的编译器
- GOOS:目标操作系统:windows、linux
- GOARCH:表示程序构建环境的目标架构:386、amd64
- go tool dist list:查询当前交叉编译支持的版本
完整命令:
//以下操作,都交叉编译不支持 CGO 所以要禁用它//windows下使用go编译器编译64位linux可执行程序SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build -o ./bin/main main.go//windows下使用go编译器编译32位linux可执行程序SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=386 go build -o ./bin/main main.go//windows下使用go编译器编译64位windows可执行程序SET CGO_ENABLED=0 SET GOOS=windows SET GOARCH=amd64 go build -o ./bin/main main.go//windows下使用go编译器编译32位windows可执行程序SET CGO_ENABLED=0 SET GOOS=windows SET GOARCH=386 go build ./bin/main main.go
变量
package mainimport "fmt"var (s1 string = "123"i1 int = 1111b1 bool = true)func foo()(string,int) {return "name",18}func main() {s2 := "456"fmt.Println(s2)var testInteger = 6666fmt.Println(testInteger)fmt.Printf("%s,%d,%t",s1,i1,b1)var x,_ = foo();_,y := foo();fmt.Printf("\n%s,%d",x,y)}
注意:
- 函数外声明变量需要用var、const、func
- 函数外声明不能用
:= _用于占位,表示忽略这个值,系统不会为该值分配内存
常量计数器iota
package main
import "fmt"
const (
n1 = iota
_ = iota
n3 = iota
)
const (
a1 = iota
_
a2
)
func main() {
fmt.Println(n1)
fmt.Println(n3)
fmt.Println(a1)
fmt.Println(a2)
}
iota在常量中出现时,每新增一行常量,将使iota计数一次,使用iota能简化定义,常用于定义枚举
整型
| 类型 | 描述 |
|---|---|
| uint8 | 无符号 8位整型 (0 到 255) |
| uint16 | 无符号 16位整型 (0 到 65535) |
| uint32 | 无符号 32位整型 (0 到 4294967295) |
| uint64 | 无符号 64位整型 (0 到 18446744073709551615) |
| int8 | 有符号 8位整型 (-128 到 127) |
| int16 | 有符号 16位整型 (-32768 到 32767) |
| int32 | 有符号 32位整型 (-2147483648 到 2147483647) |
| int64 | 有符号 64位整型 (-9223372036854775808 到 9223372036854775807) |
特殊整型
| 类型 | 描述 |
|---|---|
| uint | 32位操作系统上就是uint32,64位操作系统上就是 uint64 |
| int | 32位操作系统上就是int32,64位操作系统上就是 int64 |
| uintptr | 无符号整型,用于存放一个指针 |
实际使用中,切片或 map 的元素数量等都可以用int来表示。在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int和 uint。
而且还允许我们用 _ 来分隔数字,比如说: v := 123_456 表示 v 的值等于 123456。
进制
package main
import "fmt"
func main() {
b1 := 0b10
fmt.Printf("%b \n",b1)
fmt.Printf("%d \n",b1)
o1 := 077
fmt.Printf("%o \n",o1)
x1 := 0xff
fmt.Printf("%x",x1)
}
