走进Go语言 | 青训营笔记

95 阅读3分钟

💌 这是我参与「第五届青训营」伴学笔记创作活动的第 1 天。

🧡 本堂课重点内容

  • Go 语言学习背景介绍

  • Go 语言基础语法详细讲解

    1、配置开发环境

    2、基础语法

    3、标准库

  • Go 语言实战

    1、项目一:猜谜游戏

    2、项目二:命令行词典

    3、项目三:SOCKS5 代理

🧡 知识点介绍

💌 首先在本机安装 Go 开发环境,在 VS Code 上安装插件之后发现有些代码编译会报错,因此下载了 Goland 作为主要开发软件。在 Gitpod 中也可以在线编译学习:main.go - go-by-example - Gitpod Code - Insiders 。

🍠 变量:常见的变量类型包括字符串、整数、浮点型、布尔型等。

    var e float64
    f := float32(e)
    const s string = "constant"
    const h = 500000000

🍠 for/if:Go 语言只有for循环,条件不用小括号,结构必须要有大括号,哪怕结构中只有一行语句。

    for n := 0; n < 5; n++ {
        if n%2 == 0 {
            continue
        }
        fmt.Println(n)
    }

🍠 switch:只跑相应case中的代码,无需break自动跳出。

    a := 2
    switch a {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    case 4, 5:
        fmt.Println("four or five")
    default:
        fmt.Println("other")
    }

🍠 数组/切片:不同于固定长度的数组,切片可以使用append追加长度,也可以像数组一样取值。

    s := make([]string, 3)
    s[0] = "a"
    s[1] = "b"
    s[2] = "c"
    fmt.Println("get:", s[2])   // c
    s = append(s, "d")
    fmt.Println(s) // [a b c d]
    fmt.Println(s[2:])  // [c d]

🍠 map:哈希key-value。

🍠 range:可遍历切片或者map,返回索引和对应位置的值。

🍠 函数:Go 语言中函数可以返回多个值,一般是计算结果+错误信息。

🍠 指针:没什么特殊的,函数传参加*,调用加&。

🍠 结构体:用结构体的名称初始化结构体变量,构造的时候需要传入每个字段的初始值,也可以用键值对的方式指定初始值。

type user struct {
    name     string
    password string
}
func main() {
    a := user{name: "wang", password: "1024"}
    b := user{"wang", "1024"}
    c := user{name: "wang"}
    c.password = "1024"
    var d user
    d.name = "wang"
    d.password = "1024"
    fmt.Println(a, b, c, d)  // {wang 1024} {wang 1024} {wang 1024} {wang 1024}}

🍠 结构体方法:为结构体定义一些方法,在函数中调用结构体字段。

func (u user) checkPassword(password string) bool {
    return u.password == password
}
func (u *user) resetPassword(password string) {
    u.password = password
}

🍠 错误处理:函数有单独的返回值返回错误信息,若没有错误返回结果+nil,若有错误返回nil+error。

🍠 字符串操作:标准库strings中有很多字符串操作,count:字符串计数,index:查找某个字符串的位置,join:连接多个字符串,repeat:重复多个字符串,replace:替换字符串。 可以用%v打印任意类型变量。

🍠 其他标准库:time:处理时间,strconv:字符串和数字类型转换,os:进程信息。

🧡 实战练习

  • 项目一:猜谜游戏

💌 第一个例子是猜谜游戏。程序首先会生成一个介于1到100的随机整数,然后提示玩家进行猜测。玩家每次输入一个数字,程序会告诉玩家这个值是高于还是低于这个随机数,并且让玩家再次猜测。如果猜对了,就告诉玩家胜利并且退出程序。

🍠 需要先依赖time时间戳初始化随机数种子,不然每次出来的随机数都是一样的。

  • 项目二:命令行词典

💌 第二个例子是命令行词典。输入一个单词,调用第三方API查询单词,输出单词音标和注释。

🍠 直接去翻译网站右键查看浏览器的HTTP请求,右键copy as curl,并将JSON转换成Go语言。

🍠 将JSON序列化,生成request body进行解析。

  • 项目三:SOCKS5 代理

💌 第二个例子是SOCKS5 代理。写一个代理服务器。

🧡 课后总结

💌 本节课最难的还是后面两个实战部分,目前对很多更深入的语法还不够了解,努力读懂代码ing QAQ。