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 main
import "fmt"
var (
s1 string = "123"
i1 int = 1111
b1 bool = true
)
func foo()(string,int) {
return "name",18
}
func main() {
s2 := "456"
fmt.Println(s2)
var testInteger = 6666
fmt.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)
}