基础入门第一个Go语言程序!
基础入门第一个Go语言程序!
月伴飞鱼Go语言优势
语法简洁,相比其他语言更容易上手,开发效率更高。
自带垃圾回收(
GC
),不用再手动申请释放内存,能够有效避免Bug
,提高性能。语言层面的并发支持,让你很容易开发出高性能的程序。
提供的标准库强大,第三方库也足够丰富,可以拿来即用,提高开发效率。
可通过静态编译直接生成一个可执行文件,运行时不依赖其他库,部署方便,可伸缩能力强。
提供跨平台支持,很容易编译出跨各个系统平台直接运行的程序。
Java
虽然具备垃圾回收功能,但它是解释型语言:
需要安装
JVM
虚拟机才能运行。
C
语言虽然不用解释,可以直接编译运行,但是它不具备垃圾回收功能。
- 需要开发者自己管理内存的申请和释放,容易出问题。
而
Go
语言具备了两者的优势。
微服务和云原生已经成为一种趋势,而 Go 作为一款高性能的编译型语言。
最适合承载落地微服务的实现。
又容易生成跨平台的可执行文件,相比其他编程语言更容易部署在
Docker
容器中,实现灵活的自动伸缩服务。
第一个Go语言程序
1 | package main |
1 | $ go run ch01/main.go |
代码中的
go
是一个Go
语言开发工具包提供的命令
它和平时常用的
ls
命令一样都是可执行的命令它可以帮助运行
Go
语言代码,并进行编译,生成可执行的二进制文件等run 在这里是
go
命令的子命令,表示要运行 Go 语言代码的意思
第一行的 package main
代表当前的
ch01/main.go
文件属于哪个包
- 其中 package 是 Go 语言声明包的关键字,main 是要声明的包名
在 Go 语言中
main
包是一个特殊的包
- 代表你的 Go 语言项目是一个可运行的应用程序,而不是一个被其他项目引用的库
第二行的 import fmt
是导入一个 fmt 包,其中 import 是 Go 语言的关键字,表示导入包的意思
- 这里导入的是
fmt
包,导入的目的是要使用它
第三行的 func main()
是定义了一个函数,其中 func 是 Go 语言的关键字,表示要定义一个函数或者方法的意思
main
是函数名,() 空括号表示这个 main 函数不接受任何参数在 Go 语言中 main 函数是一个特殊的函数,它代表整个程序的入口
- 也就是程序在运行的时候,会先调用
main
函数然后通过 main 函数再调用其他函数,达到实现项目业务需求的目的
第四行的 fmt.Println(“Hello, 世界”)
是通过 fmt 包的 Println 函数打印 Hello, 世界 这段文本
- 其中
fmt
是刚刚导入的包,要想使用一个包,必须先导入Println 函数是属于包 fmt 的函数,这里我需要它打印输出一段文本,也就是
Hello, 世界
第五行的大括号 }
表示 main 函数体的结束。
语言环境搭建
先下载 Go 语言开发包
可以从官网 https://golang.org/dl/ 和 https://golang.google.cn/dl/ 下载
- 第一个链接是国外的官网,第二个是国内的官网,如果第一个访问不了,可以从第二个下载
安装测试
可以打开终端或者命令提示符,输入
go version
来验证 Go 语言开发工具包是否安装成功
- 如果成功的话,会打印出
Go
语言的版本和系统信息
环境变量设置
GOPATH:
- 代表 Go 语言项目的工作目录,在
Go Module
模式之前非常重要
- 现在基本上用来存放使用
go get
命令获取的项目GOBIN:
- 代表 Go 编译生成的程序的安装目录
- 比如通过
go install
命令
- 会把生成的 Go 程序安装到 GOBIN 目录下,以供你在终端使用
假设工作目录为 /Users/flysnow/go
你需要把 GOPATH 环境变量设置为
/Users/flysnow/go
- 把 GOBIN 环境变量设置为
$GOPATH/bin
项目结构
采用
Go Module
的方式,可以在任何位置创建你的 Go 语言项目。
假设你的项目位置是 /Users/flysnow/git/gotour
打开终端,输入如下命令切换到该目录下:
1 | cd /Users/flysnow/git/gotour |
然后再执行如下命令创建一个
Go Module
项目:
1 | go mod init |
执行成功后,会生成一个
go.mod
文件。然后在当前目录下创建一个
main.go
文件,这样整个项目目录结构是:
1 | gotour |
其中
main.go
是整个项目的入口文件,里面有main
函数。lib 目录是项目的子模块,根据项目需求可以新建很多个目录作为子模块
- 也可以继续嵌套为子模块的子模块。
编译发布
可以编译生成可执行文件
- 也可以把它发布到
$GOBIN
目录,以供在终端使用。在项目根目录输入以下命令,即可编译一个可执行文件。
1 | go build ./ch01/main.go |
回车执行后会在当前目录生成
main
可执行文件。
1 | ./main |
如果成功打印出
Hello, 世界
,证明程序成功生成。以上生成的可执行文件在当前目录
- 也可以把它安装到
$GOBIN
目录或者任意位置,如下所示:
1 | go install ./ch01/main.go |
使用
go install
命令即可,现在你在任意时刻打开终端
- 输入 main 回车,都会打印出
Hello, 世界
。
跨平台编译
Go 语言通过两个环境变量来控制跨平台编译,它们分别是
GOOS
和GOARCH
。
GOOS:代表要编译的目标操作系统
- 常见的有 Linux、Windows、Darwin 等。
GOARCH:代表要编译的目标处理器架构
- 常见的有 386、AMD64、ARM64 等。
这样通过组合不同的 GOOS 和 GOARCH
- 就可以编译出不同的可执行程序。
比如操作系统是 macOS AMD64 的,想编译出 Linux AMD64 的可执行程序
- 只需要执行
go build
命令即可,如以下代码所示:
1 | GOOS=linux GOARCH=amd64 go build ./ch01/main.go |
编辑器推荐
第一款是 Visual Studio Code + Go 扩展插件
- 通过官方网站 https://code.visualstudio.com/ 下载使用。
第二款是老牌 IDE 公司 JetBrains 推出的 Goland,所有插件已经全部集成
- 更容易上手,并且功能强大,新手老手都适合
- 可以通过官方网站 https://www.jetbrains.com/go/ 下载使用。