后端与Go|青训营笔记

70 阅读2分钟

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

1:安装Go语言

  • 访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可

  • 如果无法访问上述网址,可以改为访问 studygolang.com/dl 下载安装

  • 如果访问 github 速度比较慢,建议配置 go mod proxy,参考 goproxy.cn/ 里面的描述配置,下载第三方依赖包的速度可以大大加快

2:配置Go语言开发的环境

可以选择安装 VS Code , 或者 Goland ,对于 VS Code,需要安装 Go 插件(如果是macos,个人建议安装Goland。VS Code,配置过于复杂)

3:学习内容:

3.1:什么是Go语言

1:高性能,高并发
2:语法简单、学习曲线平缓
3:丰富的标准库
4:完善的工具链
5:静态链接
6:快速编译
7:跨平台
8:垃圾回收

3.2:基础语法-Hello World

package main(入口包)

import "fmt"(输入,输出,格式化字符串)

func main() {
        fmt.Println("Hello Wrold")
}

Mac打开控制台
编译:go build+文件名
运行:go run+文件名(可直接go run)

3.3 变量

定义变量:
    1:自动推倒变量类型 var a = 
      指定类型    var a int = 
    2: a := 
    
常量:(可自动推倒变量类型,变量后面类型名可加可不加)
    const a =

3.4 if-else

    package main

    import "fmt"

    func main() {
            if 7%2 == 0 {
                    fmt.Println("单数")
            } else {
                    fmt.Println("双数")
            }

            if num := 9; num < 0 {
                    fmt.Println(num, "is negative")
            } else if num < 10 {
                    fmt.Println(num, "has 1 digit")
            } else {
                    fmt.Println(num, "has multiple digits")
            }

    }
    
    if后面无括号;
    大括号后面必须紧跟else/else if,也要换行。

3.5 For循环

    package main

    import "fmt"

    func main() {
            for j := 7; j < 9; j++ {
                    fmt.Println(j)
            }
    }
    
    for后面都可以省略
    可以用continue继续下一次循环
         break停止循环

3.6 Switch结构

    package main

    import "fmt"

    func main() {
            a := 3
            switch a {
            case 1:
                    fmt.Println("one")

            case 2:
                    fmt.Println("one")

            default:
                    fmt.Println("other")
            }
    }
    
    变量a可以有多个类型

3.7 数组

    package main

    import "fmt"

    func main() {
            var a [5]int
            a[4] = 100
            fmt.Println(a[4], len(a))

            b := [5]int{1, 2, 3, 4, 5}
            fmt.Println(b)

            var twoD [2][3]int
            for i := 0; i < 2; i++ {
                    for j := 0; j < 3; j++ {
                            twoD[i][j] = i + j
                    }
            }
            fmt.Println("2d: ", twoD)
    }

3.8 切片(可变长度的数组)

    package main

    import "fmt"

    func main() {
            s := make([]string, 3) //make 创建数组
            s[0] = "a"
            s[1] = "b"
            s[2] = "c"
            fmt.Println("get:", s[2])   //获取数组,c
            fmt.Println("len:", len(s)) //获取数组长度,3

            s = append(s, "d")
            s = append(s, "e", "f")
            fmt.Println(s)

            c := make([]string, len(s)) //指定长度
            copy(c, s)                  //将s数据拷贝给c
            fmt.Println(c)

            fmt.Println(s[2:5]) //[c d e]
            fmt.Println(s[:5])  //[a b c d e]
            fmt.Println(s[2:])  //[c d e f]

            good := []string{"g", "o", "o", "d"} //指定内容
            fmt.Println(good)                    //[g o o d]
    }

3.9 Map(无序输出)

    map是[散列表]的引用
    map的类型是map[k]v,也就是常说的k-v键值对。

    键的类型k,必须是能够通过==来进行比较的数据类型。
    第一种方式:
    ages := map[string]int{
        "jack":10,
        "tom":20
    }
    第二种方式:
    ages := make(map[string]int)
    ages["jack"] = 10
    ages["tom"] = 20
    
    删除和访问元素
    fmt.Println(ages["jack"]) // 10
    delete(ages,"jack")
    如果要访问的k不存在,则会返回v类型的零值,上例中返回0

3.10 range 快速遍历

    package main
    import "fmt"
    func main() {
        //这是我们使用range去求一个slice的和。使用数组跟这个很类似
        nums := []int{2, 3, 4}
        sum := 0
        for _, num := range nums {
            sum += num
        }
        fmt.Println("sum:", sum)
        //在数组上使用range将传入index和值两个变量。上面那个例子我们不需要使用该元素的序号,所以我们使用空白符"_"省略了。有时侯我们确实需要知道它的索引。
        for i, num := range nums {
            if num == 3 {
                fmt.Println("index:", i)
            }
        }
        //range也可以用在map的键值对上。
        kvs := map[string]string{"a": "apple", "b": "banana"}
        for k, v := range kvs {
            fmt.Printf("%s -> %s\n", k, v)
        }
        //range也可以用来枚举Unicode字符串。第一个参数是字符的索引,第二个是字符(Unicode的值)本身。
        for i, c := range "go" {
            fmt.Println(i, c)
        }
    }

3.11 函数

    func add(a int,b int)int{
        return a+b
    }

3.12 结构体

    type user struct{
    name string 
    password string
    }
    
    var d user
    结构体赋值
    a := user{name:"wang",password:"1024"}
    d.name//调用内容
    
    结构体方法

3.13 错误处理

3.14 JSON处理

3.15 数字解析strconv包

3.16 进程消息