]
возвращающиеся адреса вместо значений для ссылок на диапазон
рассмотрим ситуацию, когда оператор диапазона возвращает копию значения вместо исходного адреса Полем Это может привести к неожиданному поведению, как видно в следующем коде Go:
import "fmt" type MyType struct { field string } func main() { var array [10]MyType for _, e := range array { e.field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
В этом примере цель состоит в том, чтобы изменить свойство «поле» каждого элемента в массиве. Однако, поскольку оператор диапазона возвращает копию значения, изменения вносятся в локальную копию и не влияют на исходный массив. В результате выход показывает все свойства «поля» как имеющие значение по умолчанию.
для решения этой проблемы вы не можете вернуть адрес элемента в цикле диапазона. Вместо этого вы должны выполнить через массив, используя индекс, как показано ниже:
func main() { var array [10]MyType for idx, _ := range array { array[idx].field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
, используя индекс вместо значения в цикле FO, вы убедитесь, что изменения, внесенные в свойство «поле», отражены в исходном массиве.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3