【发布时间】: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)