Go 边看边练 -《Go 学习笔记》系列(一)
88250 · · 4362 次点击 · · 开始浏览相信大家在看编程语言学习教程的时候都会难免觉得有点枯燥:
- 自己看书,遇到问题不方便求助
- 书上的代码片段、示例是静态的
- 虽然有时书上会给出运行输出,但是不够直观
- 自己拷贝代码到 IDE 里运行是也比较麻烦
- 即使运行了也要来回在 IDE 和书之间切换,还是麻烦
- 总之,程序员都是懒人
如果能边看边练就会舒服很多,书上的示例代码经过自己实际验证/微调后也更容易理解并消化。
基于这个出发点,Sym 社区决定给大家上干货中的干货:
- 从内容上:选择了雨痕的《Go 学习笔记》作为教程,该书言简意赅,讲解的都是 Go 关键点
- 从技术上:社区整合了 Go 黑科技——Wide,在技术上实现了边看边练!
即使你以前看过该书,我们也强烈建议你在这里再看一遍,因为这将会带来完全不一样的体验~
光说不练假把式,上货!
1.1 变量
Go 是静态类型语言,不能在运行期改变变量类型。
使用关键字 var 定义变量,自动初始化为零值。如果提供初始化值,可省略变量类型,由编译器自动推断。
var x int
var f float32 = 1.6
var s = "abc"
在函数内部,可用更简略的 ":=" 方式定义变量。
func main() {
x := 123 // 注意检查,是定义新局部变量,还是修改全局变量。该方式容易造成错误。
}
可一次定义多个变量。
[フレーム]多变量赋值时,先计算所有相关值,然后再从左到右依次赋值。
data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100)
特殊只写变量 "_",用于忽略值占位。
[フレーム]编译器会将未使用的局部变量当做错误。
var s string // 全局变量没问题。
func main() {
i := 0 // Error: i declared and not used。(可使用 "_ = i" 规避)
}
注意重新赋值与定义新同名变量的区别。
[フレーム]1.2 常量
常量值必须是编译期可确定的数字、字符串、布尔值。
const x, y int = 1, 2 // 多常量初始化
const s = "Hello, World!" // 类型推断
const ( // 常量组
a, b = 10, 100
c bool = false
)
func main() {
const x = "xxx" // 未使用用局部常量不会引发编译错误。
}
不支持 1UL、2LL 这样的类型后缀。
在常量组中,如不提供类型和初始化值,那么视作与上一常量相同。
const (
s = "abc"
x // x = "abc"
)
常量值还可以是 len、cap、unsafe.Sizeof 等编译期可确定结果的函数返回值。
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(b)
)
如果常量类型足以存储初始化值,那么不会引发溢出错误。
const (
a byte = 100 // int to byte
b int = 1e20 // float64 to int, overflows
)
枚举
关键字 iota 定义常量组中从 0 开始按行计数的自增枚举值。
const (
Sunday = iota // 0
Monday // 1,通常省略后续行行表达式。
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)
const (
_ = iota // iota = 0
KB int64 = 1 << (10 * iota) // iota = 1 MB // 与 KB 表达式相同,但 iota = 2 GB TB )
在同一常量组中,可以提供多个 iota,它们各自增长。
const (
A, B = iota, iota << 10 // 0, 0 << 10 C, D // 1, 1 << 10 )
如果 iota 自增被打断,须显式恢复。
const (
A = iota // 0
B // 1
C = "c" // c
D // c,与上一一行行相同。
E = iota // 4,显式恢复。注意计数包含了 C、D 两行行。
F // 5
)
可通过自定义类型来实现枚举类型限制。
[フレーム]- 本系列是基于雨痕 的《Go 学习笔记》(第四版) 整理汇编而成,非常感谢雨痕的辛勤付出与分享!
- 转载请注明:文章转载自:黑客与画家的社区 [http://symphony.b3log.org]
- 如果你觉得本章节做得不错,请在下面打赏一下吧~
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
相信大家在看编程语言学习教程的时候都会难免觉得有点枯燥:
- 自己看书,遇到问题不方便求助
- 书上的代码片段、示例是静态的
- 虽然有时书上会给出运行输出,但是不够直观
- 自己拷贝代码到 IDE 里运行是也比较麻烦
- 即使运行了也要来回在 IDE 和书之间切换,还是麻烦
- 总之,程序员都是懒人
如果能边看边练就会舒服很多,书上的示例代码经过自己实际验证/微调后也更容易理解并消化。
基于这个出发点,Sym 社区决定给大家上干货中的干货:
- 从内容上:选择了雨痕的《Go 学习笔记》作为教程,该书言简意赅,讲解的都是 Go 关键点
- 从技术上:社区整合了 Go 黑科技——Wide,在技术上实现了边看边练!
即使你以前看过该书,我们也强烈建议你在这里再看一遍,因为这将会带来完全不一样的体验~
光说不练假把式,上货!
1.1 变量
Go 是静态类型语言,不能在运行期改变变量类型。
使用关键字 var 定义变量,自动初始化为零值。如果提供初始化值,可省略变量类型,由编译器自动推断。
var x int
var f float32 = 1.6
var s = "abc"
在函数内部,可用更简略的 ":=" 方式定义变量。
func main() {
x := 123 // 注意检查,是定义新局部变量,还是修改全局变量。该方式容易造成错误。
}
可一次定义多个变量。
[フレーム]多变量赋值时,先计算所有相关值,然后再从左到右依次赋值。
data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100)
特殊只写变量 "_",用于忽略值占位。
[フレーム]编译器会将未使用的局部变量当做错误。
var s string // 全局变量没问题。
func main() {
i := 0 // Error: i declared and not used。(可使用 "_ = i" 规避)
}
注意重新赋值与定义新同名变量的区别。
[フレーム]1.2 常量
常量值必须是编译期可确定的数字、字符串、布尔值。
const x, y int = 1, 2 // 多常量初始化
const s = "Hello, World!" // 类型推断
const ( // 常量组
a, b = 10, 100
c bool = false
)
func main() {
const x = "xxx" // 未使用用局部常量不会引发编译错误。
}
不支持 1UL、2LL 这样的类型后缀。
在常量组中,如不提供类型和初始化值,那么视作与上一常量相同。
const (
s = "abc"
x // x = "abc"
)
常量值还可以是 len、cap、unsafe.Sizeof 等编译期可确定结果的函数返回值。
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(b)
)
如果常量类型足以存储初始化值,那么不会引发溢出错误。
const (
a byte = 100 // int to byte
b int = 1e20 // float64 to int, overflows
)
枚举
关键字 iota 定义常量组中从 0 开始按行计数的自增枚举值。
const (
Sunday = iota // 0
Monday // 1,通常省略后续行行表达式。
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)
const (
_ = iota // iota = 0
KB int64 = 1 << (10 * iota) // iota = 1 MB // 与 KB 表达式相同,但 iota = 2 GB TB )
在同一常量组中,可以提供多个 iota,它们各自增长。
const (
A, B = iota, iota << 10 // 0, 0 << 10 C, D // 1, 1 << 10 )
如果 iota 自增被打断,须显式恢复。
const (
A = iota // 0
B // 1
C = "c" // c
D // c,与上一一行行相同。
E = iota // 4,显式恢复。注意计数包含了 C、D 两行行。
F // 5
)
可通过自定义类型来实现枚举类型限制。
[フレーム]- 本系列是基于雨痕 的《Go 学习笔记》(第四版) 整理汇编而成,非常感谢雨痕的辛勤付出与分享!
- 转载请注明:文章转载自:黑客与画家的社区 [http://symphony.b3log.org]
- 如果你觉得本章节做得不错,请在下面打赏一下吧~