1 回答
TA贡献1843条经验 获得超7个赞
到您 printresult时,它可能还没有被变异test。解决此问题的一种简单方法是通过使用两个通道,如下所示:
package main
import (
"encoding/json"
"fmt"
)
type JSONStr struct {
str []byte
err error
}
func (j JSONStr) String() string {
return fmt.Sprintf("str=%s, err=%s", j.str, j.err)
}
type person struct {
First string
Last string
Age int
}
func test(in <-chan bool, out chan<- *JSONStr) {
<-in
people := []person{
{First: "James", Last: "Bond", Age: 32},
{First: "Miss", Last: "Moneypenny", Age: 27},
}
fmt.Println(people)
b, err := json.Marshal(people)
out <- &JSONStr{str: b, err: err}
}
func main() {
in, out := make(chan bool), make(chan *JSONStr)
go test(in, out)
in <- true
result := <-out
fmt.Println(result)
}
编辑:从函数返回指针在 Go 中是安全且惯用的。从有效围棋:
请注意,与 C 不同,返回局部变量的地址是完全可以的;与变量关联的存储在函数返回后仍然存在。事实上,获取复合文字的地址会在每次评估时分配一个新实例
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报