[英]What does this line of Golang do exactly? Why pointers? Why the 0 param?
我在Go中的PostgreSQL上关注了本教程 ,它包含以下行:
bks := make([]*Book, 0)
这是更大的代码块的一部分:
bks := make([]*Book, 0)
for rows.Next() {
bk := new(Book)
err := rows.Scan(&bk.isbn, &bk.title, &bk.author, &bk.price)
if err != nil {
log.Fatal(err)
}
bks = append(bks, bk)
}
作者为什么在make
传递0? 我知道那是长度,但是为什么是0长度? 为什么它是指针数组而不是书本数组? 您是否想要切片以便可以将书本任意插入其中?
您是否想要切片以便可以将书本任意插入其中?
make([]Type, initLength)
创建类型Type
的值的一部分。 当initLength > 0
该切片将被大量Type
的零值实例预填充。 在这种情况下,作者不希望有任何零值,而是选择附加非零值,因为它们是从数据库收到的。 因此, bks
确实是片中的内容。
示例: http : //play.golang.org/p/g0dALT-sLn
详细信息: http : //blog.golang.org/go-slices-usage-and-internals
为什么它的指针一片 ,而不是书的片段 ?
没有更多上下文,这很难回答。 使用指向Book的指针将允许您存储nil
值,这取决于bks
的使用方式可能很有用。
您链接到的教程没有显示以任何方式利用bks
来利用值是指针这一事实。 您可能可以将切片转换为[]Book
类型,而不会出现任何问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.