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
相关产品推荐
相关产品推荐

