Go 如何将结构的切片作为指向函数的指针传递并修改它?

Go 如何将结构的切片作为指向函数的指针传递并修改它?,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

我有一个struct
[]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})