运行
-
编译
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
<a name="m1PVT"></a>#### 编译参数```go以下 build 参数可用在 build, clean, get, install, list, run, test-a完全编译,不理会-i产生的.a文件(文件会比不带-a的编译出来要大?)-n仅打印输出build需要的命令,不执行build动作(少用)。-p n开多少核cpu来并行编译,默认为本机CPU核数(少用)。-race同时检测数据竞争状态,只支持 linux/amd64, freebsd/amd64, darwin/amd64 和 windows/amd64.-msan启用与内存消毒器的互操作。仅支持linux / amd64,并且只用Clang / LLVM作为主机C编译器(少用)。-v打印出被编译的包名(少用).-work打印临时工作目录的名称,并在退出时不删除它(少用)。-x同时打印输出执行的命令名(-n)(少用).-asmflags 'flag list'传递每个go工具asm调用的参数(少用)-buildmode mode编译模式(少用)'go help buildmode'-compiler name使用的编译器 == runtime.Compiler(gccgo or gc)(少用).-gccgoflags 'arg list'gccgo 编译/链接器参数(少用)-gcflags 'arg list'垃圾回收参数(少用).-installsuffix suffixa suffix to use in the name of the package installation directory,in order to keep output separate from default builds.If using the -race flag, the install suffix is automatically set to raceor, if set explicitly, has _race appended to it. Likewise for the -msanflag. Using a -buildmode option that requires non-default compile flagshas a similar effect.-ldflags 'flag list''-s -w': 压缩编译后的体积-s: 去掉符号表-w: 去掉调试信息,不能gdb调试了-linkshared链接到以前使用创建的共享库-buildmode=shared.-pkgdir dir从指定位置,而不是通常的位置安装和加载所有软件包。例如,当使用非标准配置构建时,使用-pkgdir将生成的包保留在单独的位置。-tags 'tag list'构建出带tag的版本.-toolexec 'cmd args'a program to use to invoke toolchain programs like vet and asm.For example, instead of running asm, the go command will run
dockerfile例子
FROM golangENV TIME_ZONE=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezoneENV GO111MODULE=onENV GOPROXY="https://goproxy.io,direct"WORKDIR /go/releaseCOPY . .RUN go mod tidyRUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app main.goEXPOSE 8080ENTRYPOINT ["./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命令安装这个文件
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符
运算符优先级
| 分类 | 描述 | 关联性 |
|---|---|---|
| 后缀 | ()[]->.++ — | 左到右 |
| 一元 | + -!~++ —(type)*&sizeof | 右到左 |
| 乘法 | */ % | 左到右 |
| 加法 | + - | 左到右 |
| 移位 | <<>> | 左到右 |
| 关系 | <<=>>= | 左到右 |
| 相等 | ==!= | 左到右 |
| 按位AND | & | 左到右 |
| 按位XOR | ^ | 左到右 |
| 按位OR | | | 左到右 |
| 逻辑AND | && | 左到右 |
| 逻辑OR | || | 左到右 |
| 条件 | ?: | 右到左 |
| 分配 | =+=-=*=/= %=>>= <<= &= ^= |= | 右到左 |
| 逗号 | , | 左到右 |
定义变量
- var i int64 = 1 显示类型
- var i = 1 隐示类型
-
定义常量
const b string = “abc” 显示类型
- const b = “abc” 隐示类型
const(A=iotaBCD)//iota以行递增const(A1=iotaB1C1,D1=iota,iota)func main() {//n:=1//const a = n/2 错误fmt.Println(A,B,C,D)//0 1 2 3fmt.Println(A1,B1,C1,D1)//0 1 2 2}
跳过单次循环:
- continue
-
结束循环:
break
-
跳转
-
定义函数:
-
遍历与流程控制
for
//快速打印a-zfunc main() {for i:=0;i<26;i++{fmt.Printf("%c",'a'+byte(i))}}//第一种for i:=1;i<10;i++{fmt.Println("11111111")}//第二种i:=?;for i<10;i++{fmt.Println("11111111")}//第三种for i:=?;i<10;{fmt.Println("11111111")}//第四种i:=?;for i<10{fmt.Println("11111111")}//第五种for {fmt.Println("11111111")}
if
//第一种i:=?if i<=2{fmt.Println("---------------")i:=?}//第二种if i:=?;i<=2{fmt.Println("---------------")i:=?}
switch
func main() {switch 1 {case 1:fmt.Println("case 1")fallthroughcase 2:fmt.Println("case 2")fallthroughcase 3:fmt.Println("case 3")case 4:fmt.Println("case 4")fallthroughdefault:fmt.Println("default case")}}// outputcase 1case 2case 3func main() {switch 1 {case 1:fmt.Println("case 1")fallthroughcase 2:fmt.Println("case 2")fallthroughcase 3:fmt.Println("case 3")fallthroughcase 4:fmt.Println("case 4")fallthroughdefault:fmt.Println("default case")}}// outputcase 1case 2case 3case 4default case
