Go语言开发环境
官方下载
安装完成后会在安装目录下生成如下内容
Go语言开发的安装目录说明
目录名 | 解释 |
---|---|
api | 每个版本的API变更差异 |
bin | go源码包编译出的编译器(go)、文档工具(godoc)、格式化工具(gofmt) |
doc | go文档 |
lib | 引用的一些库文件 |
misc | 杂项用途的文件,例如Android平台的编译、git的提交钩子等 |
pkg | Windows平台编译好的中间文件 |
src | 标准库源码 |
test | 测试用例 |
环境配置
设置GOROOT
GOROOT是Go语言的安装路径
设置GOPATH
GOPATH是Go语言编译时参考的工作路径,类似于Java仲的Workspace的概念,选择一个空目录作为GOPATH即可
HelloWorld
新建Directory,在Directory下新建main.go文件,在文件中写入如下代码
package mainimport "fmt"func main() { fmt.Println("Hello World")}
右键 Run 'go build main.go'
也可以在命令行使用命令执行
为什么要GO
- 比Java代码简洁、开发效率更高、性能更好
- 比Python性能高很多,尤其并发处理优势
- Go语言不会取代Java,也不会取代Python,但更多和服务器打交道的开发会选择GO语言,Docker、Kubernetes就是Go语言开发的
GO语言的执行过程
Go语言是编译型语言,当我们直接执行run命令执行代码的时候,实际上是先编译成二进制机器指令,然后连接相关资源运行,最终输出结果,也可以把编译和执行分成两步,先使用go build指令进行编译,然后找到生成的二进制程序,直接执行
PS D:\Programs\Go\GolandProjects\book\Training> go build .\main.goPS D:\Programs\Go\GolandProjects\book\Training> .\main.exeHello WorldPS D:\Programs\Go\GolandProjects\book\Training>
另外Go语言是原生支持Unicode的,所以更方便处理汉字及其他各种语言文字
package mainimport "fmt"func main() { fmt.Println("我醉欲眠卿且去")}
PS D:\Programs\Go\GolandProjects\book\Training> go build .\main.goPS D:\Programs\Go\GolandProjects\book\Training> .\main.exe我醉欲眠卿且去PS D:\Programs\Go\GolandProjects\book\Training>
使用Import导入的包必须在本程序中用到,如果导入了却没有用到,则编译无法通过,同样声明变量也必须用到,否则也无法通过编译,这是Go的优良特性之一
交叉编译
Mac 下编译, Linux 或者 Windows 下去执行
# linux 下去执行CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go# Windows 下去执行CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Linux 下编译 , Mac 或者 Windows 下去执行
# Mac 下去执行CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go# Windows 下执行CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Windows 下编译 , Mac 或 Linux 下去执行
需要写一个批处理程序,在里面去设置,因为windows 下的 terminal 不支持shell , 这跟 Mac 和 Linux下的有点不同
# Mac 下执行SET CGO_ENABLED=0SET GOOS=darwinSET GOARCH=amd64go build main.go
# Linux 去执行SET CGO_ENABLED=0SET GOOS=linuxSET GOARCH=amd64go build main.go
语句解析
Go语言实际上是可以用分号的,可以把多行代码写在一行,但并不建议如此,那么既然Go语言没有分号,又如何做语句解析的?在这一点上有些类似于Python,但又不同于Python,Go在编译的时候会把换行符解析为分号,因此在写Go代码的时候需要注意换行,即不要把函数的大括号单独作为一行,那样编译是无法通过的,此外还要注意Go语言的代码格式,不过IDE会自动检查纠正