运行

  • go run main.go

    编译

  • go build main.go

  • go build -o main1.exe main.go
  • go install utlis 生成静态库文件.a(utlis是一个文件夹) ``` 编译为linux可执行程序 set GOARCH=amd64 set GOOS=linux go build

赋予权限:chmod 777 xx 执行:./xx

在mac 或 linux 交叉编译 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build gofile.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build gofile.go

  1. <a name="m1PVT"></a>
  2. #### 编译参数
  3. ```go
  4. 以下 build 参数可用在 build, clean, get, install, list, run, test
  5. -a
  6. 完全编译,不理会-i产生的.a文件(文件会比不带-a的编译出来要大?)
  7. -n
  8. 仅打印输出build需要的命令,不执行build动作(少用)。
  9. -p n
  10. 开多少核cpu来并行编译,默认为本机CPU核数(少用)。
  11. -race
  12. 同时检测数据竞争状态,只支持 linux/amd64, freebsd/amd64, darwin/amd64 和 windows/amd64.
  13. -msan
  14. 启用与内存消毒器的互操作。仅支持linux / amd64,并且只用Clang / LLVM作为主机C编译器(少用)。
  15. -v
  16. 打印出被编译的包名(少用).
  17. -work
  18. 打印临时工作目录的名称,并在退出时不删除它(少用)。
  19. -x
  20. 同时打印输出执行的命令名(-n)(少用).
  21. -asmflags 'flag list'
  22. 传递每个go工具asm调用的参数(少用)
  23. -buildmode mode
  24. 编译模式(少用)
  25. 'go help buildmode'
  26. -compiler name
  27. 使用的编译器 == runtime.Compiler
  28. (gccgo or gc)(少用).
  29. -gccgoflags 'arg list'
  30. gccgo 编译/链接器参数(少用)
  31. -gcflags 'arg list'
  32. 垃圾回收参数(少用).
  33. -installsuffix suffix
  34. a suffix to use in the name of the package installation directory,
  35. in order to keep output separate from default builds.
  36. If using the -race flag, the install suffix is automatically set to race
  37. or, if set explicitly, has _race appended to it. Likewise for the -msan
  38. flag. Using a -buildmode option that requires non-default compile flags
  39. has a similar effect.
  40. -ldflags 'flag list'
  41. '-s -w': 压缩编译后的体积
  42. -s: 去掉符号表
  43. -w: 去掉调试信息,不能gdb调试了
  44. -linkshared
  45. 链接到以前使用创建的共享库
  46. -buildmode=shared.
  47. -pkgdir dir
  48. 从指定位置,而不是通常的位置安装和加载所有软件包。例如,当使用非标准配置构建时,使用-pkgdir将生成的包保留在单独的位置。
  49. -tags 'tag list'
  50. 构建出带tag的版本.
  51. -toolexec 'cmd args'
  52. a program to use to invoke toolchain programs like vet and asm.
  53. For example, instead of running asm, the go command will run

dockerfile例子

  1. FROM golang
  2. ENV TIME_ZONE=Asia/Shanghai
  3. RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
  4. ENV GO111MODULE=on
  5. ENV GOPROXY="https://goproxy.io,direct"
  6. WORKDIR /go/release
  7. COPY . .
  8. RUN go mod tidy
  9. RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app main.go
  10. EXPOSE 8080
  11. ENTRYPOINT ["./micro-api"]

第三方包的安装

自动

  • go get xxx
  • go get -u 更新
  • 保证gopath配置好,并安装了git
  • 实际上go get就是git clone + go install的组合

这条命令会把远端的第三方包下载并解压到你的GOPATH路径下的src文件夹里面去,并执行go install xxx命令来安装该包,如果下载的包根目录中有main包,则打包成一个二进制文件放在GOPATH路径的pkg下,没有main包则打包成xxx.a文件,同样放在gopath/pkg下。注意GOPATH如果配置了多个,按顺序,都放在第一个GOPATH目录下

手动

先下载该包,并按照该包官方的下载路径(go get github.com/xx) 为该包创建对应的gopath/src下里面的路径
将包移入到该路径,执行go install命令安装这个文件

算术运算符

image.png

关系运算符

image.png

逻辑运算符

假定 A 值为 True,B 值为 False。
image.png

位运算符

假定 A 为60,B 为13:
image.png

赋值运算符

image.png

其他运算符

image.png

运算符优先级

分类 描述 关联性
后缀 ()[]->.++ — 左到右
一元 + -!~++ —(type)*&sizeof 右到左
乘法 */ % 左到右
加法 + - 左到右
移位 <<>> 左到右
关系 <<=>>= 左到右
相等 ==!= 左到右
按位AND & 左到右
按位XOR ^ 左到右
按位OR | 左到右
逻辑AND && 左到右
逻辑OR || 左到右
条件 ?: 右到左
分配 =+=-=*=/= %=>>= <<= &= ^= |= 右到左
逗号 , 左到右

定义变量

  • var i int64 = 1 显示类型
  • var i = 1 隐示类型
  • i := 1 省略var,注意全局变量不能这么定义

    定义常量

  • const b string = “abc” 显示类型

  • const b = “abc” 隐示类型
    1. const(
    2. A=iota
    3. B
    4. C
    5. D
    6. )
    7. //iota以行递增
    8. const(
    9. A1=iota
    10. B1
    11. C1,D1=iota,iota
    12. )
    13. func main() {
    14. //n:=1
    15. //const a = n/2 错误
    16. fmt.Println(A,B,C,D)//0 1 2 3
    17. fmt.Println(A1,B1,C1,D1)//0 1 2 2
    18. }

跳过单次循环:

  • continue
  • continue label

    结束循环:

  • break

  • break label

    跳转

  • goto lable

    定义函数:

  • func

    遍历与流程控制

  • for

    1. //快速打印a-z
    2. func main() {
    3. for i:=0;i<26;i++{
    4. fmt.Printf("%c",'a'+byte(i))
    5. }
    6. }
    7. //第一种
    8. for i:=1;i<10;i++{
    9. fmt.Println("11111111")
    10. }
    11. //第二种
    12. i:=?;
    13. for i<10;i++{
    14. fmt.Println("11111111")
    15. }
    16. //第三种
    17. for i:=?;i<10;{
    18. fmt.Println("11111111")
    19. }
    20. //第四种
    21. i:=?;
    22. for i<10{
    23. fmt.Println("11111111")
    24. }
    25. //第五种
    26. for {
    27. fmt.Println("11111111")
    28. }
  • if

    1. //第一种
    2. i:=?
    3. if i<=2{
    4. fmt.Println("---------------")i:=?
    5. }
    6. //第二种
    7. if i:=?;i<=2{
    8. fmt.Println("---------------")i:=?
    9. }

switch

  1. func main() {
  2. switch 1 {
  3. case 1:
  4. fmt.Println("case 1")
  5. fallthrough
  6. case 2:
  7. fmt.Println("case 2")
  8. fallthrough
  9. case 3:
  10. fmt.Println("case 3")
  11. case 4:
  12. fmt.Println("case 4")
  13. fallthrough
  14. default:
  15. fmt.Println("default case")
  16. }
  17. }
  18. // output
  19. case 1
  20. case 2
  21. case 3
  22. func main() {
  23. switch 1 {
  24. case 1:
  25. fmt.Println("case 1")
  26. fallthrough
  27. case 2:
  28. fmt.Println("case 2")
  29. fallthrough
  30. case 3:
  31. fmt.Println("case 3")
  32. fallthrough
  33. case 4:
  34. fmt.Println("case 4")
  35. fallthrough
  36. default:
  37. fmt.Println("default case")
  38. }
  39. }
  40. // output
  41. case 1
  42. case 2
  43. case 3
  44. case 4
  45. default case