Go语言中slice的用法实例分析_Golang

本文实例讲述了Go语言中slice的用法。分享给大家供大家参考。具体如下:

slice 指向数组的值,并且同时包含了长度信息。
[]T 是一个元素类型为 T 的 slice。

复制代码 代码如下:

package main
import "fmt"
func main() {
 p := []int{2, 3, 5, 7, 11, 13}
 fmt.Println("p ==", p)
 for i := 0; i < len(p); i++ {
  fmt.Printf("p[%d] == %d\n",
   i, p[i])
 }
}

slice 可以重新切片,创建一个新的 slice 值指向相同的数组。

表达式

复制代码 代码如下:

s[lo:hi]

表示从 lo 到 hi-1 的 slice 元素,含有两端。 因此

复制代码 代码如下:

s[lo:lo]

是空的,而

复制代码 代码如下:

s[lo:lo+1]

有一个元素。

复制代码 代码如下:

package main
import "fmt"
func main() {
 p := []int{2, 3, 5, 7, 11, 13}
 fmt.Println("p ==", p)
 fmt.Println("p[1:4] ==", p[1:4])
 // missing low index implies 0
 fmt.Println("p[:3] ==", p[:3])
 // missing high index implies len(s)
 fmt.Println("p[4:] ==", p[4:])
}

slice 由函数 make 创建。这会分配一个零长度的数组并且返回一个 slice 指向这个数组:

复制代码 代码如下:

a := make([]int, 5)  // len(a)=5

       
slice 有长度和容量。slice 的容量是底层数组可以增长的最大长度。
为了指定容量,可传递第三个参数到 make:

复制代码 代码如下:

b := make([]int, 0, 5)
// len(b)=0, cap(b)=5

       
slice 可以通过“重新切片”来扩容(增长到容量上限):

复制代码 代码如下:

b = b[:cap(b)] // len(b)=5, cap(b)=5
b = b[1:]      // len(b)=4, cap(b)=4
package main
import "fmt"
func main() {
 a := make([]int, 5)
 printSlice("a", a)
 b := make([]int, 0, 5)
 printSlice("b", b)
 c := b[:2]
 printSlice("c", c)
 d := c[2:5]
 printSlice("d", d)
}
func printSlice(s string, x []int) {
 fmt.Printf("%s len=%d cap=%d %v\n",
  s, len(x), cap(x), x)
}

slice 的零值是 nil。

一个 nil 的 slice 的长度和容量是 0。

复制代码 代码如下:

package main
import "fmt"
func main() {
 var z []int
 fmt.Println(z, len(z), cap(z))
 if z == nil {
  fmt.Println("nil!")
 }
}

希望本文所述对大家的Go语言程序设计有所帮助。

时间: 2024-08-26 17:53:14

Go语言中slice的用法实例分析_Golang的相关文章

Go语言中的switch用法实例分析_Golang

本文实例讲述了Go语言中的switch用法.分享给大家供大家参考.具体分析如下: 这里你可能已经猜到 switch 可能的形式了. case 体会自动终止,除非用 fallthrough 语句作为结尾. 复制代码 代码如下: package main import (  "fmt"  "runtime" ) func main() {  fmt.Print("Go runs on ")  switch os := runtime.GOOS; os

Go语言中的range用法实例分析_Golang

本文实例讲述了Go语言中的range用法.分享给大家供大家参考.具体如下: for 循环的 range 格式可以对 slice 或者 map 进行迭代循环. 复制代码 代码如下: package main import "fmt" var pow = []int{1, 2, 4, 8, 16, 32, 64, 128} func main() {     for i, v := range pow {         fmt.Printf("2**%d = %d\n"

Go语言中Select语句用法实例_Golang

本文实例讲述了Go语言中Select语句用法.分享给大家供大家参考.具体分析如下: select 语句使得一个 goroutine 在多个通讯操作上等待. select 会阻塞,直到条件分支中的某个可以继续执行,这时就会执行那个条件分支.当多个都准备好的时候,会随机选择一个. 复制代码 代码如下: package main import "fmt" func fibonacci(c, quit chan int) {         x, y := 1, 1         for {

go语言中if语句用法实例_Golang

本文实例讲述了go语言中if语句用法.分享给大家供大家参考.具体分析如下: if 语句看起来跟 C 或者 Java 中的一样,除了没有了 ( ) 之外(甚至强制不能使用它们),而 { } 是必须的. 复制代码 代码如下: package main import (     "fmt"     "math" ) func sqrt(x float64) string {     if x < 0 {         return sqrt(-x) + "

C语言中qsort函数用法实例小结_C 语言

本文实例汇总了C语言中qsort函数的常见用法,非常具有实用价值.分享给大家供大家参考.具体分析如下: C语言中的qsort函数包含在<stdlib.h>的头文件里,本文中排序都是采用的从小到大排序. 一.对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 二.对char类型数

javaScript中slice函数用法实例分析

  本文实例讲述了javaScript中slice函数用法.分享给大家供大家参考.具体分析如下: javaScript 中的 slice 函数,对于array对象的slice函数,返回一个数组的一段.(仍为数组) arrayObj.slice(start, [end]) 参数: arrayObj,必选项.一个 Array 对象. start,必选项.arrayObj 中所指定的部分的开始元素是从零开始计算的下标. end,可选项.arrayObj 中所指定的部分的结束元素是从零开始计算的下标.

javaScript中slice函数用法实例分析_javascript技巧

本文实例讲述了javaScript中slice函数用法.分享给大家供大家参考.具体分析如下: javaScript 中的 slice 函数,对于array对象的slice函数,返回一个数组的一段.(仍为数组) arrayObj.slice(start, [end])  参数: arrayObj,必选项.一个 Array 对象.  start,必选项.arrayObj 中所指定的部分的开始元素是从零开始计算的下标.  end,可选项.arrayObj 中所指定的部分的结束元素是从零开始计算的下标.

Go语言map用法实例分析_Golang

本文实例讲述了Go语言map用法.分享给大家供大家参考.具体分析如下: map 映射键到值: map 在使用之前必须用 make 来创建(不是 new):一个值为 nil 的 map 是空的,并且不能赋值. 复制代码 代码如下: package main import "fmt" type Vertex struct {     Lat, Long float64 } var m map[string]Vertex func main() {     m = make(map[stri

Go语言map字典用法实例分析_Golang

本文实例讲述了Go语言map字典用法.分享给大家供大家参考.具体分析如下: 这段代码生成了青岛.济南.烟台三个城市拼音和汉字的对照字典,根据拼音可以输出汉字 复制代码 代码如下: package main import "fmt" func main(){  var pc map[string] string  pc = make(map[string] string)  pc["qingdao"] = "青岛"  pc["jinan&