这是我参与「第五届青训营」伴学笔记创作活动的第 1 天
1.本节课程内容
主要有以下几个部分:
- Go 语言简介
- Go 语言开发入门,包括开发环境配置、基础语法、标准库
- Go 实战,包括三个实战项目
2.什么是go语言
go是一门高性能、高并发、语法简单、上手容易、学习曲线平缓的语言,具有丰富的标准库,完善的工具链,支持快速编译,能跨平台且支持垃圾回收(GC)。目前有很多公司如字节跳动、美团、滴滴、facebook等公司均在使用go语言。
3.go语言入门
1)go语言的开发环境
需要两步:1.安装golang;2.配置golang的编辑器或ide
1.安装golang
可以通过打开go.dev 或 studygolang.com/dl下载安装包并安装golang。
2.安装ide
可以使用goland、vscode或者github上基于云的ide。 vscode是开源、免费的。goland是商用软件,可以免费试用30天,在goland官网进行学生认证可以免费使用一年的教育版。两者都可以在对应的软件官网进行下载,并按提示进行安装。vscode需要在安装golang扩展并安装gotools等工具。goland要配置的内容要少一些。
2)go语言的基础语法
个人感觉其基本语法在很多地方与c、java类似,同时又有着自己的风格。
1.从Hello World开始
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
package语句表示程序的入口;import语句用来导入库,似乎类似于c中的#include 或者java中的import 。 import ( "fmt" )语句表示导入标准库中的fmt包。将鼠标放在包名上,会弹出提示信息,点击后会打开网页,从而查看包的api。
2.go语言的变量类型、运算符等
go是一个强类型语言,每个变量都要指定类型。go中字符串是内置类型,可以直接通过‘+’号进行拼接。变量声明有两种方式:用var或者“变量名:= XXX”进行声明,如代码所示。用var形式声明时会自动匹配类型。
` var a = "initial"
cc := string("initial")`
常量的声明只需要将var改为const即可。注意的是,常量没有确定的类型,会根据使用的上下文自动确定。
const h = 500000000
大部分运算符的优先级与c类似
3.控制语句
1.if/else语句
其写法与c或者java的很类似,只是不用写小括号了,且要求大括号必须写,不能类似c中,有时候if语句中只有一行代码就将大括号省去。写法如下
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
2.循环语句
go中没有while或者do while语句,循环语句只有for循环语句,写法上仍然是省去了小括号,且for语句的三段任何一段都能省去,如果都不写相当于是死循环,即类似while(true)的写法。也可以使用continue和break,且功能类似c。
for {
fmt.Println("loop")
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
3.switch语句
整体与c写法类似,主要区别有三点:1.不写小括号2.支持的类型更多3.不需要类似c中每个分支都要加break,go中不写break,当前分支结束后,不会进行下一个分支。
4.数组、切片和map
数组
数组长度是固定的,其他的类似c。
切片(slice)
切片是可变长度的,需要用make语句创建,append添加。切片这里类似于python,但不支持负数索引。
map(哈希、字典)
map,也就是哈希表,在其它语言中都有类似的结构,其通过make创建,定义格式:
m := make(map[string]int)
m["one"] = 1
在上述语句创建的map,key的类型是string,value的类型是int。 go中map是完全无序的(不知道如果需要有序可以用什么数据结构)
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false
通过加上ok来判断key值是否存在。
5.函数
golang中函数看起来与c等语言的类似,区别在于:1.变量类型后置2.原生支持返回多个值,第一个值是函数真正的返回值,第二个值是错误信息。
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}
6.指针
对比c等语言,指针能进行的操作有限。主要用途是通过函数对传入的参数进行修改(学c的时候经常提到的东西了23333)
7.结构体
声明格式:
type user struct {
name string
password string
}
访问: 通过x.xxx的形式进行访问,如:
var d user
d.name = "wang"
结构体也可以作为函数的参数,同样可以通过指针传入。
8.错误
golang不像java通过异常处理(try-catch-finally那一套)。golang的方式是通过函数返回nil值来体现具体是哪个函数出现了错误,并能通过简单的if-else语句处理错误。
9.标准库
go语言中有很多标准库,如进行字符串处理的strings库,需要通过以下的语句导入。
import (
"strings"
)
进行时间相关处理的times库等。进行将字符串转成数字等操作的strconv库。
4.go语言简单实践
通过猜数字、在线词典、SOCKS5 代理这三个项目,让学习者进一步加深对golang基础语法、标准库的理解,毕竟只看基础语法比上手写学新的语言会学的比较慢。
5.总结
通过今天的课程主要学习了go的基础知识。个人感觉go的基本语法与c、java、python有很多类似的地方,但部分地方又有自己的特色。因本人对python的接触较少,对于切片的接触较少,感觉比较难理解。同时其与其他语言相似但却不同的写法,估计在刚开始使用的时候,会犯不少错误。