这是我参与[第五届青训营]伴学笔记创作活动的第1天。这节课主要在学习Go语言基础。
-
本节课重点内容 本节课主要介绍了三个方面的内容:第一部分是Go语言简介,第二部分是Go语言开发入门,包括开发环境的配置、基础语法和常用的一些标准库的介绍,第三部分是Go实战,主要包括三个实战项目。
-
详细知识点介绍
-
Go语言基础语法1
import "fmt"字符串可直接相加:
"abc" + "def"变量声明:var a = "initial" || var b, c int = 1, 2 || var e float64 || f := float32(e) (其中,:=表示声明变量并赋值,而=单纯表示赋值)
常量声明:const s string = "constant"
if-else写法:if后面不需要加括号,if中的语句必须使用大括号括起来
for循环:go语言中只有for循环,没有while循环;同样for后面的语句不加括号,可以使用continue、 break等关键词
switch分支结构:switch后面的语句不加括号,并且分支内默认可以不加break可自动跳出分支。另外,go中的switch比c++中的功能更强大,可以使用多种数据类型,并且也可以switch后不跟条件,直接写在case中,比写多个if-else语句更清晰易懂。
数组声明(大小固定):var a [5]int || b := [5]int{1, 2, 3, 4, 5} || var twoD [2][3]int
切片(大小可以不固定):切片是可变长度的数组。s := make([]string, 3) || s[0] = "a" || s = append(s, "d") || s[2: 5]、s[:5]、s[2:] || slice的切片操作中不支持负数索引。
map[key]value:map的声明m := make(map[string]int) || 从map中删除元素 delete(m, "one") || r, ok := m["unknow"]其中ok用于接收该元素是否存在于map中 || golang中的map是无序的,不会按照任一的顺序,是一个偏随机的顺序。
使用range遍历数组和map:数组返回 索引-值,map返回 key-value,对于其中不需要的数值可以使用"_"来替代。
函数:go语言的一大特点就是变量类型是后置的,
func add(a int, b int) int{ return a + b};函数一般返回多个值:第一个值是真正的返回值,还会返回一个bool类型的ok表示值是否存在。指针:主要用于修改变量。函数体:func add2ptr(n *int) {*n += 2} 调用:add2ptr(&n)
结构体:type user struct { name string /n password string} || var d user
结构体方法:为结构体定义一些结构体方法,相当于类成员函数。
func checkpassword(u *user, password string) bool{ //普通函数
return u.password == password
}
func (u *user) checkpassword(password string) bool{ // user结构体的类成员函数
return u.password == password
}
a := user{"wang", "1024"}
a.checkpassword("2048") // 结构体对象调用结构体方法
-
Go语言基础语法2
错误处理:
import "errors"
func findUser(users []user, name string) (v *user, err error) {
// 正常情况下返回值
if u.name == name{
return &u, nil
}
// 异常返回值
return nil, errors.New("Not found!")
}
// 函数调用
u, err := findUser([]user{{"wang", "1024"}}, "wang")
字符串操作: import "strings"
字符串格式化:
JSON处理:import "encoding/json"
自定义类型中的变量使用大写字母开头,使用json.Marshal()对其进行序列化变成结果buf,再通过string(buf)获得其中的值;通过json.Unmarshal(buf, &b)将上述结果反序列化到b中。
时间处理:import "time"
字符串与数字间的转换:import "strconv"
进程信息: import "os" "os/exec"
-
实践练习例子
总共涉及了三个例子的讲解:第一个是猜谜游戏,第二个是在线词典,主要介绍了抓包流程,第三个是Socks5代理服务器。其中,socks5代理服务器问题建立客户与服务器的连接主要有三步,一是协商阶段,二是请求阶段,三是数据传送阶段。