【第三十二篇】GO 使用切片的三种方式

119 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

一、切片的使用

方式一:

第一种方式:定义一个切片,然后让切片去引用一个已经创建好的数组,比如前面的案例就是这样的。

方式二:

第二种方式:通过make来创建切片

基本语法:

var 切片名 []type = make([],len,[cap])

参数说明:

type:就是数据类型

len:大小

cap:指定切片容量,可选

func make
func make(Type, size IntegerType) Type

内建函数make分配并初始化一个类型为切片、映射、或通道的对象。其第一个实参为类型,而非值。make的返回类型与其参数相同,而非指向它的指针。其具体结果取决于具体的类型:

  1. 切片:size指定了其长度。该切片的容量等于其长度。切片支持第二个整数实参可用来指定不同的容量; 它必须不小于其长度,因此 make([]int, 0, 10) 会分配一个长度为0,容量为10的切片。
  2. 映射:初始分配的创建取决于size,但产生的映射长度为0。size可以省略,这种情况下就会分配一个 小的起始大小。
  3. 通道:通道的缓存根据指定的缓存容量初始化。若 size为零或被省略,该信道即为无缓存的。
package main

import "fmt"

func main() {
	// 演示切片的使用 make , 对于切片,必须 make 使用
	var slice []float64 = make([]float64, 5, 10)
	slice[1] = 10
	slice[3] = 20

	fmt.Println(slice)
	fmt.Println("slice 的 size = ", len(slice))
	fmt.Println("slice 的 cap = ", cap(slice))

}

对上面代码的小结:

  1. 通过 make方式创建切片可以指定切片的大小和容量。
  2. 如果没有给切片的各个元素赋值,那么就会使用默认值 【int,float ==> 0、string ==>“”、bool ==> false 】
  3. 通过 make方式创建的切片对应的数组是由 make底层维护,对外不可见,即只能通过 slice方式去访问各个元素。

方式三:

定义一个切片,直接指定具体数组,使用原理类似 make的方式。

package main

import "fmt"

func main() {

	var slice []string = []string{"tom", "jack", "mary"}
	fmt.Println("slice = ", slice)
	fmt.Println("slice size = ", len(slice))
	fmt.Println("slice cap = ", cap(slice))

}


二、使用切片的区别分析:

方式一和方式二的区别:

  1. 方式一是直接引用数组,这个数组是事先存在的,程序员是可见的。
  2. 方式二是通过 make来创建切片,make也会创建一个数组,是由切片在底层进行维护,程序员是看不见的。make方式创建切片的示意图: