这是我参与「第五届青训营 」伴学笔记创作活动的第 1天
GO语言入门
配环境
配环境可以参考这两篇文章,另外在配环境的是时候,不要纠结,就按照教程一步步来。
[1](Go语言开发环境的搭建(Goland和VSCode) - 掘金 (juejin.cn))
[2](Windows系统下,15min从零开始在VSCode搭建Go语言所需环境|青训营笔记 - 掘金 (juejin.cn))
语言篇入门
基础变量
第一种,指定变量类型,如果没有初始化,则变量默认为零值
var v_name v_type
v_name = value
第二种,根据值自行判定变量类型。
var v_name = value
第三种,如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误,格式:
v_name := value
条件语句
switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough
循环语句
for init; condition; post { }// init 和 post可以省略,类似while()
省略情况:
for sum <= 10{
sum += sum
}
fmt.Println(sum)
函数
func function_name( [parameter list] ) [return_types] {
函数体
}
eg:
func max(num1, num2 int) int {
/* 声明局部变量 */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
结构体方法,类似类的成员函数
/* 定义结构体 */
type Circle struct {
radius float64
}
//该 method 属于 Circle 类型对象中的方法
func (c Circle) getArea() float64 {
//c.radius 即为 Circle 类型对象中的属性
return 3.14 * c.radius * c.radius
}
数组
以下演示了数组初始化:
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
我们也可以通过字面量在声明数组的同时快速初始化数组:
balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推断数组的长度:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
或
balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
切片
定义切片
你可以声明一个未指定大小的数组来定义切片:
var identifier []type
切片不需要说明长度。
或使用 make() 函数来创建切片:
var slice1 []type = make([]type, len)
也可以简写为
slice1 := make([]type, len)
也可以指定容量,其中 capacity 为可选参数。
make([]T, length, capacity)
类似动态数组,可以利用append 来追加,但是扩容机制和vector类似,需要扩容拷贝
map
底层是hash实现
/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)
如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对
range
for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range oldMap {
newMap[key] = value
}
以上代码中的 key 和 value 是可以省略。
如果只想读取 key,格式如下:
for key := range oldMap
或者这样:
for key, _ := range oldMap
如果只想读取 value,格式如下:
for _, value := range oldMap
json
type Student struct {
Name string `json:"name"`
Sid string `json:"sid"` //`json:"xxx"`结构体成员Tag
}
s := Student{Name: "jonh" ,Sid: "10323"}
//序列化
a ,err := json.Marshal(s)
//反序列化
err = json.Unmarshal(a,&s)
数字和字符串处理
strconv 包
时间处理
time 包
错误处理
errors 包
应用入门
网页翻译
上面两个工具节省很多时间‘
第一步抓取curl请求 eg
上面用f12 抓取 网页的请求curl,然后利用上面的工具生成代码。
第二步,当我们运行生成的代码,就代表,我们发送curl给翻译网站后台,后台程序返回结果给我们,这个结构是json ,再利用上面工具,把转成 GO struct ,最后选取想要的内容去获取,利用遍历等方法。
socks5 代理实现
[详细可以参考这个](【万字总结】Go语言上手(一) | 青训营笔记 - 掘金 (juejin.cn))
上面的代码都使用了 defer 和 go并发机制,这里先不写。