Skip to content

环境安装

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 命令只是为了方便开发者调试的一个 语法糖 命令

真正的运行步骤应该是这样的:

  1. 编译 -> 生成可执行文件(windows: main.exe, mac/linux: main)
  2. 找到可执行文件 -> 执行
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 used
go
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: 也可以看作是流程控制关键字, 详见协程和延迟函数调用

Released under the MIT License.