巩固Go语言基础(1) | 青训营笔记

180 阅读2分钟

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

Go语言优势

  • 高性能、高并发
  • 语法简单
  • 丰富的标准库
  • 跨平台
  • 快速编译
  • 垃圾回收

数组(Array)

  • [N]T,N表示数组的长度,T表示数组的元素类型,比如[10]int
  • 数据声明时未显式初始化的元素会隐式初始化为类型对应的0(如数字0、空字符串、false等)。
 package main
 ​
 import "fmt"
 ​
 func main() {
 ​
     var a [5]int
     a[4] = 100
     fmt.Println("get:", a[2])
     fmt.Println("len:", 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)
 }

切片(Slice)

  • 使用make初始化
 package main
 ​
 import "fmt"
 ​
 func main() {
 ​
     s := make([]string, 3)
     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) // [a b c d e f]
 ​
     c := make([]string, len(s))
     copy(c, s)
     fmt.Println(c) // [a b c d e f]
 ​
     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]
 }

Map

  • 可用delete删除元素
  • 也用make初始化
  • 不是并发安全的

指针

go语言指针不同与C或C++中的指针,支持的操作很有限。一个主要用途就是对于传入参数进行修改。这个函数试图把一个变量+2。但是单纯像上面这种写法其实是无效的。因为传入函数的参数实际上是一个拷贝,那也说这个+2,是对那个拷贝进行了+2, 并不起作用。如果我们需要起作用的话,那么我们需要把那个类型写成指针类型,那么为了类型匹配,调用的时候会加一个 & 符号。

结构体(Struct)

  • struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套其他结构体,也可以定义方法。
  • 封装性:字段首字母大写包外可访问、小写包外不可访问
  • 继承:用聚合实现继承(把父类放到子类里)
  • tag:定义特定格式中的形式或约束条件

结构体方法

在 Go里面可以为结构体去定义一些方法。checkPassword 的实现,从一个普通函数,改成了 结构体方法。 这样用户可以 像 a.checkPassword(“xx”) 这样去调用。具体的代码修改,就是把第一个参数,加上括号,写到函数名称前面。 在实现结构体的方法的时候也有两种写法,一种是带指针,一种是不带指针。带指针,就可以对这个结构体去做修改。如果不带指针,实际上操作的是一个拷贝,无法对结构体进行修改。

\