Go 如何将结构的切片作为指向函数的指针传递并修改它?
我有一个structGo 如何将结构的切片作为指向函数的指针传递并修改它?,go,Go,我有一个struct[]student的切片,我想用函数修改它的内容 type student struct { name string age int } students := []student{ {"Doraemon", 30}, {"King Kong", 25}, } 因此,我决定将其作为指针传递。我可以知道如何将切片作为引用传递给函数吗 func addAge (s *[]student) error { //this code has erro
[]student
的切片,我想用函数修改它的内容
type student struct {
name string
age int
}
students := []student{
{"Doraemon", 30},
{"King Kong", 25},
}
因此,我决定将其作为指针传递。我可以知道如何将切片作为引用传递给函数吗
func addAge (s *[]student) error { //this code has error
//everyone add 2 years old
for i, e := range *s {
s[i].age = s[i].age + 2
}
//make the first student much older
s[0].age = s[0].age + 5
return nil
}
我一直在玩,但它会引起很多抱怨,比如
cannot range over s (type *[]student)
invalid operation: s[i] (type *[]student does not support indexing)
invalid indirect of s
...
如何精确地将结构的切片的引用传递给函数?如何范围结构的切片?以及如何更改结构的值(修改切片中的相同结构)
我在玩s*[]student
,range*s
,s[]student
,s*[]student
时不断出错。。。很难让它正确
很抱歉我的新手问题,仍在学习GO。。。努力在围棋中,您可以通过值([]学生)或引用([]*学生)传递项目。当您想要对struct{}
的值进行操作时,应该将其传递给一个函数及其引用(指针)
所以你可以这样做:
type student struct {
name string
age int
}
func addTwoYearsToAll(students []*student){
for _, s := range students {
s.age += 2
}
}
这样,您就可以使用添加到切片时生成的相同项
还要看一看切片是通过引用传递的,因此只要修改现有切片内容,就不应该显式传递指针
package main
import (
"fmt"
)
type student struct {
name string
age int
}
func main() {
students := []student{
{"Doraemon", 30},
{"King Kong", 25},
}
err := addAge (students)
fmt.Println(students)
if err != nil {
fmt.Println("error")
}
}
func addAge (s []student) error {
for i, _ := range s {
s[i].age = 3
}
return nil
}
现在,对于您的addAdditinalStudent
函数,您应该实际使用该函数。另外,要记住
…,因为切片标头总是通过调用
append,您需要在调用后保存返回的切片。事实上
编译器不允许您在不保存结果的情况下调用append。
请向我们显示准确的代码和您的准确错误。当您有不同的、相互冲突的错误消息时,很难告诉您如何改进代码。此外,您不需要传递指向切片的指针--切片已通过引用传递。您必须阅读该内容。Slice是一个特殊的东西。这是无效的,s
是一个整数。如果s
是*学生
,则不能取消引用s.age
,因为age
不是指针。
// add student
students = append(students, student{"Test", 33})