Passing pointer through channel in Go Lang

Viewed 26592

It is possible to pass pointer over channel in go lang? I need to pass struct, do changes in it and have theese changes in the same function from where struct was passed?

I tried

chan <- &data

and I got

# command-line-arguments .\o.go:130: cannot use &duom[i] (type *KaVartoti) as type KaVartoti in send

after this I tried

chan <- *data

and I got

# command-line-arguments .\o.go:130: invalid indirect of duom[i] (type KaVartoti)

So, it is possible to send pointer through channel in Go ir not?

2 Answers

Check Following Example:

package main

type weburl struct {
    url string
}
type responseweburl struct {
    contents, index string
}


var urlmap = make(map[string]weburl)
func callurl(ch chan *responseweburl, index, url string, wg *sync.WaitGroup) {
    defer wg.Done()
    response, err := http.Get(url)
    if err != nil {
        fmt.Printf("%s", err)
        os.Exit(1)
    } else {
        defer response.Body.Close()
        contents, err := ioutil.ReadAll(response.Body)
        if err != nil {
            fmt.Printf("%s", err)
            os.Exit(1)
        }
        var responsedata = responseweburl{string(contents), string(index)}
        ch <- responsedata
    }

}
func main(){
    urlmap["google"] = weburl{"http://www.google.com"}
    urlmap["facebook"] = weburl{"http://www.facebook.com"}
    urlmap["linkedin"] = weburl{"http://www.linkedin.com"}
    ch := make(chan *responseweburl)
    for index, _ := range urlmap {
        fmt.Println("call url " + index)
        go callurl(ch, index, urlmap[index].url, wg)
    }
}
Related