• 欢迎访问 YZBTDIY!
  • 本站启用 TLS 加密!
  • 站点优化使用 WPJAM 的插件,万分感谢!

golang 切片

每日一GO admin 2周前 (06-06) 29次浏览 0个评论

code

package main

import (
    "fmt"
)

//切片是数组的视图,改变切片的值对应数组的值会被改变
//数组一般不使用指针,而使用切片
func updateSlice(s []int) {
    s[0] = 100
}

func printSlice() {
    arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}

    fmt.Println("arr[2:6] =", arr[2:6])
    fmt.Println("arr[:6] =", arr[:6])

    s1 := arr[2:]
    fmt.Println("s1=", s1)
    s2 := arr[:]
    fmt.Println("s2=", s2)

    fmt.Println("After updateSlice(s1)")
    updateSlice(s1)
    fmt.Println(s1)
    fmt.Println(arr)
    fmt.Println("After updateSlice(s2)")
    updateSlice(s2)
    fmt.Println(s2)
    fmt.Println(arr)

    //切片可以二次切片
    fmt.Println("Reslice")
    fmt.Println(s2)
    s2 = s2[:5]
    fmt.Println(s2)
    s2 = s2[2:]
    fmt.Println(s2)

    //slice 由 ptr、len、cap 组成
    //ptr 指向 slice 开头元素
    //len 是 slice 的长度,[] 取值范围
    //cap 数组从 slice ptr 开始到数组结束
    //slice 可以向后扩展,但是不能向前扩展
    //s[i] 向后扩展可以超过 len(s),但不能超过 cap(s)
    fmt.Println("Extending slice")
    arr[0], arr[2] = 0, 2
    s1 = arr[2:6]
    s2 = s1[3:5]
    fmt.Printf("s1=%v, len(s1)=%d, cap(s1)=%d\n", s1, len(s1), cap(s1))
    fmt.Printf("s2=%v, len(s2)=%d, cap(s2)=%d\n", s2, len(s2), cap(s2))
}

func main() {
    printSlice()
}

result

arr[2:6] = [2 3 4 5]
arr[:6] = [0 1 2 3 4 5]
s1= [2 3 4 5 6 7]
s2= [0 1 2 3 4 5 6 7]
After updateSlice(s1)
[100 3 4 5 6 7]
[0 1 100 3 4 5 6 7]
After updateSlice(s2)
[100 1 100 3 4 5 6 7]
[100 1 100 3 4 5 6 7]
Reslice
[100 1 100 3 4 5 6 7]
[100 1 100 3 4]
[100 3 4]
Extending slice
s1=[2 3 4 5], len(s1)=4, cap(s1)=6
s2=[5 6], len(s2)=2, cap(s2)=3

YZBTDIY , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:golang 切片
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址