相关疑难解决方法(0)

正确初始化空切片的方法

要声明具有非固定大小的空切片,最好是:

mySlice1 := make([]int, 0)
Run Code Online (Sandbox Code Playgroud)

要么:

mySlice2 := []int{}
Run Code Online (Sandbox Code Playgroud)

只是想知道哪一个是正确的方法.

arrays go slice

184
推荐指数
4
解决办法
17万
查看次数

如何在Go中获取切片的基础数组?

假设我有以下长度为3的整数:

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

然后我抓住前两个项目的切片

numSlice := nums[:2]

cap在两种情况下调用numSlice和nums都会产生3,并len分别产生2和3.

如果我然后附加到slice(numSlice = append(numSlice, 10)),nums则现在是底层数组()[1 2 10].cap两者都保持为3,因为切片的底层数组是相同的,而切片的len现在是3.

但是,如果我再次附加到该切片(numSlice = append(numSlice, 20)),则切片的基础数组必须更改 - 我们看到cap现在已经为numSlice加倍并且len现在为4.

对于过于简单的解释感到抱歉,只是自己走过去,但有人可以向我解释底层阵列发生了什么,以及如何获得对新阵列的引用?

arrays go slice

15
推荐指数
2
解决办法
3991
查看次数

如何检查切片头?

这是从切片略微修改的代码

var buffer [256] byte

func SubtractOneFromLength(slice []byte) []byte {
    slice = slice[0 : len(slice)-1]
    return slice
}

func main() {
    slice := buffer[10:20]
    fmt.Println("Before: len(slice) =", len(slice))
    newSlice := SubtractOneFromLength(slice)
    fmt.Println("After:  len(slice) =", len(slice))
    fmt.Println("After:  len(newSlice) =", len(newSlice))
    newSlice2 := SubtractOneFromLength(newSlice)
    fmt.Println("After:  len(newSlice2) =", len(newSlice2))
}
Run Code Online (Sandbox Code Playgroud)

它表示slice参数的内容可以通过函数修改,但其标题不能.如何在屏幕上打印newSlice2的标题?

go slice

2
推荐指数
1
解决办法
295
查看次数

切片文字和 make slice 之间的行为有区别吗?

注意: 声明切片还是制作切片?没有回答我的问题,因为它比较切片声明与 make slice,而我的问题比较切片文字与 make slice。这个问题有一个简单的答案,因为裸切片声明创建了一个 nil 切片,但是,如果您仔细阅读下面的问题,我根本不会创建一个 nil 切片。

有两种方法可以创建切片并附加到它。Example 1我下面的代码显示了 as和两种方式Example 2

package main

import (
    "fmt"
)

func main() {
    // Example 1
    a := []int{}
    fmt.Printf("len(a): %d; cap(a): %d; a: %v\n", len(a), cap(a), a)
    a = append(a, 10, 20, 30, 40, 50)
    fmt.Printf("len(a): %d; cap(a): %d; a: %v\n", len(a), cap(a), a)
    
    // Example 2
    b := make([]int, 0)
    fmt.Printf("len(b): %d; cap(b): %d; b: %v\n", len(b), cap(b), b)
    b = append(b, 10, …
Run Code Online (Sandbox Code Playgroud)

go slice

0
推荐指数
1
解决办法
1697
查看次数

标签 统计

go ×4

slice ×4

arrays ×2