初识go(基础篇)
上周开始学的,在b站找了两个视频,第一个实在是啰嗦。第二个太难。最后都放弃了。深刻体会到了网上资料虽多,适合自己的却也难找(学习前多花点时间筛选适合自己的资料很重要,以此为鉴)。基于此,我这份笔记大概率也难对人有帮助,所以只是作为整理自己思路的工具,以输出倒逼输入,促进学习。
资料准备:①https://tour.go-zh.org/list
②雨痕的《Go语言学习笔记》,网易蜗牛读书上有,正版的,排版很舒服。
③谢孟军《Go Web编程》,微信读书上有。
1.学习要先快速建立一个框架,花费的时间越短越好。即要先有一棵树,然后再慢慢长叶子。
先分析go的hello,world,这个源文件名称为hello.go:
package main //声明所属包的名称, import "fmt" //要拿水杯接到水,才能喝水,这句就是把水接到源文件这个水杯里 func main() { //func main() 函数;花括号只能写在这里,不能另起一行 fmt.Println("Hello, World") //这里使用fmt,就是在喝水;Println即打印函数,将结果输出到控制台 }
go run hello.go 直接运行,但本质上也编译了;
go build hello.go 编译生成可执行文件,
大概了解了一个小例子,接下来开始学习语法(因为要快速建立框架,所以go是谁什么时候在哪发明的以及环境搭建一概省略)
①注释。单行注释用//,多行注释用/*...*/
②变量。
声明,变量用var,常量用const
一、声明后不赋值,使用默认值。
var c, python, java bool //故都为false
二、声明后赋值,即初始化
var c, python, java = true, false, "no!" //有初始值可以省略类型,类型从初始值获取
三、短变量,在函数内使用
k := 3 //如果变量在之前声明,则退化为赋值
基本是这三种形式,但是go变量可以以组方式整理
var( x,y int a,s=100,"abc" )
③类型
Go 的基本类型有(没必要全记住,现实是开卷,能查到就行,敲的多了自然就记住了) bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的别名 rune // int32 的别名 // 表示一个 Unicode 码点 float32 float64 complex64 complex128
④零值,没有明确初始值的变量声明会被赋予它们零值。
零值是:
- 数值类型为
0
, - 布尔类型为
false
, - 字符串为
""
(空字符串)。
⑤导入,和变量一样,也可以以组的形式
import ( "fmt" "math" )
⑥函数,可以没有参数或者有多个参数,可以返回任意数量的返回值
func add(x, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) }
⑦流程控制语句
for for 是 Go 中的 “while”
func main() { sum := 0 // for i := 0; i < 10; i++ { //初始化语句+条件表达式+后置语句,前后两个可选 省略循环条件,该循环不会结束,因此无限循环可以写得很紧凑。 sum += i } fmt.Println(sum) }
if Go 的 if
语句与 for
循环类似
package main import ( "fmt" "math" ) func sqrt(x float64) string { if x < 0 { return sqrt(-x) + "i" } return fmt.Sprint(math.Sqrt(x)) } func main() { fmt.Println(sqrt(2), sqrt(-4)) }
switch switch
是编写一连串 if - else
语句的简便方法。它运行第一个值等于条件表达式的 case 语句。
package main import ( "fmt" "runtime" ) func main() { fmt.Print("Go runs on ") switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Println("Linux.") default: // freebsd, openbsd, // plan9, windows... fmt.Printf("%s.\n", os) }
没有条件的 switch 同 switch true
一样。
defer 语句会将函数推迟到外层函数返回之后执行。推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。
⑧ struct、slice及映射
......
2.抄代码,多敲两遍。形成肌肉记忆。
3.深入,开始学习方法接口及并发的知识。这部分下一篇再写
4.实际做几个项目,巩固提高