如何通过引用返回切片?

huangapple go评论71阅读模式
英文:

How to return slice by reference?

问题

返回的引用切片是空的:

package main

import "fmt"

func GetItems(items *[]string) {
    list := make([]string, 0)
    list = append(list, "ok")
    items = &list
}

func main() {
    var items []string
    GetItems(&items)
    fmt.Print(len(items)) // 预期结果为1,但实际得到的是0
}

如何通过引用从函数中返回切片?

英文:

The returned slice by reference is empty:

package main

import "fmt"

func GetItems(items *[]string) {
    list := make([]string, 0)
    list = append(list, "ok")
    items = &list
}

func main() {
    var items []string
    GetItems(&items)
    fmt.Print(len(items)) // expect 1 here, but got 0
}

How to return the slice from the function by reference?

答案1

得分: 5

通过将 items 赋值,你改变了 items 指向的位置,而不是 items 指向的值。要改变后者,而不是使用 items = &list,你应该写成 *items = list

英文:

By assigning to items, you alter where items points, not the value items points to. To do the latter, instead of items = &list write *items = list.

huangapple
  • 本文由 发表于 2015年3月29日 00:54:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/29319883.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定