day1_2_2
1.go语言中``用来表示字符串,而''表示rune类型的字符字面量,rune类型是int32的别名,用来表示unicode编码的字符
2.defer的作用是在函数结束时关闭流,这里的流是resp.Body,也就是响应体,如果不关闭的话,会造成内存泄漏,会从下往上依次关闭
3.这里的bodyText是一个字节数组,需要转换成字符串,才能输出,使用%s进行格式化输出
fmt.Printf("%s\n", bodyText)
4. %#v是用来输出结构体的,%v是用来输出基本类型的,最详细的输出格式
5. os.Args是一个字符串切片,里面存储的是命令行参数,第一个参数是程序的名字,之后的参数是用户输入的参数
if len(os.Args) != 2 {
fmt.Fprintf(os.Stderr, `usage: simpleDict word example: simpleDict hello`)
os.Exit(1)
}
day1_2_3
1.panic(err)的作用是中断程序的执行,如果不加这个,程序会继续执行下去,括号内的内容会输出到控制台
2. func connect(reader *bufio.Reader, conn net.Conn) (err error) {
// // +----+-----+-------+------+----------+----------+
// // |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
// // +----+-----+-------+------+----------+----------+
// // | 1 | 1 | X'00' | 1 | Variable | 2 |
// // +----+-----+-------+------+----------+----------+
// // VER 版本号,socks5的值为0x05
// // CMD 0x01表示CONNECT请求
// // RSV 保留字段,值为0x00
// // ATYP 目标地址类型,DST.ADDR的数据对应这个字段的类型。
// // 0x01表示IPv4地址,DST.ADDR为4个字节
// // 0x03表示域名,DST.ADDR是一个可变长度的域名
// // DST.ADDR 一个可变长度的值
// // DST.PORT 目标端口,固定2个字节
if err != nil {
panic(err)