# 关键字和标识符

此篇文章将介绍Go中的关键字和标识符。

### 关键字

关键字是一些特殊的用来帮助编译器理解和解析源代码的单词。

截至目前（Go 1.23），Go中共有25个关键字。

    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

这些关键字可以分为四组：

- `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`也可以看作是流程控制关键字， 但它们有一些特殊的作用。详见协程和延迟函数调用。

这些关键字将在后续文章中得到详细介绍。

### 标识符

一个标识符是一个以Unicode字母或者`_`开头并且完全由Unicode字母和Unicode数字组成的单词。

- Unicode字母是定义在Unicode标准 中的Lu、Ll、Lt、Lm和Lo分类中的字符。
- Unicode数字是定义在Unicode标准中的Nd数字字符分类中的字符。

注意：关键字不能被用做标识符。

标识符`_`是一个特殊字符，它叫做空标识符。

以后，我们将知道所有的类型名、变量名、常量名、跳转标签、包名和包的引入名都必须是标识符。

一个由Unicode大写字母开头的标识符称为导出标识符。 这里导出可以被理解为公开（public）。 其它（即非Unicode大写字母开头的）标识符称为非导出标识符。 非导出可以被理解为私有（private）。 截至目前（Go 1.23），东方字符都被视为非导出字符。 非导出有时候也被称为未导出。

下面是一些合法的导出标识符：

    Player_9
    DoSomething
    VERSION
    Ĝo
    Π

下面是一些合法的未导出标识符：

    _
    _status
    memStat
    book
    π
    一个类型
    변수
    エラー

下面这些不能被用做标识符：

    // Unicode数字开头
    123
    3apples

    // 含有不符合要求的Unicode字符
    a.b
    *ptr
    $name
    a@b.c

    // 这两个是关键字
    type
    range