Go语法基础 #

一、注释 #

1.1 单行注释 #

使用//开头:

go
fmt.Println("Hello")  // 打印Hello
// 这是单行注释

1.2 多行注释 #

使用/* */包裹:

go
/*
这是多行注释
可以跨越多行
用于详细说明
*/
func main() {
    fmt.Println("Hello")
}

1.3 文档注释 #

写在函数/类型声明上方,用于生成文档:

go
func Add(a, b int) int {
    return a + b
}

查看文档:

bash
go doc Add

二、标识符 #

2.1 命名规则 #

标识符用于命名变量、函数、类型等,规则如下:

  • 由字母、数字、下划线组成
  • 必须以字母或下划线开头
  • 区分大小写
  • 不能使用关键字
go
userName    // 正确
_user       // 正确
User123     // 正确
2name       // 错误:以数字开头
my-var      // 错误:包含连字符

2.2 可见性规则 #

Go通过首字母大小写控制可见性:

  • 大写开头:公开(可导出),其他包可访问
  • 小写开头:私有,仅本包可访问
go
type Person struct {
    Name string    // 公开
    age  int       // 私有
}

func (p *Person) GetName() string {  // 公开方法
    return p.Name
}

func (p *Person) getAge() int {  // 私有方法
    return p.age
}

2.3 命名约定 #

类型 约定 示例
包名 小写,简短 fmt, http
变量/函数 驼峰命名 userName, getInfo
常量 驼峰命名 maxSize, DefaultValue
接口 单方法以er结尾 Reader, Writer
类型 驼峰命名 UserInfo, HttpRequest

2.4 空标识符 #

_是特殊标识符,用于忽略值:

go
_, b := 1, 2  // 忽略第一个返回值

for _, value := range []int{1, 2, 3} {
    fmt.Println(value)
}

三、关键字 #

Go只有25个关键字:

3.1 关键字列表 #

go
break    default     func   interface  select
case     defer       go     map        struct
chan     else        goto   package    switch
const    fallthrough if     range      type
continue for         import return     var

3.2 分类说明 #

分类 关键字
声明 var, const, type, func, package, import
程序结构 break, case, continue, default, else, fallthrough, for, goto, if, range, return, select, switch
并发 go, chan, select
类型 struct, interface, map
其他 defer, const

3.3 预声明标识符 #

Go还预声明了一些标识符:

内置类型:

go
bool byte complex64 complex128 error float32 float64
int int8 int16 int32 int64 rune string
uint uint8 uint16 uint32 uint64 uintptr

常量:

go
true false iota nil

内置函数:

go
append cap close complex copy delete imag len
make new panic print println real recover

四、运算符与分隔符 #

4.1 运算符 #

go
+    &     +=    &=     &&    ==    !=    (    )
-    |     -=    |=     ||    <     <=    [    ]
*    ^     *=    ^=     <-    >     >=    {    }
/    <<    /=    <<=    ++    =     :=    ,    ;
%    >>    %=    >>=    --    !     ...   .    :
     &^          &^=           ...

4.2 分隔符 #

go
()    小括号:函数调用、表达式分组
[]    中括号:数组/切片索引、类型参数
{}    大括号:代码块、复合字面量
,     逗号:参数分隔
;     分号:语句结束(通常省略)
:     冒号:标签、切片声明
.     点:成员访问、包限定

五、字面量 #

5.1 整数字面量 #

go
10          // 十进制
0755        // 八进制(0开头)
0x1F        // 十六进制(0x开头)
0b1010      // 二进制(0b开头,Go 1.13+)

1_000_000   // 数字分隔符(Go 1.13+)

5.2 浮点数字面量 #

go
3.14
3.          // 等于 3.0
.14         // 等于 0.14
3.14e10     // 科学计数法
3.14E-10
0x1.fp-2    // 十六进制浮点数

5.3 字符字面量 #

go
'a'              // 字符
'中'             // Unicode字符
'\n'             // 转义字符
'\x41'           // 十六进制
'\u4e2d'         // Unicode码点
'\U00004e2d'     // Unicode码点(完整形式)

转义字符:

转义 含义
\n 换行
\t 制表符
\r 回车
\\ 反斜杠
\' 单引号
\" 双引号

5.4 字符串字面量 #

原始字符串(反引号):

go
`Hello, World!`
`多行
字符串`

解释字符串(双引号):

go
"Hello, World!\n"
"你好,世界"

5.5 布尔字面量 #

go
true
false

5.6 复合字面量 #

go
[]int{1, 2, 3}                    // 切片
map[string]int{"a": 1, "b": 2}   // 映射
Person{Name: "Tom", Age: 20}      // 结构体

六、代码规范 #

6.1 大括号风格 #

左大括号必须在同一行:

go
func main() {
    fmt.Println("Hello")
}

func main()
{  // 错误!
    fmt.Println("Hello")
}

6.2 缩进 #

使用Tab缩进(gofmt会自动处理):

go
func main() {
    if true {
        fmt.Println("Hello")
    }
}

6.3 行长度 #

建议不超过80字符,超过可换行:

go
result := someFunction(
    arg1,
    arg2,
    arg3,
)

6.4 空格 #

运算符两侧加空格:

go
x := 1 + 2
if x > 0 {
    fmt.Println(x)
}

逗号后加空格:

go
func add(a, b int) int {
    return a + b
}

6.5 导入排序 #

按标准库、第三方库、本地包分组:

go
import (
    "fmt"
    "os"

    "github.com/gin-gonic/gin"

    "myapp/utils"
)

七、工具支持 #

7.1 gofmt #

自动格式化代码:

bash
gofmt -w main.go
gofmt -w .

7.2 goimports #

自动管理导入:

bash
go install golang.org/x/tools/cmd/goimports@latest
goimports -w main.go

7.3 go vet #

静态分析检查:

bash
go vet ./...

7.4 golint #

代码风格检查:

bash
go install golang.org/x/lint/golint@latest
golint ./...

八、最佳实践 #

8.1 命名建议 #

  • 使用有意义的名称
  • 短名称用于局部变量
  • 长名称用于导出标识符
  • 避免使用无意义的缩写
go
// 好
func calculateTotalPrice(items []Item) float64

// 不好
func calcTP(i []Item) float64

8.2 注释建议 #

  • 解释"为什么"而非"是什么"
  • 保持注释与代码同步
  • 公开标识符必须有文档注释
go
func Max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

8.3 代码组织 #

  • 相关代码放在一起
  • 函数按调用顺序排列
  • 常量、变量、类型、函数依次排列
go
package main

const maxRetry = 3

var defaultTimeout = 30 * time.Second

type Config struct {
    Timeout time.Duration
}

func main() {
    // ...
}

func helper() {
    // ...
}

九、总结 #

Go语法基础要点:

  1. 注释:单行//、多行/* */
  2. 标识符:驼峰命名、首字母控制可见性
  3. 关键字:25个关键字,简洁明了
  4. 字面量:数字、字符、字符串、布尔值
  5. 代码规范:使用gofmt自动格式化

Go的设计哲学:

  • 简洁:少量关键字,清晰语法
  • 规范:工具强制代码风格
  • 实用:减少不必要的复杂性

准备好学习数据类型了吗?让我们进入下一章!

最后更新:2026-03-26