亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 如何解決看似相同的類型?

Go 如何解決看似相同的類型?

Go
慕容708150 2023-03-15 15:03:02
我有一個包含 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.Scannerdriver.Valuer,因此它可以透明地與數據庫一起使用。



查看完整回答
反對 回復 2023-03-15
  • 1 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號