retornando endereços em vez de valores para referências de intervalo
Considere a situação em que uma declaração de intervalo retorna uma cópia de um valor em vez do endereço original . Isso pode levar a um comportamento inesperado, como visto no seguinte código 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("--") } }
Neste exemplo, a intenção é modificar a propriedade "Campo" de cada elemento na matriz. No entanto, como a instrução RANGE retorna uma cópia do valor, as alterações são feitas em uma cópia local e não afetam a matriz original. Como resultado, a saída mostra todas as propriedades de "campo" como tendo o valor padrão. Em vez disso, você deve iterar através da matriz usando o índice, como mostrado abaixo:
func main () { Var Array [10] MyType para idx, _: = range matriz { Array [idx] .field = "foo" } Para _, e: = Array Range { 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("--") } }
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3