【问题标题】:Print the contents of a slice of struct打印结构切片的内容
【发布时间】:2017-10-27 21:31:44
【问题描述】:

如果一开始就错了,我们深表歉意。我正在尝试学习 Golang,并且正在研究各种概念。我很确定我在这里混淆了一些东西......我正在尝试编写一个简单的程序来创建一个名为“person”的结构,它接受名字、姓氏和年龄。我希望用户能够指定他们将要输入到 struct person 切片中的人数,然后遍历输入的人数,获取输入并将其存储在 person 切片中。然后,我希望能够将其中一个“人”打印到终端,例如第 6 个(假设输入了很多人)。这是我目前所拥有的:

package main

import "fmt"

func main() {
    var people int

    type person struct {
        firstName string
        lastName  string
        age       int
    }

    listOfPeople := make([]person, 10)

    fmt.Println("Please enter the number of users you would like to   create:")
    fmt.Scan(&people)

    for i := 0; i < people; i++ {
        var a, b string
        var c int
        fmt.Println("Please enter a person's information: ")
        fmt.Print("First Name: ")
        fmt.Scan(&a)
        fmt.Print("Last Name: ")
        fmt.Scan(&b)
        fmt.Print("Age: ")
        fmt.Scan(&c)
        listOfPeople = append(listOfPeople, person{a, b, c})
    }
    //Print the contents of listOfPeople
}

代码注释“打印 listOfPeople 的内容是我希望能够打印“人”的地方。我尝试了几件事,但没有任何打印或编译失败。没有尝试从listOfPeople 代码编译并运行。我知道我在这里遗漏了一些东西。感谢任何帮助。我意识到这段代码可能没有优化,或者可能有更简单的方法,所以如果有请随时纠正我。 谢谢

【问题讨论】:

  • 显示您尝试过的内容。
  • 你是 listOfPeople := make([]person, 10),然后是 listOfPeople = append(listOfPeople, person{a, b, c})。如果你使用append,你应该使用make的3-arg形式将切片的容量设置为10,长度设置为0,否则输入0将有10个人,11个人如果您输入 1 等。这可能是您的问题,或者至少是其中一个问题。
  • 这结合@mkopriva 的回答让我能够解决这个问题。我将 listOfPeople := make([]person, 10) 更改为 listOfPeople := make([]person, 0, 0)

标签: go struct printing slice


【解决方案1】:

您要追加到已分配 10 个人的切片,因此您可能认为您追加的第一个人在第 0 个索引上,但实际上它在第 10 个。

https://play.golang.org/p/bPXsdWk9sa

你可能想要的是这样的

https://play.golang.org/p/kcfzJ4M0Wp

【讨论】:

  • 嘿,谢谢,这说明了我出错的地方,并帮助我解决了我的问题。我很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2021-07-12
  • 2015-11-25
  • 2015-02-21
相关资源
最近更新 更多