我在Go列表中有一些值。我只需要能够打印它们,但是每次尝试时都会告诉我test.FirstName未定义(类型* list.Element没有字段或方法FirstName)。
那么我如何适当地访问列表的成员?这是给我添麻烦的最后两行。
package main
import (
"bufio"
"fmt"
"log"
"strconv"
"strings"
"os"
"container/list"
)
type Student struct {
FirstName string
LastName string
testScore int
homeworkScore int
}
func main() {
fmt.Println("What is the name of your file?\n")
var filename string
fmt.Scan(&filename)
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
//var numLineCount int = 0
var gradeCount = 0
var student Student
var studentList list.List
var studentCount int = 1
for scanner.Scan() {
line := scanner.Text()
fields := strings.Fields(line)
student.FirstName = fields[0]
student.LastName = fields[1]
scanner.Scan()
line2 := scanner.Text()
sum := 0
gradeCount = 0
for _, field := range strings.Fields(line2) {
n, err := strconv.Atoi(field)
if err != nil {
log.Fatal(err)
}
gradeCount++
sum += n
}
student.testScore = sum/gradeCount
gradeCount = 0
scanner.Scan()
line3 := scanner.Text()
sum2 := 0
for _, field := range strings.Fields(line3) {
n, err := strconv.Atoi(field)
if err != nil {
log.Fatal(err)
}
gradeCount++
sum2 += n
}
student.homeworkScore = sum2/gradeCount
studentList.PushBack(studentCount)
studentCount++
fmt.Println("First:", student.FirstName, "Last:", student.LastName, "Test Avg:", student.testScore, "Homework Avg:", student.homeworkScore)
}
test:=studentList.Front()
fmt.Println(test.FirstName)
}
更新:所以我发现我不能在println部分中使用test.FirstName,仅Println(test)可以工作并打印所有内容。但我仍然需要能够访问列表的每个元素。我该怎么办?
答案 0 :(得分:2)
似乎您没有方便的对象类型。您可以使用断言来获取实际的对象类型,如下所示:
test:=studentList.Front()
if actualStudent, ok := test.Value.(Student); ok {
fmt.Println(actualStudent.FirstName)
}
如果没有帮助,请对您遇到的问题发表评论,我们非常乐意为您提供帮助。
答案 1 :(得分:1)
快速阅读代码。您正在将studentCount
推入列表,该列表根据您的声明是一个int变量。我认为您正在尝试实现的是推送student
结构。错字?
P.S。如果这不是家庭作业或有特定要求的东西,请改用切片。始终使用切片。