我有一個包含 2 列的 PostgreSQL 數據庫:id (UUID)、company_url (varchar) 具有以下值:2fc35af4-5f5c-445e-86c5-01d93513b8be | https://test.com2bf31b75-d1f3-4a9c-a530-73b714816e9e | https://test2.com下面是使用 Go 訪問表的代碼(為簡單起見,省略了錯誤處理和憑據):package mainimport ( "fmt" "database/sql" "github.com/google/uuid" _ "github.com/lib/pq")func main() { connStr := "host= password= port= dbname= user=" db, _ := sql.Open("postgres", connStr) rows, _ := db.Query("SELECT * FROM companies;") for rows.Next() { // var id [16]byte // not ok var id uuid.UUID // ok var companyURL string rows.Scan(&id, &companyURL) fmt.Println(id, companyURL) }}還有一個用于UUID的 Go 包。在它的源代碼中,UUID 被簡單地定義為type UUID [16]byte在上面的代碼中, id是使用 鍵入的uuid.UUID,我試圖替換上面代碼中的類型聲明(用 注釋掉not ok),但它返回的不是正確的值,而是一個包含 16 個零的數組。uuid.UUID返回正確的 ID。uuid.UUID所以我的問題是,如果和[16]byte屬于同一類型,為什么會有這種行為?uuid 包中沒有二進制文件,也沒有init()函數,也沒有Scan()進行任何隱式更改。
1 回答

三國紛爭
TA貢獻1804條經驗 獲得超7個贊
嚴格來說,它們不是同一種類型。盡管它們具有相同的基礎類型。UUID
不同之處在于它實現了接口sql.Scanner
和driver.Valuer
,因此它可以透明地與數據庫一起使用。
- 1 回答
- 0 關注
- 94 瀏覽
添加回答
舉報
0/150
提交
取消