相关疑难解决方法(0)

为什么Go中有数组?

我理解Go中数组和切片之间的区别.但我不明白的是为什么有数组是有帮助的.为什么数组类型定义指定长度和元素类型有帮助?为什么我们使用的每个"数组"都不能成为切片?

arrays go slice

21
推荐指数
1
解决办法
1992
查看次数

切片作为参数传递的切片指针

我有以下代码:

func main() {
    var buf []byte{1, 2, 3, 4, 5}
    buf = buf[2:]
    fmt.Println(buf)
    panic(1)
}
Run Code Online (Sandbox Code Playgroud)

但是我想将指向buf字节切片的指针传递给另一个函数,并将其切片到那里,所以类似于:

func main() {
    var buf []byte{1, 2, 3, 4, 5}
    sliceArr(&buf, 2)
    fmt.Println(buf)
    panic(1)
}

func sliceArr(buf *[]byte, i int) {
    *buf = *buf[i:]
}
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误,我不能在函数的参数中使用type []byte作为类型,并且我不能切片类型.怎么了?默认情况下,切片是否通过引用传递?我尝试在没有指针的情况下执行此操作,但它不起作用 - 正在复制数组.我怎样才能做到这一点?*[]bytesliceArr()*[]byte

pointers go slice

3
推荐指数
1
解决办法
5415
查看次数

如何检查切片头?

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

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
查看次数

标签 统计

go ×3

slice ×3

arrays ×1

pointers ×1