使用 setGrade() 时 Main func 中的索引切片

Index slice within Main func when using setGrade()

package main

import (
    "fmt"
)

type Student struct {
    Name  string
    Grade []int
    Age   int
}

func (s *Student) setAge(age int) {
    s.Age = age
}
func (s *Student) setGrade(grade []int) {

    s.Grade = grade
}
func (s *Student) setName(name string) {
    s.Name = name
}
func main() {
    s := Student{"Klaus", []int{90, 75, 100}, 19}
    fmt.Println(s)
    s.setAge(20)
    fmt.Println(s)
    s.setGrade([]int{80})
    fmt.Println(s)

}

问题是当我在主函数中执行 setGrade 时,它的行为就像 new(grade) 并给我这个

{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80] 20}

这里,切片 s.setGrade([]int{10}) 给出了输出 {Klaus [10] 20} 我通过在

中使用索引想出了一个静态和愚蠢的想法
func (s *Student) setGrade(grade []int) {
    s.Grade[0] = grade
}

但我有一个问题,当成绩随特定索引发生变化时,我必须给出静态数字

要求输出:-

{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80 75 100] 20}

所需的解决方案:- 我有些想在 main func 中给出特定的索引想象 python 这样 s.setGrade(grade[0]) 我知道这在 GO 中行不通,但我想这样做! 或者让我知道还有其他方法吗!`

没有您要查找的内置方法(合并切片)。但是,您可以使用如下附加方法:

s.setGrade(append([]int{80}, s.Grade[1:]...))

如果您必须更新两个成绩整数,那么您可以这样做:

s.setGrade(append([]int{80,95}, s.Grade[2:]...))

问题:

您当前的 setGrade 函数接受整数片段 → setGrade(grade []int)

在函数内部,您正在将现有切片 Grade 设置为传递给 setGrade 函数的切片 → s.Grade = grade

这是用全新的切片替换 Grade。这不是你想做的。

解决方案

如果要更改切片中的特定值,您的函数应接受 2 个参数:

  1. 要更新的切片的索引
  2. 您要在该索引处设置的新值

您的函数应使用索引来识别应更改的值,然后将其设置为传入的值。像这样:

    func (s *Student) setGrade(index int, newValue int)  {
        s.Grade[index] = newValue
    }