运行
-
编译
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 suffix
a 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 race
or, if set explicitly, has _race appended to it. Likewise for the -msan
flag. Using a -buildmode option that requires non-default compile flags
has 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 golang
ENV TIME_ZONE=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone
ENV GO111MODULE=on
ENV GOPROXY="https://goproxy.io,direct"
WORKDIR /go/release
COPY . .
RUN go mod tidy
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app main.go
EXPOSE 8080
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
命令安装这个文件
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符
运算符优先级
分类 | 描述 | 关联性 |
---|---|---|
后缀 | ()[]->.++ — | 左到右 |
一元 | + -!~++ —(type)*&sizeof | 右到左 |
乘法 | */ % | 左到右 |
加法 | + - | 左到右 |
移位 | <<>> | 左到右 |
关系 | <<=>>= | 左到右 |
相等 | ==!= | 左到右 |
按位AND | & | 左到右 |
按位XOR | ^ | 左到右 |
按位OR | | | 左到右 |
逻辑AND | && | 左到右 |
逻辑OR | || | 左到右 |
条件 | ?: | 右到左 |
分配 | =+=-=*=/= %=>>= <<= &= ^= |= | 右到左 |
逗号 | , | 左到右 |
定义变量
- var i int64 = 1 显示类型
- var i = 1 隐示类型
-
定义常量
const b string = “abc” 显示类型
- const b = “abc” 隐示类型
const(
A=iota
B
C
D
)
//iota以行递增
const(
A1=iota
B1
C1,D1=iota,iota
)
func main() {
//n:=1
//const a = n/2 错误
fmt.Println(A,B,C,D)//0 1 2 3
fmt.Println(A1,B1,C1,D1)//0 1 2 2
}
跳过单次循环:
- continue
-
结束循环:
break
-
跳转
-
定义函数:
-
遍历与流程控制
for
//快速打印a-z
func 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")
fallthrough
case 2:
fmt.Println("case 2")
fallthrough
case 3:
fmt.Println("case 3")
case 4:
fmt.Println("case 4")
fallthrough
default:
fmt.Println("default case")
}
}
// output
case 1
case 2
case 3
func main() {
switch 1 {
case 1:
fmt.Println("case 1")
fallthrough
case 2:
fmt.Println("case 2")
fallthrough
case 3:
fmt.Println("case 3")
fallthrough
case 4:
fmt.Println("case 4")
fallthrough
default:
fmt.Println("default case")
}
}
// output
case 1
case 2
case 3
case 4
default case