You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言程序中如何显示学生列表实际数据而非内存地址?

问题解决:打印Go自定义类型的实际数据而非内存地址

你的代码中用fmt.Println(student)打印的是StudentList类型的指针,Go语言默认会输出类型标识和内存地址。要显示实际存储的学生数据,有两种简单的修改方式:

方法1:直接打印内部学生列表切片

修改main函数的打印语句,直接访问StudentList的list字段:

func main() {
    student := new(StudentList)
    student.CreateStudent(24, "Asim", "AAAAAA")
    student.CreateStudent(24, "Naveed", "BBBBBB")
    fmt.Println(student.list) // 直接打印内部的list切片
}

运行后会输出切片中每个Student指针的默认结构化内容,示例输出:

&{24 Asim AAAAAA} &{24 Naveed BBBBBB}

方法2:为自定义类型实现String()方法

如果想要更美观、可读性更强的输出,可以为Student和StudentList实现fmt.Stringer接口(即定义String() string方法),fmt.Println会自动调用该方法生成格式化内容:

// 为Student类型实现String()方法
func (s *Student) String() string {
    return fmt.Sprintf("学号: %d, 姓名: %s, 地址: %s", s.rollnumber, s.name, s.address)
}

// 为StudentList类型实现String()方法
func (ls *StudentList) String() string {
    var result string
    for _, st := range ls.list {
        result += st.String() + "\n"
    }
    return result
}

此时保持main函数中的fmt.Println(student)不变,运行后会输出:

学号: 24, 姓名: Asim, 地址: AAAAAA
学号: 24, 姓名: Naveed, 地址: BBBBBB

另外注意:你的代码中两个学生的学号均为24,若这不是预期逻辑,记得根据实际需求调整学号赋值。

内容的提问来源于stack exchange,提问作者Mudassir Waheed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:05:39