go语言基础(2) | 青训营

64 阅读2分钟

引言:

依然如昨天所说的,我本是一个Java的程序员,而go语言的语法中有很多与Java不同的,所以我就着重记录了与Java里面不同的内容

go语言语法

切片

如何理解切片呢?

  1. 首先是切片是数组的一个引用,它是引用类型的,而本身又是结构体,它的值是通过拷贝传递的
  2. 切片的长度是可以变化的,因此切片可以看作是一个可变的数组
  3. 切片的遍历与数组一样,也可以用内置函数len()来确定数量
  4. 另一个内置函数是cap,这个与len()的区别是,它求的是容量,而不是数量,。这一点就类似于Java的数组里面的求长度和求容量的区别。
  5. 定义方式上面,切片用 var 变量名 [] 类型的方式来定义,例如var str []string。这一点很重要,在我还没学切片之前看到切片的定义的时候,我只觉得好怪。

下面是一些切片的初始化的方式


package main

import "fmt"

func main() {
   //1.声明切片
   var s1 []int
   if s1 == nil {
      fmt.Println("是空")
   } else {
      fmt.Println("不是空")
   }
   // 2.:=
   s2 := []int{}
   // 3.make()
   var s3 []int = make([]int, 0)
   fmt.Println(s1, s2, s3)
   // 4.初始化赋值
   var s4 []int = make([]int, 0, 0)
   fmt.Println(s4)
   s5 := []int{1, 2, 3}
   fmt.Println(s5)
   // 5.从数组切片
   arr := [5]int{1, 2, 3, 4, 5}
   var s6 []int
   // 前包后不包
   s6 = arr[1:4]
   fmt.Println(s6)
}

常用方法:

内置函数append。通过该方法往切片的尾部添加数据,然后返回一个新的slice对象

package main

import (
    "fmt"
)

func main() {
    s1 := make([]int, 0, 5)
    s2 := append(s1, 1)
    fmt.Println(s1, s2)
}

输出的是[] [1]

当超出了cap限制之后,会自动扩充,然后生成一个对象。

切片的遍历,使用range