登录
首页 >  Golang >  Go问答

在主函数中使用索引切片来调用 setGrade() 方法

来源:stackoverflow

时间:2024-02-16 14:30:25 421浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《在主函数中使用索引切片来调用 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
    }

终于介绍完啦!小伙伴们,这篇关于《在主函数中使用索引切片来调用 setGrade() 方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>