go语言基础 | 青训营笔记
这是我参加「第五届青训营」伴学笔记创作活动的第1天。
go 语言基本语法
这里主要说明记录一些go语言特有的语法:
- 初始化变量
// 第一种 var a int = 1 var b = 2 var c string // 第二种 a := 1.0 if语句的{必须和if在同一行if a%2==0 { fmt.Println(a) }switch语句的case不需要写breakslice的数据结构包括一个指向切片的指针,长度和容量type slice struct { array unsafe.Pointer len int cap int }map的遍历m := map[string]string{"a": "A", "b": "B"} for k, v := range m { fmt.Println(k, v) }- 特殊的错误处理方式
_,err = function() if err != nil { fmt.Println(err) return } json的序列化json.Marshal()和反序列化json.Unmarshalstrconv库主要处理类型转换问题
go语言实战
示例一
使用 fmt.Scanf()代替bufio.NewReader()来简化代码:
func main() {
// ...
var input string
for {
_, err := fmt.Scanf("%v\n", &input)
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
return
}
guess, err := strconv.Atoi(input)
// ...
}
// ...
}
示例二
主要是对 http 请求进行解析,然后本地创建相应的结构体接收请求返回的数据,然后得到我们想要的翻译结果。
示例三
在这里我主要遇到了一个问题,当我使用socks5代理访问网站时,会出现错误:
这里主要原因在于我本地使用了梯子,导致DNS修改,我本地解析域名有问题,所以使用socks5h,由socks server解析hostname。
curl -v -x socks5h://localhost:1080 -L www.qq.com
socks5协议:
socks是一种互联网协议,它通过一个代理服务器在客户端和服务端之间交换网络数据。简单来说,它就是一种代理协议,扮演一个中间人的角色,在客户端和目标主机之间转发数据。
虽然socks是代理协议,但是它的数据都是明文传输。
互联网早期,企业内部网络为了保证安全性,都是置于防火墙之后,这样带来的副作用就是访问内部资源会变得很麻烦,socks协议就是为了解决这个问题而诞生的。socks相当于在防火墙撕了一道口子,让合法的用户可以通过这个口子连接到内部,从而访问内部的一些资源和进行管理。