一、参看
二、下载安装
按照安装引导直接
三、入门
3.1 hello world
(1) 必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过
(2) import声明必须跟在文件的package声明之后
3.2 命令行参数
3.2.1 包的注释
(1) 按照惯例,在每个package
声明之前添加注释,可以有多行注释,从整体角度对程序描述
3.2.2 变量声明
(1) 变量会在声明时直接初始化
(2) 如果变量没有显式初始化,则被隐式地赋予其类型的零值(zero value
)
3.2.3 自增语句
(1) i++
给i
加1
;这和i += 1
以及i = i + 1
都是等价的, 类似的还有 i--
(2) 它们是语句,而不像C系
的其它语言那样是表达式, 所以j = i++
非法
(3) ++
和--
都只能放在变量名后面,因此--i
也非法
3.2.4 短变量声明 short variable declaration
(1) 定义一个或多个变量并根据它们的初始值为这些变量赋予适当类型的语句
(2) 简短变量声明语句中必须至少要声明一个新的变量,下面的代码将不能编译通过
(3) 但只能用在函数内部,而不能用于包变量
3.2.5 join函数
3.3 查找重复的行
3.3.1 map
(1) 是存储了键/值(key/value
)的集合,对集合元素,提供常数时间的存、取或测试操作
(2) 键只要其值能用==
运算符比较, 即可以是任意的类型
(3) 值可以是任意类型
(4) Go
的map
类似于Java
语言中的HashMap
,Python
语言中的dict
,Lua
语言中的table
,通常使用hash
实现
(5) map
的迭代顺序并不确定,从实践来看,该顺序随机
3.3.2 格式化输出
(1) fmt.Printf
函数对一些表达式产生格式化输出
(2) 该函数的首个参数是个格式字符串,指定后续参数被如何格式化
(3) 各个参数的格式取决于“转换字符”(conversion character
),形式为百分号后跟一个字母
常用的转换字符如下
%d , 十进制整数
%x , 16进制整数
%o , 8进制整数
%b , 2进制整数
%f , 单精度浮点数
%g , 双精度浮点数
%e , 科学计数法表示的浮点数
%t , 布尔类型数
%c , rune, 即unicode码点
%s , 字符串
%q , 带双引号的字符串"abc" 或者带单引号的字符 'a'
%v , 变量的自然形式, (natural format), 任意类型默认格式值
%+v, 当变量是一个结构时候,会输出field name信息
%T , 变量的类型
%% , 字面意思上的百分号,没有特殊的意思
(4) 默认情况下,Printf
不会换行
(5) 按照惯例,以字母f
结尾的格式化函数,如log.Printf
和fmt.Errorf
,都采用fmt.Printf
的格式化准则
(6) 以ln
结尾的格式化函数,则遵循Println
的方式,以跟%v
差不多的方式格式化参数,并在最后添加一个换行符
3.3.3 函数的声明与调用
(1) 函数和包级别的变量(package-level entities
)可以任意顺序声明,并不影响其被调用
(2) map
作为参数传递给某函数时,该函数接收这个引用的一份拷贝(copy
,或译为副本),被调用函数对map
底层数据结构的任何修改,调用者函数都可以通过持有的map
引用看到