Goで関数の外にポインタを渡す
Problem
I used a = &ta for appending to array variable in some function, then I expected that change effected original variable which was pass to the function. You can check the behavior in noAppendD of sample code.
Solution
*a = ta is working.
Sample Code
package main import ( "fmt" ) func appendD(a *[]string) { fmt.Println("begin appendD===") ta := append(*a, "d") print(&ta); fmt.Println(" ta: ", ta) *a = ta # Important print(a); fmt.Println(" a: ", a) fmt.Println("end appendD===") } func noAppendD(a *[]string) { fmt.Println("begin noAppendD===") ta := append(*a, "d") print(&ta); fmt.Println(" ta: ", ta) a = &ta print(a); fmt.Println(" a: ", a) fmt.Println("end noAppendD===") } func main() { porga := &[]string{"a", "b", "c"} fmt.Println("porga: ", porga) print(porga); fmt.Println(" porga addr") noAppendD(porga) print(porga) fmt.Println(" After noAppendD, porga: ", porga) appendD(porga) print(porga) fmt.Println(" After appendD, porga: ", porga) } Output
porga: &[a b c] 0xc0000b0018 porga addr begin noAppendD=== 0xc0000b0048 ta: [a b c d] 0xc0000b0048 a: &[a b c d] end noAppendD=== 0xc0000b0018 After noAppendD, porga: &[a b c] begin appendD=== 0xc0000a4e68 ta: [a b c d] 0xc0000b0018 a: &[a b c d] end appendD=== 0xc0000b0018 After appendD, porga: &[a b c d] References
This post is licensed under CC BY 4.0 by the author.