Golang(1)

Go命令

  1. Go build
    编译*.go文件,生成二进制文件
  2. Go Run
    直接运行go文件
  3. Go Install
    编译go文件,并将可执行文件复制至$GOPATH/bin目录

交叉编译

GoLang支持交叉编译,在一个平台上生成另一个平台的可执行程序

相关命令参数:

  1. CGO_ENABLED=0。表示设置CGO工具不可用,使用go自己的编译器
  2. GOOS:目标操作系统:windows、linux
  3. GOARCH:表示程序构建环境的目标架构:386、amd64
  4. go tool dist list:查询当前交叉编译支持的版本

完整命令:

  1. //以下操作,都交叉编译不支持 CGO 所以要禁用它
  2. //windows下使用go编译器编译64linux可执行程序
  3. SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build -o ./bin/main main.go
  4. //windows下使用go编译器编译32linux可执行程序
  5. SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=386 go build -o ./bin/main main.go
  6. //windows下使用go编译器编译64windows可执行程序
  7. SET CGO_ENABLED=0 SET GOOS=windows SET GOARCH=amd64 go build -o ./bin/main main.go
  8. //windows下使用go编译器编译32windows可执行程序
  9. SET CGO_ENABLED=0 SET GOOS=windows SET GOARCH=386 go build ./bin/main main.go

变量

  1. package main
  2. import "fmt"
  3. var (
  4. s1 string = "123"
  5. i1 int = 1111
  6. b1 bool = true
  7. )
  8. func foo()(string,int) {
  9. return "name",18
  10. }
  11. func main() {
  12. s2 := "456"
  13. fmt.Println(s2)
  14. var testInteger = 6666
  15. fmt.Println(testInteger)
  16. fmt.Printf("%s,%d,%t",s1,i1,b1)
  17. var x,_ = foo();
  18. _,y := foo();
  19. fmt.Printf("\n%s,%d",x,y)
  20. }

注意:

  1. 函数外声明变量需要用var、const、func
  2. 函数外声明不能用 :=
  3. _用于占位,表示忽略这个值,系统不会为该值分配内存

常量计数器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来表示。在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用intuint

而且还允许我们用 _ 来分隔数字,比如说: 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)
}