后端基础Day1 | 青训营笔记

363 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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。

五、引用参考:

blog.csdn.net/u013252047/…

zhuanlan.zhihu.com/p/548276361