Go语言基础入门 | 青训营笔记

69 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

对课程中学到的重要知识点做了笔记,方便后续的回顾

简介

GO语言的特点:
1.高性能、高并发
2.语法简单、学习曲线平缓
3.丰富的标准库
4.完善的工具链
5.静态链接
6.快速编译
7.跨平台
8.垃圾回收

入门

1.安装golang

go.dev/
studygolang.com/dl
goproxy.cn/

  1. 基础语法
  2. 变量
  3. if else
  4. 循环
  5. switch
  6. 数组

7. 切片

go语言切片是对数组的抽象 go数组的长度不可改变,切片相当于go语言中的动态数组 与数组相比切片的长度不固定,可以追加元素,在追加时可能使切片的容量增大

s := make([]string, 3)
s = append(s, "e", "f")
good := []string{"g", "o", "o", "d"}
  1. map

9. range

range用于循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素 数组和切片中,返回元素的索引和索引对应的值,在集合中返回k-v对

m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
    fmt.Println(k, v) // b 8; a A
}
  1. 函数

11. 指针

只能初步的使用,没有C++那么丰富 go语言不支持指针运算

func add2ptr(n *int) {
	*n += 2
}
  1. 结构体

13. 结构体方法

go语言可以定义结构体,可以定义结构体方法 可以是指针或者非指针类型 调用的时候可以用函数的方法调用

type user struct {
	name     string
	password string
}
func (u *user) resetPassword(password string) {
	u.password = password
}
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
  1. 错误处理
  2. 字符串操作

16. 字符串格式化

%v会做自适应的打印

fmt.Printf("p=%v\n", p)  // p={1 2}
fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}

17. json处理

json.Marshal()将数据编码成json字符串 json.MarshalIndent()应用缩进来格式化输出 json.Unmarshal()将json字符串解码到相应的数据结构

a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
buf, err = json.MarshalIndent(a, "", "\t")
var b userInfo
err = json.Unmarshal(buf, &b)

18. 时间处理

now := time.Now()// 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933
t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC)
t2 := time.Date(2022, 3, 27, 2, 30, 36, 0, time.UTC)
fmt.Println(t)                                                  // 2022-03-27 01:25:36 +0000 UTC
fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) // 2022 March 27 1 25
fmt.Println(t.Format("2006-01-02 15:04:05"))                    // 2022-03-27 01:25:36
diff := t2.Sub(t)
fmt.Println(diff)                           // 1h5m0s
fmt.Println(diff.Minutes(), diff.Seconds()) // 65 3900
t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36")
  1. 数字解析
  2. 进程信息

实战

1. 猜谜游戏

2. 在线词典

  1. 先从彩云字典的HTTP页面中通过开发者模式,查看查字典调用的API接口是什么
  2. 确认需要传输的json形式
  3. 通过在线网站,生成curl命令
  4. 将传输的数据json序列化
  5. 将返回值反序列化到json里面
  6. 使用网站自动将json转成go结构体
  7. 对main函数添加输出参数

3. socket5代理

socket5代理的含义

代理就是中间人,在客户端看来是目标服务器,在目标服务器看来是客户端,所以代理必须同时满足C/S 双方的规范。 如果只是简单的传送 C/S 两端数据,那他就是个“透明代理”;一旦代理对请求或响应进行了修改,那就是“非透明代理”。

socket5代理的流程

  1. 客户端进行协议认真
  2. 代理服务器对认证进行回复
  3. 客户端发送希望连接的目标信息
  4. 代理服务器表示确认或接收
  5. 代理服务器连接到目标开始传输数据

课后个人总结

  1. 入门部分的内容都比较基础,但是有些细节的语法点比较模糊,所以做了笔记方便以后的翻看
  2. 关于实战项目
    1. 第一个实战项目比较简单
    2. 第二个用到了之前没有用到过的在线程序生成工具,还需要多了解,多学习
    3. 第三个例子有有了稍许难度,而且是之前没有接触过的概念,所以先去了解了基础的概念,然后对具体的编码进行学习

参考资料

github.com/wangkechun/… www.moye.me/2017/08/03/… fanyi.caiyunapp.com/ curlconverter.com/#go oktools.net/json2go