环境安装
go
// macos
brew install go
mise install go
// 测试是否安装成功
go --help邂逅 Golang
创建文件: main.go 并输入以下代码
go
package main // 声明当前文件所属的包
import "fmt" // 导入一个 fmt 的标准库依赖
func main() {
// 控制台输出 "Hello World"
fmt.Println("Hello World")
}运行: go run main.go
编译 & 运行
在介绍中不是说 go 是编译型语言吗? 那为什么和脚本语言一样不用编译, 直接就
go run执行了?
其实 go run 命令只是为了方便开发者调试的一个 语法糖 命令
真正的运行步骤应该是这样的:
- 编译 -> 生成可执行文件(windows:
main.exe, mac/linux:main) - 找到可执行文件 -> 执行
sh
# 编译
go build ./main.go
# 执行
./main注释
go
package main
func main() {
// 我是单行注释
/*
我是多行注释
*/
}代码风格
与其他编程语言不同, Go 语言强制统一编码风格, 否则无法通过编译
缩进问题
与 python 那种非主流语法不同, go 的语法是 C-Like 的, 所以缩进并不重要, 但是有一点值得注意
[注意]
函数的 { 必须和 () 在同一行
go
package main
import "fmt"
func main()
{
fmt.Println("Hello World")
}
// 很多写 C/cpp/PHP 的程序员都喜欢将 {} 单独一行
// 但是这在 go 语言中是行不通的
// 执行 go build main.go
// 报错信息如下:
// # command-line-arguments
// ./main.go:6:1: syntax error: unexpected semicolon or newline before {go
package main
import "fmt"
func main() {
// 这3个语句都是可以执行的, 虽然都可以执行, 但是不推荐这样
// 要么老老实实按照语法手动来缩进, 要就直接使用IDE软件格式化插件
// 要么使用 Go 语言自带的命令来完成缩进: gofmt -w main.go
fmt.Println("Hello World")
fmt.Println("Hello World")
fmt.Println("Hello World")
}分号问题
go
package main
import "fmt"
func main() {
// 默认情况下: 会自动在识别换行, 不需要手动加 ;
fmt.Println("Hello World")
// 但是如果两个写在一行就无法识别, 需要手动写 ;
// 虽然可以这样写, 但是不推荐, IDE格式化也会将他们变成两行
fmt.Println("Hello World"); fmt.Println("Hello World")
}缺少 main 函数
在脚本语言中, 可以直接写然后执行, 但是在 go 语言中不行, 必须加上 main 函数
go
package main
// func main() {
// }
//
// 执行: go build main.go
// 编译错误信息如下:
// # command-line-arguments
// runtime.main_main·f: function main is undeclared in the main package多余代码
go
package main
import "fmt" // 导入了 fmt 但是并没有使用到它
func main() {
}
// 执行: go build main.go
// 编译错误信息如下:
// # command-line-arguments
// ./main.go:3:8: "fmt" imported and not usedgo
package main
import "fmt"
func main() {
fmt.Println("Hello World")
// 声明了变量 num 但是并没有使用到它
num := 10
}
// 执行: go build main.go
// 编译错误信息如下:
// # command-line-arguments
// ./main.go:8:6: declared and not used: num关键字
截至目前(Go 1.25), Go 中共有 25 个关键字
- const、func、import、package、type、var: 用来声明各种代码元素
- chan、interface、map、struct: 用做一些组合类型的字面表示中
- break、case、continue、default、 else、fallthrough、for、 goto、if、range、 return、select、switch: 用在流程控制语句中
- defer、go: 也可以看作是流程控制关键字, 详见协程和延迟函数调用