要将不可分配的切片的结构体切片作为函数参数传递,可以使用指针来传递结构体切片的地址。这样做可以避免在函数调用过程中对切片进行复制。
下面是一个示例代码:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
people := []Person{
{"Alice", 25},
{"Bob", 30},
}
// 将切片的地址传递给函数
printPeople(&people)
}
func printPeople(p *[]Person) {
// 通过指针访问切片,并遍历打印结构体字段
for _, person := range *p {
fmt.Println(person.Name, person.Age)
}
}
在上面的示例中,printPeople
函数接收一个指向[]Person
类型的指针作为参数。在main
函数中,我们使用&
操作符获取people
切片的地址,并将其传递给printPeople
函数。
在printPeople
函数中,我们使用*p
来访问传递的切片,并通过遍历打印每个人的姓名和年龄。
注意,由于传递的是指针,所以在printPeople
函数中对切片的任何修改都会反映在main
函数中的原始切片上。这允许我们在函数内部修改切片并且不需要返回新的切片。
这种方法可以避免复制大型切片的开销,并且可以在函数内部修改切片。