[ Go基础应用 | 青训营笔记 ]

250 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 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代理(这个有点抽象

abecb44594330d7dbe802d7269dd4bb.png

一些场景下,防火墙仅允许部分端口(如http的80端口)通信,那么可以利用SOCKS5协议和一个打开80端口监听的SOCKS5服务器连接,从而可以连接公网上其他端口的服务器。

大概就是说由原来的直接访问变为通过socks代理间接来访问目标地址,所以代码流程大概是接收访问信息进行协商后再进行访问

测试代理服务器,curl -socks5 <代理服务器地址>,后面加一个可访问的URL,如果工作正常,则curl命令就会正常返回。

三、总结

课的质量还是可以的,socks5那个还是有点看不懂,回头还要再研究一下done