Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Go 切片


Go 切片

切片类似于数组,但功能更强大,更灵活。

与数组类似,切片也用于在单个变量中存储多个相同类型的值。

但是,与数组不同,切片的长度可以根据需要增长和缩减。

在 Go 中,有几种创建切片的方法

  • 使用 []数据类型{} 格式
  • 从数组创建切片
  • 使用 make() 函数

使用 []数据类型{} 创建切片

语法

切片名称 := []数据类型{}

声明切片的一种常见方法如下

myslice := []int{}

以上代码声明了一个长度为 0,容量为 0 的空切片。

要在声明时初始化切片,请使用以下代码

myslice := []int{1,2,3}

以上代码声明了一个长度为 3,容量也为 3 的整数切片。

在 Go 中,有两个函数可以用来返回切片的长度和容量

  • len() 函数 - 返回切片的长度(切片中的元素个数)
  • cap() 函数 - 返回切片的容量(切片可以增长或缩减到的元素个数)

示例

本示例演示了如何使用 []数据类型{} 格式创建切片

package main
import ("fmt")

func main() {
  myslice1 := []int{}
  fmt.Println(len(myslice1))
  fmt.Println(cap(myslice1))
  fmt.Println(myslice1)

  myslice2 := []string{"Go", "Slices", "Are", "Powerful"}
  fmt.Println(len(myslice2))
  fmt.Println(cap(myslice2))
  fmt.Println(myslice2)
}

结果

0
0
[]
4
4
[Go Slices Are Powerful]
动手试试 »

在上面的示例中,我们看到在第一个切片 (myslice1) 中,没有指定实际元素,因此切片的长度和容量都为零。在第二个切片 (myslice2) 中,指定了元素,长度和容量都等于指定的实际元素个数。



从数组创建切片

您可以通过切片数组来创建切片

语法

var myarray = [长度]数据类型{值} // 数组
myslice := myarray[开始:结束] // 从数组创建的切片

示例

本示例演示了如何从数组创建切片

package main
import ("fmt")

func main() {
  arr1 := [6]int{10, 11, 12, 13, 14,15}
  myslice := arr1[2:4]

  fmt.Printf("myslice = %v\n", myslice)
  fmt.Printf("length = %d\n", len(myslice))
  fmt.Printf("capacity = %d\n", cap(myslice))
}

结果

myslice = [12 13]
length = 2
capacity = 4
动手试试 »

在上面的示例中,myslice 是一个长度为 2 的切片。它来自 arr1,这是一个长度为 6 的数组。

切片从数组的第三个元素开始,该元素的值为 12(请记住数组索引从 0 开始。这意味着 [0] 是第一个元素,[1] 是第二个元素,等等)。切片可以增长到数组的末尾。这意味着切片的容量为 4。

如果 myslice 从元素 0 开始,切片的容量将为 6。


使用 make() 函数创建切片

make() 函数也可以用来创建切片。

语法

切片名称 := make([]类型, 长度, 容量)

注意:如果未定义 容量 参数,它将等于 长度

示例

本示例演示了如何使用 make() 函数创建切片

package main
import ("fmt")

func main() {
  myslice1 := make([]int, 5, 10)
  fmt.Printf("myslice1 = %v\n", myslice1)
  fmt.Printf("length = %d\n", len(myslice1))
  fmt.Printf("capacity = %d\n", cap(myslice1))

  // 省略容量
  myslice2 := make([]int, 5)
  fmt.Printf("myslice2 = %v\n", myslice2)
  fmt.Printf("length = %d\n", len(myslice2))
  fmt.Printf("capacity = %d\n", cap(myslice2))
}

结果

myslice1 = [0 0 0 0 0]
length = 5
capacity = 10
myslice2 = [0 0 0 0 0]
length = 5
capacity = 5
动手试试 »

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.