1.入门
go语言的代码通过package组织,就是C++的库。一个包由位于单个目录下的一个或者多个.go源代码文件组成。
提供了100多个包,以支持常见的功能,比如输入输出排序或者文本处理,比如fmt包就有格式化输出,接收输入的函数。Println是一个基础函数,可以打印以空格间隔的一个或者多个值,并在最后添加一个换行从而输出一整行。
import 声明必须跟在文件的 package 声明之后。随后,则是组成程序的函数、变量、常量、类型的声明语句(分别由关键字 func , var , const , type 定义)。这些内容的声明顺序并不重要(译注:最好还是定一下规范)。这个例子的程序已经尽可能短了,只声明了一个函数, 其中只调用了一个
其他函数。为了节省篇幅,有些时候, 示例程序会省略 package 和 import 声明,但是,这些声明在源代码里有,并且必须得有才能编译。
一个函数的声明由func关键字声明。
Go语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。实际上,编译器会主动把特定符号后的换行符转换为分号, 因此换行符添加的位置会影响Go代码的正确解析(译注:比如行末是标识符、整数、浮点数、虚数、字符或字符串文字、关键字 break 、 continue 、 fallthrough 或 return 中的一个、运算符和分隔符 ++ 、 ‐‐ 、 ) 、 ] 或 } 中的一个)。举个例子, 函数的左括号 { 必须和 func 函数声明在同一行上, 且位于末尾,不能独占一行,而在表达式 x + y 中,可在 + 后换行,不能在 + 前换行(译注:以+结尾的话不会被插入分号分隔符,但是以x结尾的话则会被分号分隔符,从而导致编译错误)
os包以夸平台的方式,提供了一些与操作系统交互的函数和变量,程序的命令行参数可从os包的args变量获取,os包外部使用os.args访问该变量
os.Args变量是一个字符串(string)的切片(slice)(译注:slice和Python语言中的切片类似,是一个简版的动态数组),切片是Go语言的基础概念,稍后详细介绍。现在先把切片s当作数组元素序列, 序列的长度动态变化, 用 s[i] 访问单个元素,用 s[m:n] 获取子序列(译注:和python里的语法
差不多)。序列的元素数目为len(s)。和大多数编程语言类似,区间索引时,Go言里也采用左闭右开形式, 即,区间包括第一个索引元素,不包括最后一个, 因为这样可以简化逻辑。(译注:比如a =[1, 2, 3, 4, 5], a[0:3] = [1, 2, 3],不包含最后一个元素)。比如s[m:n]这个切片,0 ≤ m ≤ n ≤
len(s),包含nm个元素。
ep:



三种初始化变量:
s := ""
var s string
var s = ""
var s string = ""
第一种形式,是一条短变量声明,最简洁,但只能用在函数内部,而不能用于包变量。第二种形式依赖于字符串的默认初始化零值机制,被初始化为""。第三种形式用得很少,除非同时声明多个变量。第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的类型,否则使用隐式初始化。
1.3 查找重复的行

本章要点:
一、控制流补充
- switch语句
- 基础用法:无需显式写break,执行完case逻辑自动退出;若需相邻case执行同一逻辑,需加fallthrough(极少使用)。
- 无tag switch:等价于switch true,可直接罗列条件(替代多个if else),支持紧跟短变量声明、自增/赋值语句或函数调用。
- break/continue
- 基础作用:break中断当前循环/switch/select,continue跳过当前循环进入下一次。
- 高级用法:可配合label控制外层循环(类似goto,极少手动使用,多出现于机器生成代码)。
二、命名类型
- 通过type声明为特殊类型命名,常用于简化长struct定义(如type Point struct{ X, Y int }),详细内容见第二章。
三、指针
- 核心特性:存储变量内存地址,支持&(取地址)、*(取值)操作;无指针运算(不能加减),平衡了C语言的自由操作和其他语言的“纯引用”特性,详细见2.3.2节。
四、方法与接口
- 方法:与命名类型关联的函数,可绑定到任意命名类型,第六章详解。
- 接口:抽象类型,统一处理不同固有类型(仅关注方法而非实现),第七章详解。
五、包(packages)
- 核心价值:Go提供丰富的标准库,社区扩展包也极多,编程多基于现有包开发。
- 资源查询:标准库查https://golang.org/pkg,社区包查https://godoc.org;可通过
go doc 包名.函数名(如go doc http.ListenAndServe)在本地查看文档。
六、注释规范
- 单行注释//:用于单行说明,函数前写注释说明行为是好习惯。
- 多行注释/* ... */:用于文件开头文档、大段解释性文字,不可嵌套注释。
- 文档价值:注释内容会被godoc识别并展示,参考10.7.4节。

浙公网安备 33010602011771号