menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right All_wiki chevron_right the-way-to-go_ZH_CN chevron_right eBook chevron_right 04.1.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    04.1.md
    4.25 KB / 2024-07-16 23:14:27
        # 4.1 文件名、关键字与标识符
    
    Go 的源文件以 `.go` 为后缀名存储在计算机中,这些文件名均由小写字母组成,如 `scanner.go` 。如果文件名由多个部分组成,则使用下划线 `_` 对它们进行分隔,如 `scanner_test.go` 。文件名不包含空格或其他特殊字符。
    
    一个源文件可以包含任意多行的代码,Go 本身没有对源文件的大小进行限制。
    
    你会发现在 Go 代码中的几乎所有东西都有一个名称或标识符。另外,Go 语言也是区分大小写的,这与 C 家族中的其它语言相同。有效的标识符必须以字母(可以使用任何 UTF-8 编码的字符或 `_`)开头,然后紧跟着 0 个或多个字符或 Unicode 数字,如:X56、group1、_x23、i、өԑ12。
    
    以下是无效的标识符: 
    
    - 1ab(以数字开头)
    - case(Go 语言的关键字)
    - a+b(运算符是不允许的)
    
    `_` 本身就是一个特殊的标识符,被称为空白标识符。它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算。
    
    在编码过程中,你可能会遇到没有名称的变量、类型或方法。虽然这不是必须的,但有时候这样做可以极大地增强代码的灵活性,这些变量被统称为匿名变量。
    
    下面列举了 Go 代码中会使用到的 25 个关键字或保留字:
    
    <table class="table table-bordered table-striped table-condensed">
      <tr>
        <td>break</td>
        <td>default</td>
        <td>func</td>
        <td>interface</td>
        <td>select</td>
      </tr>
      <tr>
        <td>case</td>
        <td>defer</td>
        <td>go</td>
        <td>map</td>
        <td>struct</td>
      </tr>
      <tr>
        <td>chan</td>
        <td>else</td>
        <td>goto</td>
        <td>package</td>
        <td>switch</td>
      </tr>
      <tr>
        <td>const</td>
        <td>fallthrough</td>
        <td>if</td>
        <td>range</td>
        <td>type</td>
      </tr>
      <tr>
        <td>continue</td>
        <td>for</td>
        <td>import</td>
        <td>return</td>
        <td>var</td>
      </tr>
    </table>
    
    之所以刻意地将 Go 代码中的关键字保持的这么少,是为了简化在编译过程第一步中的代码解析。和其它语言一样,关键字不能够作标识符使用。
    
    除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数([第 6.5 节](06.5.md)),它们的作用都将在接下来的章节中进行进一步地讲解。
    
    <table class="table table-bordered table-striped table-condensed">
      <tr>
        <td>append</td>
        <td>bool</td>
        <td>byte</td>
        <td>cap</td>
        <td>close</td>
        <td>complex</td>
        <td>complex64</td>
        <td>complex128</td>
        <td>uint16</td>
      </tr>
      <tr>
        <td>copy</td>
        <td>false</td>
        <td>float32</td>
        <td>float64</td>
        <td>imag</td>
        <td>int</td>
        <td>int8</td>
        <td>int16</td>
        <td>uint32</td>
      </tr>
      <tr>
        <td>int32</td>
        <td>int64</td>
        <td>iota</td>
        <td>len</td>
        <td>make</td>
        <td>new</td>
        <td>nil</td>
        <td>panic</td>
        <td>uint64</td>
      </tr>
      <tr>
        <td>print</td>
        <td>println</td>
        <td>real</td>
        <td>recover</td>
        <td>string</td>
        <td>true</td>
        <td>uint</td>
        <td>uint8</td>
        <td>uintptr</td>
      </tr>
    </table>
    
    程序一般由关键字、常量、变量、运算符、类型和函数组成。
    
    程序中可能会使用到这些分隔符:括号 `()`,中括号 `[]` 和大括号 `{}`。
    
    程序中可能会使用到这些标点符号:`.`、`,`、`;`、`:` 和 `…`。
    
    程序的代码通过语句来实现结构化。每个语句不需要像 C 家族中的其它语言一样以分号 `;` 结尾,因为这些工作都将由 Go 编译器自动完成。
    
    如果你打算将多个语句写在同一行,它们则必须使用 `;` 人为区分,但在实际开发中我们并不鼓励这种做法。
    
    ## 链接
    
    - [目录](directory.md)
    - 上一部分:[与其它语言进行交互](03.9.md)
    - 下一节:[Go 程序的基本结构和要素](04.2.md)
    
    
    links
    file_download