青训营学习笔记第二篇之GO语言入门指南(下) | 青训营

75 阅读3分钟

经过昨天第一遍笔记的洗礼,感觉今天的笔记也要注意观看感受了,不然和大佬们的笔记天差地别,成为不了大佬,也要向大佬看齐。

上一章笔记中我记录了Go语言的一些性质与前面的几个让我一看就知道的基础语法,这一章中我将介绍下面的基础语法,这些语法说实话我有的学过,有的根本没见过,初学者的我也有一定的学习难度,学习东西很多,我不可能每一个知识点都记录下来,下面我就按我的节奏进行记录。

基础知识

切片

  • 切片可以说是一个可以任意改变长度的数组,可以随时更改长度,用make生成切片,用append去追加元素
 s := make([]string, 3) //创建切片
 s[0] = "a"
 s[1] = "b"
 s[2] = "c"
 fmt.Println("get:", s[2])
 fmt.Println("len:", len(s))
  • 使用make创建生成切片
 s = append(s, "d")
 s = append(s, "e", "f")
 fmt.Println(s) //[a b c d e f]
 ​
 c := make([]string, len(s))
 copy(c, s)
 fmt.Println(c) //[a b c d e f]
  • 可以使用append追加元素,用copy复制元素

函数

  • 函数在众多语言中都是重中之重,go语言也不例外。
  • go语言中使用关键字func进行定义声明
  • go语言中的变量类型是后置的
  • go语言中支持返回多个值,且实际业务代码中几乎都是多个值
 package main
 ​
 import (
     "fmt"
 )
 ​
 func add(a int, b int) int {
     return a + b
 }
 ​
 func add2(a, b int) int {
     return a + b
 }
 ​
 func exits(m map[string]string, k string) (v string, ok bool) {
     v, ok = m[k]
     return v, ok
 }
 ​
 func main() {
     res := add(1, 2)
     fmt.Println(res)
 ​
     v, ok := exits(map[string]string{"a": "A"}, "a")
     fmt.Println(v, ok)
 }

指针

  • 与C/C++等老牌语言相比,go中的指针支持的操作非常有限
  • 主要用途就是对传入的参数进行修改,修改代码如下所示
 package main
 ​
 import "fmt"
 ​
 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
 }

结构体

  • 结构体就是一种带类型的字段的集合,如下就是定义了两种字段(name/passward)的结构体,并且可是使用[.结构体名字]进行读取和写入结构体中的内容
  • 结构体最前方是使用type关键字定义结构体类型,使用关键字struct进行初始化结构体变量
 type user struct {
     name     string
     password string
 }

错误处理

  • 在go语言中的习惯的使用一个单独的返回值来返回错误信息
  • 在函数的返回值中加一个error,就代表这个函数中可能返回错误
  • 通常使用if err != nil语句来进行错误处理判断,并且进行相关的处理
 package main
 ​
 import (
     "errors"
     "fmt"
 )
 ​
 type user struct {
     name     string
     password string
 }
 ​
 func findUser(users []user, name string) (v *user, err error) {
     for _, u := range users {
         if u.name == name {
             return &u, nil
         }
     }
     return nil, errors.New("not found")
 }
 ​
 func main() {
     u, err := findUser([]user{{"wang", "1024"}}, "wang")
     if err != nil {
         fmt.Println(err)
         return
     }
     fmt.Println(u.name)
     if u, err := findUser([]user{{"wang", "1024"}}, "li"); err != nil {
         fmt.Println(err)
         return
     } else {
         fmt.Println(u.name)
     }
 }

小结

第二天笔记小结,说实话不知道这个笔记什么时候能完善结束,视频中的老师每一部分大多数都是提了一些关键点,但是对于初学者来说并没有那么简单,反正对我来说,看完还是不会写,可能学习就是不能靠一个30分钟的视频就会敲了,需要后面的课程一起去学习,等我学习的东西足够多了,就能从量变到质变,真正学会吧。