修改结构体切片示例
通过 people []Person 修改会影响外部切片
func F0(people []Person) {
//下面这两种修改,都会影响外部
people[0].Name = "F0"
people[0] = Person{Name: "新添加的"}
}
func Test() {
people := []Person{
{Name: "初始"},
}
fmt.Println(people[0].Name)
F0(people)
fmt.Println(people[0].Name)
}
通过 people []*Person 修改会影响外部切片,暂时不明白这种写法的作用,用people []Person 不就得了。
func ModifySlice(people []*Person) {
// 修改切片中第一个人的名字
if len(people) > 0 {
people[0].Name = "Updated Name"
}
// 添加一个新人到切片
newPerson := &Person{Name: "New Person"}
people = append(people, newPerson)
// 注意:这里添加新人不会影响外部的切片,因为append可能会改变切片的引用
}
func Test() {
people := []*Person{{Name: "Alice"}, {Name: "Bob"}}
ModifySlice(people)
// 打印修改后的结果
for _, person := range people {
fmt.Println(person.Name)
}
// 输出:"Updated Name", "Bob"
}
如果想添加/删除元素,不返回新的切片,可以传递切片的引用
func ModifySlice(people *[]Person) {
// 添加一个新人到切片
newPerson := Person{Name: "New Person"}
*people = append(*people, newPerson)
}
func Test() {
people := &[]Person{{Name: "Alice"}, {Name: "Bob"}}
ModifySlice(people)
// 打印修改后的结果
for _, person := range *people {
fmt.Println(person.Name)
}
}