一只名叫tom的猫
语言规范允许在具有相同字段(忽略标签)的结构类型之间进行转换。因此,创建另一个切片(类型为[]bar),并使用一个简单的循环来填充它,将每个个体转换foo为bar:foos := []foo{ {1, "Hello"}, {2, "Bye"},}bars := make([]bar, len(foos))for i, f := range foos { bars[i] = bar(f)}fmt.Println(foos, bars)在Go Playground上尝试一下。请注意,由于我们正在分配结构值,所以所有字段都会被复制。如果您不想复制整个结构,可以使用指针:foos := []*foo{ {1, "Hello"}, {2, "Bye"},}bars := make([]*bar, len(foos))for i, f := range foos { bars[i] = (*bar)(f)}fmt.Println(foos, bars)for i := range foos { fmt.Println(foos[i], bars[i])}这将输出(在Go Playground上尝试):[0x40a0e0 0x40a0f0] [0x40a0e0 0x40a0f0]
&{1 Hello} &{1 Hello}
&{2 Bye} &{2 Bye}foos从输出中可以看出,和切片中的指针bars是相同的,但第一个包含类型 的值*foo,而后者包含类型 的值*bar。