这是我参与「第五届青训营」伴学笔记创作活动的第 1 天
零、前言
记个笔记 顺便(恰青豆 还是有很多不完善也有可能对的地方还请大佬们指正
一、本堂课重点内容:
-
something about go
基础语法
错误处理
字符串操作
JSON 处理
时间处理
数字解析
进程信息
-
actual combat
猜谜
在线词典
socks5
二、详细知识点介绍:
基础
基础语法就不过多记录了,就记点别的
字符串拼接
性能
Builder.WriterString>buffer.WriterString>strings.Join>拼接符方法>fmt.Sprintf
s := "hel" + "lo,"
s += "world!"
fmt.Println(s) //输出 “hello, world!”
s1 := "hello,"
s2 := "world!"
join := strings.Join([]string{s1, s2}, "")
fmt.Println(join) //打印 hello,world!
sprintf := fmt.Sprintf("%s%s", s1, s2)
fmt.Println(sprintf) //打印hello,world!
var buf bytes.Buffer
buf.WriteString(s1)
buf.WriteString(s2)
fmt.Println(buf.String()) //输出hello,world!
var buf strings.Builder
buf.WriteString("hello,")
buf.WriteString("world")
fmt.Println(buf.String()) //输出hello,world
JSON
json.marshaler() // 序列化
json.numarshaler // 反序列化
时间处理
为什么是 格式化时间是 2006-01-02 15:04:05
1: month (January, Jan, 01, etc)
2: day
3: hour (15 is 3pm on a 24 hour clock)
4: minute
5: second
6: year (2006)
7: timezone (GMT-7 is MST)
实战
-
猜谜游戏
这个就在于要写 rand.Seed(time.Now().UnixNano()) 来初始化种子
作业
用scanf来接收,用法类似c语言
var a int
fmt.Scanf("%d", &a)
fmt.Println(a, reflect.TypeOf(a))
当然还可以用 scanln 更简单一点
var a int
fmt.Scanln(&a)
fmt.Println(a, reflect.TypeOf(a))
这个比较简单没什么好说的
但是有个注意点就是说scanf是接收换行符的所以在for循环里会接收换行符,简单的办法可以再在后面加一个scanln来吃掉换行符或者是把接收变成这个 "%d\n" 也是可以的
-
在线词典
两个不错的网站:
将url转为go Convert curl commands to Go
将json转为go结构体 JSON转Golang Struct - 在线工具 - OKTools
百度翻译的负载不是json格式但是处理方法也一样
思路大概就是抓取访问请求 -> 将请求的url抓出来转为go代码来模拟浏览器请求 -> 将请求与接收的结构体序列化和反序列化为json提取就ok了
-
sockes5代理(
这个有点抽象)
一些场景下,防火墙仅允许部分端口(如http的80端口)通信,那么可以利用SOCKS5协议和一个打开80端口监听的SOCKS5服务器连接,从而可以连接公网上其他端口的服务器。
大概就是说由原来的直接访问变为通过socks代理间接来访问目标地址,所以代码流程大概是接收访问信息进行协商后再进行访问
测试代理服务器,curl -socks5 <代理服务器地址>,后面加一个可访问的URL,如果工作正常,则curl命令就会正常返回。
三、总结
课的质量还是可以的,socks5那个还是有点看不懂,回头还要再研究一下done