这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
一、内容:
第一天的课程以入门和学习Go语言基础为主,下载了Go语言的开发工具Goland,配置了Go语言的运行环境,并打印了go语言的hello world。同时学习了定义变量类型、for循环、if语句、switch语句、数组、切片、map容器、自定义函数、针对string、时间格式的处理一些方法、json序列化与反与反序列化、类型转换。此外还有猜谜游戏、词汇查询、socks5代理实战项目
二、个人难点:
1.strconv转换问题
package main
import (
"fmt"
"strconv"
)
func main() {
f, _ := strconv.ParseFloat("1.234", 64)
fmt.Println(f) // 1.234
n, _ := strconv.ParseInt("111", 10, 64)
fmt.Println(n) // 111
n, _ = strconv.ParseInt("0x1000", 0, 64)
fmt.Println(n) // 4096
n2, _ := strconv.Atoi("123")
fmt.Println(n2) // 123
n2, err := strconv.Atoi("AAA")
fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
c,_:=strconv.ParseInt("123456",10,16)
fmt.Printf("c values %v\n",c)//c values 32767
}
string转int有两种方法,可以使用func Atoi(s string) (i int, err error)、func ParseInt(s string, base int, bitSize int) (i int64, err error)
base为进制,值为2~36,如果为0,则会根据字符串自动判断
前置为"0x"的是16进制;前置为"0"的是8进制;其余的为10进制
bitSize是返回的整数类型,0、8、16、32分别代表int、int8、int16、int32
c返回的是int16类型的值,int16类型的值的范围为-32768~32767,超过了返回类型的范围,会被截断
2.connect方法精读
func connect(reader *bufio.Reader, conn net.Conn) (err error) {
buf := make([]byte, 4)
_, err = io.ReadFull(reader, buf)
/*
hostSize, err := reader.ReadByte()
*/
port := binary.BigEndian.Uint16(buf[:2])
/*
...................
*/
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
go func() {
_, _ = io.Copy(dest, reader)
cancel()
}()
go func() {
_, _ = io.Copy(conn, dest)
cancel()
}()
<-ctx.Done()
return nil
}
*bufio.Reader读取过的字节,指针都会往后移动,自动指向下一个byte
binary.BigEndian.Uint16(buf[:2])方法 从buf中获得最后两个字节的编码,根据大端模式来将其翻译成十进制的端口
四、课后个人总结:
听完第一节课后,老师仅用了半小时就将一些重要且经常使用的语法讲解了一边,让我对Go语言有了简单的认识,然后又通过实践课,让我体会到了go语言在网络编程等方面的相对于java和c的优势,但是如果现在让我用go来刷算法题应该还是不能写出来的,还需要在一段时间内多写反复看例子,才能较为熟练的掌握语法,编写go。
五、引用参考: