在go lang中是否可以在通道上传递指针?我需要传递struct,在其中进行更改,并在传递struct的相同函数中进行这些更改?
我试过了
chan <- &data我得到了
# command-line-arguments .\o.go:130: cannot use &duom[i] (type *KaVartoti) as type KaVartoti in send在这之后我试过了
chan <- *data我得到了
# command-line-arguments .\o.go:130: invalid indirect of duom[i] (type KaVartoti)所以,在Go ir中通过通道发送指针是可能的,不是吗?
发布于 2013-12-31 06:18:09
你当然可以,例如:
package main
type Data struct {
i int
}
func func1(c chan *Data ) {
for {
var t *Data;
t = <-c //receive
t.i += 10 //increment
c <- t //send it back
}
}
func main() {
c := make(chan *Data)
t := Data{10}
go func1(c)
println(t.i)
c <- &t //send a pointer to our t
i := <-c //receive the result
println(i.i)
println(t.i)
}请参见Go Playground中的。
你得到的错误告诉你你的通道需要一个KaVartoti结构,你必须创建一个KaVartoti指针的通道(一个chan *KaVartoti)。
根据猜测,您的duom变量是一个数组/片,所以如果您想要发送一个指向其中一个元素的指针,您应该使用&duom[i]的第一种方法
发布于 2018-08-01 21:41:41
检查以下示例:
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)
}
}https://stackoverflow.com/questions/20848236
复制相似问题