相关疑难解决方法(0)

将slice作为函数参数传递,并修改原始slice

我知道一切都是通过Go中的值传递的,这意味着如果我给一个函数提供了一个分片,并且该函数使用内置append函数附加到该分片上,则原始分片将不会具有附加在该函数范围内的值。

例如:

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

func addToNumbs(nums []int) []int {
    nums = append(nums, 4)
    fmt.Println(nums) // []int{1, 2, 3, 4}
}

fmt.Println(nums) // []int{1, 2, 3}
Run Code Online (Sandbox Code Playgroud)

这给我带来了一个问题,因为我试图对累积的切片进行递归,基本上是一个reduce类型函数,除了reducer本身会调用它本身。

这是一个例子:

func Validate(obj Validatable) ([]ValidationMessage, error) {
    messages := make([]ValidationMessage, 0)

    if err := validate(obj, messages); err != nil {
        return messages, err
    }

    return messages, nil
}

func validate(obj Validatable, accumulator []ValidationMessage) error {
    // If something is true, recurse
    if something {
        if err := …
Run Code Online (Sandbox Code Playgroud)

go

5
推荐指数
3
解决办法
7000
查看次数

标签 统计

go ×1