Postgresql 戈朗这条线到底是做什么的?为什么是指针?为什么选择0参数?
我在Go中关注PostgreSQL,它有以下行:Postgresql 戈朗这条线到底是做什么的?为什么是指针?为什么选择0参数?,postgresql,go,Postgresql,Go,我在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(er
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
确实是一个片段
例如:
更多信息:
为什么它是一片指针而不是一片书
如果没有更多的背景,这很难回答。使用指向Book的指针将允许您存储nil
值,这可能有用,具体取决于bks
的使用方式
您链接到的教程没有显示以任何方式使用的bks
,这些方式利用了值是指针这一事实。您可能可以毫无问题地将切片转换为类型[]Book
难道你不想要一片这样你就可以随意把书插入其中吗
make([]Type,initLength)
创建类型为Type
的值片。当initLength>0
时,片中预先填充了大量type
类型的零值实例。在这种情况下,作者不希望有任何零值,而是选择在从数据库接收到非零值时追加它们。因此,bks
确实是一个片段
例如:
更多信息:
为什么它是一片指针而不是一片书
如果没有更多的背景,这很难回答。使用指向Book的指针将允许您存储nil
值,这可能有用,具体取决于bks
的使用方式
您链接到的教程没有显示以任何方式使用的
bks
,这些方式利用了值是指针这一事实。您可能可以毫无问题地将切片转换为类型[]Book
。您还可以使用make(T,0,cap)
预初始化切片的容量-这在您知道将有多少个结果(或至少是最小数量)时非常有用。您还可以使用make预初始化切片的容量(T,0,cap)
-当您知道将有多少个结果(或至少是最小数量)时,这非常有用。