Go 使用setGrade()时,在Main func中创建索引片

Go 使用setGrade()时,在Main func中创建索引片,go,struct,slice,Go,Struct,Slice,问题是,当我在主函数中执行setGrade时,它的行为就像new(grade)一样,并给了我这个 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(gr

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

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)

}
这里,slice
s.setGrade([]int{10})
给出了输出
{Klaus[10]20}
我想出了一个静态而愚蠢的想法,在

{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80] 20}
但是我有一个问题,当等级随具体指标变化时,我必须给出静态的数字

所需输出:-

func (s *Student) setGrade(grade []int) {
    s.Grade[0] = grade
}
所需解决方案:- 我想知道如何在main func imagine python中以这种方式给出特定的索引
s.setGrade(grade[0])
我知道这在GO中不起作用,但我想这样做!
或者让我知道还有其他方法吗`

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

{Klaus [90 75 100] 19}
{Klaus [90 75 100] 20}
{Klaus [80 75 100] 20}
如果您必须更新两个grade INT,那么您可以执行以下操作:

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

问题:

当前的setGrade函数接受一个整数切片→ <代码>设置等级(等级[]整数)

在函数内部,您正在将现有切片
Grade
设置为传递到setGrade函数的切片→ <代码>s.等级=等级

这将用一个全新的切片替换
等级
。这不是你想做的

解决方案

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

  • 要更新的切片的索引
  • 要在该索引处设置的新值
  • 函数应该使用索引来标识应该更改的值,然后将其设置为传入的值。像这样:

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

    我不知道你想做什么,请你澄清最后一部分。setGrade函数应该更改一个等级,还是向等级切片添加一个新等级?如果您只想更改切片中的第一个元素:
    s.Grade[0]=Grade
    是正确的。如果您想更改特定的等级,为什么不传递等级本身的索引?例如
    s.setGrate(80,0)
    这意味着将第0级改为80。@meshkati你能给我提供正确的代码吗?我可以确保你是正确的!我没有得到你的答案!很高兴帮助您:)
        func (s *Student) setGrade(index int, newValue int)  {
            s.Grade[index] = newValue
        }