List 如何在列表中存储后对结构实例调用func
我尝试过搜索,但找不到如何执行此操作。 我想获取我的结构的实例并将它们存储在一个列表中,然后遍历它们并对它们调用函数List 如何在列表中存储后对结构实例调用func,list,go,struct,func,List,Go,Struct,Func,我尝试过搜索,但找不到如何执行此操作。 我想获取我的结构的实例并将它们存储在一个列表中,然后遍历它们并对它们调用函数 type comicBook struct { Title string Writer string Artist string Publisher string Year int Pages int Grade float32 } func (c comicBook) Prin
type comicBook struct {
Title string
Writer string
Artist string
Publisher string
Year int
Pages int
Grade float32
}
func (c comicBook) PrintInfo() {
fmt.Println(c.Title, "written by", c.Writer, "drawn by", c.Artist, "published by", c.Publisher, "in", c.Year)
fmt.Println("Pages:", c.Pages)
fmt.Println("Grade:", c.Grade)
}
这个很好用
c := comicBook.NewComicBook(
"Mr. GoToSleep",
"Tracey Hatchet",
"Jewel Tampson",
"DizzyBooks Publishing Inc.",
1997,
14,
6.5,
)
c.PrintInfo()
c2 := comicBook.NewComicBook("Epic Vol. 1",
"Ryan N. Shawn",
"Phoebe Paperclips",
"DizzyBooks Publishing Inc.",
2013, 160, 9.0)
c2.PrintInfo()
将它们存储在列表中并不需要
comicBookList := list.New()
comicBookList.PushBack(c)
comicBookList.PushBack(c2)
fmt.Println("\nNow from a list!\n")
for comic := comicBookList.Front(); comic != nil; comic = comic.Next() {
comic.Value.PrintInfo()
}
对于comic.Value.PrintInfo未定义类型接口{}是没有方法的接口不是泛型的,对接口{}值进行操作。要从中获取键入的值,必须使用:
试穿一下
但是你一开始就不应该使用
相反,请使用一个。在编译器的帮助下,切片是通用的:
var books []comicBook
要向切片添加值,请使用内置的:
要在切片上迭代,请使用“范围”:
请在上尝试。不是泛型的,并且对接口{}值进行操作。要从中获取键入的值,必须使用:
试穿一下
但是你一开始就不应该使用
相反,请使用一个。在编译器的帮助下,切片是通用的:
var books []comicBook
要向切片添加值,请使用内置的:
要在切片上迭代,请使用“范围”:
试一下。icza的答案是最好的方法。也就是说,您可以使用类型断言
for comic := comicBookList.Front(); comic != nil; comic = comic.Next() {
realComic, ok := comic.Value.(comicBook)
if !ok {
panic("this would error anyway, but good for visibility")
}
realComic.PrintInfo()
}
@icza的答案是最好的方法。也就是说,您可以使用类型断言
for comic := comicBookList.Front(); comic != nil; comic = comic.Next() {
realComic, ok := comic.Value.(comicBook)
if !ok {
panic("this would error anyway, but good for visibility")
}
realComic.PrintInfo()
}
您可能想查看此帖子。您使用的列表类型是什么?你为什么要用它而不是仅仅用一个切片呢?@Adrian我只是在学习Go,来自C。我原以为List是一个基本的容器,但我还没有意识到切片。icza给出的答案澄清了我的问题。我建议从官方文件开始。以包含所有语言基础知识(包括切片)的示例为例。同时阅读,它涵盖了如何思考和编写好的Go代码的基础知识。你可能想看看这篇文章。你使用的是什么列表类型?你为什么要用它而不是仅仅用一个切片呢?@Adrian我只是在学习Go,来自C。我原以为List是一个基本的容器,但我还没有意识到切片。icza给出的答案澄清了我的问题。我建议从官方文件开始。以包含所有语言基础知识(包括切片)的示例为例。同时阅读,它涵盖了如何思考和编写好的Go代码的基础知识。谢谢。这比列表方法更有意义。实际上,我在实现这一点时遇到了问题。comicBook结构位于另一个文件中,只是为了尝试通过管理导入来工作,并且由于其小写,因此不会导出。我尝试将其大写,并执行var comicBookList[]comicBook.comicBook,但下一行出现错误,即comicBook.comicBook没有字段或方法append。@galamdring append不是一个方法,它是一个函数。请再次检查您是如何使用它的:books=appendbooks,b谢谢。这比列表方法更有意义。实际上,我在实现这一点时遇到了问题。comicBook结构位于另一个文件中,只是为了尝试通过管理导入来工作,并且由于其小写,因此不会导出。我尝试将其大写,并执行var comicBookList[]comicBook.comicBook,但下一行出现错误,即comicBook.comicBook没有字段或方法append。@galamdring append不是一个方法,它是一个函数。请再次检查您是如何使用它的:books=appendbooks,b
for comic := comicBookList.Front(); comic != nil; comic = comic.Next() {
realComic, ok := comic.Value.(comicBook)
if !ok {
panic("this would error anyway, but good for visibility")
}
realComic.PrintInfo()
}