基础知识个人小记2 | 青训营

77 阅读2分钟

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 {
    //下面这句话是用来输出错误信息的,这里的os.Stderr是一个文件,是标准错误输出,fmt.Fprintf()是用来格式化输出的,第一个参数是文件,第二个参数是格式化字符串,之后的参数是格式化字符串中的参数
    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)