我有一块struct []student,我想用函数修改它的内容。

type student struct {
    name string
    age int
}

students := []student{
    {"Doraemon", 30},
    {"King Kong", 25},
}

因此,我决定将其作为指针传递。我可以知道如何将 slice 作为对函数的引用吗?
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
}

我一直在使用Go Playground,但是它会引起很多提示,例如
cannot range over s (type *[]student)
invalid operation: s[i] (type *[]student does not support indexing)
invalid indirect of s
...

如何精确地将slice of struct的引用传递给函数?如何在结构 slice 中范围?以及如何更改结构的值(在 slice 中修改相同的结构)?

在播放s *[]studentrange *ss []students *[]*student时,我总是会出错...很难正确设置...

对不起我的NEWBIE问题,仍在学习GO ...正在努力

最佳答案

slice 是通过引用传递的,因此,只要您要修改现有的 slice 内容,就不应显式传递指针。

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函数。另外,请记住


// add student
students = append(students, student{"Test", 33})

Go Playground

关于go - 如何将struct的 slice 作为函数的指针传递并对其进行修改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47875422/

10-14 18:51
查看更多