在Go语言中,将指针切片 []*TaskNode
转换为结构体切片 []TaskNode
可以通过遍历指针切片并解引用每个指针来实现。以下是一个高效的实现方式:
package main
import "fmt"
type TaskNode struct {
ID int
Name string
}
func main() {
// 示例指针切片
ptrSlice := []*TaskNode{
{ID: 1, Name: "Task 1"},
{ID: 2, Name: "Task 2"},
{ID: 3, Name: "Task 3"},
}
// 将指针切片转换为结构体切片
structSlice := make([]TaskNode, len(ptrSlice))
for i, ptr := range ptrSlice {
structSlice[i] = *ptr
}
// 打印结果
fmt.Println(structSlice)
}
make
函数创建一个与指针切片长度相同的结构体切片 structSlice
。ptrSlice
,并通过解引用每个指针 *ptr
来获取结构体值,并将其赋值给结构体切片 structSlice
的对应位置。这种方法在大多数情况下都是高效的,尤其是在处理较大的切片时。如果你需要进一步优化性能,可以考虑使用并发处理(如 goroutine)来并行化转换过程,但这通常只在切片非常大时才值得考虑。