【Go 语言上手-基础语言】丨青训营笔记

118 阅读1分钟

第一节课【Go 语言上手-基础语言】

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

基础语法

var声明变量
var  (变量名) (变量类型)
var a,b int //多个相同类型变量,可只在最后写一个类型
快速声明赋值

(变量名) := (某类型的值,如"school",true,98,函数返回值)

变量会自动检测类型并赋值

for循环

Go只有for一种循环,但它有多种形式

形式一:

for i := 0; i < count; i++{}
for ; (条件); {}

形式二:(简化去除了两边的分号,相当于while循环)

for (条件) {}

形式三:(类似java的迭代循环)

for a := range(数据集) {}
switch语句

Go的switch语句有两种形式

形式一:以a值逐个匹配case值,匹配成功则执行其的效果,匹配失败则执行default

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")
    }

形式二:switch后不跟随变量,在case中填写表达式,表达式为真则执行效果,类似于if-else

t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }

Go的switch-case语句不会在匹配到相应的case并执行结束后,顺序执行之后的case,所以也不需要在每个case的最后添加break语句

数组
var (变量名) [容量](数据类型)
var a [5]int
b := [5]int{1, 2, 3, 4, 5}
切片

相当于变长数组

s := make([]string, 3) //初始长度3,如果append时不够会自动扩容 make方法为其分配内存,类似new
map

即哈希表,在其中存储的数据没有顺序

m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m)           // map[one:1 two:2]
fmt.Println(len(m))      // 2
fmt.Println(m["one"])    // 1
fmt.Println(m["unknow"]) // 0(不存在相应的key则输出int的默认值,为0)
​
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 falsedelete(m, "one")
指针

Go的指针基本上都作为函数的传入参数来使用,目的是为了在函数中直接更改目标的值,而不是只更改目标的copy值

func add2(n int) {
    n += 2
}
​
func add2ptr(n *int) {
    *n += 2
}
​
func main() {
    n := 5
    add2(n)
    fmt.Println(n) // 5
    add2ptr(&n)    //传入指针需要在变量左边加上 "&" 符号
    fmt.Println(n) // 7
}
​
函数
声明
func [名 结构体] (方法名)([名 类型]) 返回值类型 {}
func (u user) checkPassword(password string) bool {
    return u.password == password
}
返回值

Go的函数可以有不止一个返回值,返回时直接可以直接用 := 来接收返回值,不需要的返回值可以以 _ 接收

如 _, err := xxxx()

许多Go函数都具有不止一个返回值,其中一个就是error(错误信息),当没有错误时,err会返回nil

实战项目

命令行字典

要实现命令行字典,需要借用外部网站的翻译功能,首先在外部网站通过F12开发者模式抓取包含翻译目标的、请求方法为 "POST" 的请求包(如彩云小译中为 "dict" 包)

然后右键包,复制,复制为cURL(bash),再在工具网站(curlconverter.com/#go)上粘贴,使其成为一段与其请求功能相同的代码

在包的 "预览" 中复制相应json值,在另一工具网站(oktools.net/json2go)上粘贴,使其变为我们用来接收请求网站返回数据的相应结构体

然后修改代码,修改传入的data字段,使我们能输入任何我们想查询的单词,修改输出的方法,使其有选择的输出我们想要的字段