2017-01-22 1 views
-1

Как передать что-либо функции, чтобы она была модифицируемой и ее можно было увидеть в стеке вызовов? (другими словами, как передать указатель или ссылку?)Как передать по ссылке, чтобы я мог изменить ее в вызывающей функции?

package main 

import (
    "os/exec" 
    "fmt" 
) 

func process(names *[]string) { 
    fmt.Print("Pre process", names) 
    names[1] = "modified" 
} 

func main() {  
    names := []string{"leto", "paul", "teg"} 
    process(&names) 

    fmt.Print("Post process", names) 
} 

Error: 
invalid operation: names[0] (type *[]string does not support indexing) 
+5

Вы передаете указатель, но вам не нужен, чтобы изменить элемент в срезе: https://play.golang.org/p/vVSIhkcUUb – JimB

ответ

1

Вывод указателя имеет более высокий приоритет.
Вот код, который работает: https://play.golang.org/p/9Bcw_9Uvwl

package main 

import (
    "fmt" 
) 

func process(names *[]string) { 
    fmt.Println("Pre process", *names) 
    (*names)[1] = "modified" 
} 

func main() { 
    names := []string{"leto", "paul", "teg"} 
    process(&names) 
    fmt.Println("Post process", names) 
}