将切片作为带有原始切片修改的参数传递
Go 中按值传递变量限制了函数修改对函数作用域的影响。如果需要在函数外部修改切片,则直接将切片作为参数传递是不够的。
切片追加函数行为
追加函数分配一个新切片并复制现有切片中的元素,包括函数内进行的任何附加。但是,原始切片不受影响。
示例:累积切片上的递归
提供的代码片段最初尝试在作为参数传递的切片中累积验证消息到一个递归函数。但是,函数的修改不会反映在原始切片中。
解决方案
此问题的解决方案主要有两种:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage { //...Processing return messages }
惯用的 Go 方法
当函数需要修改原始切片时,将指针传递给切片是一种惯用的 Go 方法。正如返回切片方法所示,还可以通过返回修改后的切片来避免对累加器的需求。
性能注意事项
传递 a 的性能影响在大多数情况下,指针与返回切片的关系可以忽略不计。但是,具体行为可能会有所不同,具体取决于编译器优化和特定代码使用情况。
以上是如何修改在 Go 函数中作为参数传递的切片?的详细内容。更多信息请关注PHP中文网其他相关文章!