我知道一切都是通过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 ×1