GO语言后端 | 青训营笔记

79 阅读3分钟

这是我参与[第五届青训营]伴学笔记创作活动的第1天。这节课主要在学习Go语言基础。

  1. 本节课重点内容 本节课主要介绍了三个方面的内容:第一部分是Go语言简介,第二部分是Go语言开发入门,包括开发环境的配置、基础语法和常用的一些标准库的介绍,第三部分是Go实战,主要包括三个实战项目。

  2. 详细知识点介绍

  • Go语言基础语法1 import "fmt"

    字符串可直接相加:"abc" + "def"

    变量声明:var a = "initial" || var b, c int = 1, 2 || var e float64 || f := float32(e) (其中,:=表示声明变量并赋值,而=单纯表示赋值)

    常量声明:const s string = "constant"

    if-else写法:if后面不需要加括号,if中的语句必须使用大括号括起来

    for循环:go语言中只有for循环,没有while循环;同样for后面的语句不加括号,可以使用continue、 break等关键词

    switch分支结构:switch后面的语句不加括号,并且分支内默认可以不加break可自动跳出分支。另外,go中的switch比c++中的功能更强大,可以使用多种数据类型,并且也可以switch后不跟条件,直接写在case中,比写多个if-else语句更清晰易懂。

    数组声明(大小固定):var a [5]int || b := [5]int{1, 2, 3, 4, 5} || var twoD [2][3]int

    切片(大小可以不固定):切片是可变长度的数组。s := make([]string, 3) || s[0] = "a" || s = append(s, "d") || s[2: 5]、s[:5]、s[2:] || slice的切片操作中不支持负数索引。

    map[key]value:map的声明m := make(map[string]int) || 从map中删除元素 delete(m, "one") || r, ok := m["unknow"]其中ok用于接收该元素是否存在于map中 || golang中的map是无序的,不会按照任一的顺序,是一个偏随机的顺序。

    使用range遍历数组和map:数组返回 索引-值,map返回 key-value,对于其中不需要的数值可以使用"_"来替代。

    函数:go语言的一大特点就是变量类型是后置的,func add(a int, b int) int{ return a + b};函数一般返回多个值:第一个值是真正的返回值,还会返回一个bool类型的ok表示值是否存在。

    指针:主要用于修改变量。函数体:func add2ptr(n *int) {*n += 2} 调用:add2ptr(&n)

    结构体:type user struct { name string /n password string} || var d user

    结构体方法:为结构体定义一些结构体方法,相当于类成员函数。

func checkpassword(u *user, password string) bool{  //普通函数
    return u.password == password
}

func (u *user) checkpassword(password string) bool{  // user结构体的类成员函数
    return u.password == password
}

a := user{"wang", "1024"}
a.checkpassword("2048")    // 结构体对象调用结构体方法
  • Go语言基础语法2

    错误处理: import "errors"

func findUser(users []user, name string) (v *user, err error) {
    // 正常情况下返回值
    if u.name == name{
        return &u, nil
    }
    // 异常返回值
    return nil, errors.New("Not found!")
}

// 函数调用
u, err := findUser([]user{{"wang", "1024"}}, "wang")

字符串操作: import "strings" )%YRQ~FFMH@6WPVF5VF2PGI.png

字符串格式化: 5EV98_H@T(GD7R)SR_K)AOS.png

JSON处理:import "encoding/json" 自定义类型中的变量使用大写字母开头,使用json.Marshal()对其进行序列化变成结果buf,再通过string(buf)获得其中的值;通过json.Unmarshal(buf, &b)将上述结果反序列化到b中。 1.png

时间处理:import "time" 2.png

字符串与数字间的转换:import "strconv" 1.png

进程信息: import "os" "os/exec" 1.png

  1. 实践练习例子

    总共涉及了三个例子的讲解:第一个是猜谜游戏,第二个是在线词典,主要介绍了抓包流程,第三个是Socks5代理服务器。其中,socks5代理服务器问题建立客户与服务器的连接主要有三步,一是协商阶段,二是请求阶段,三是数据传送阶段。 1.png

2.png

3.png

4.png