通常,當我看到在結構上聲明的字段時,它沒有指針或取消引用的指針符號 *,但是在幾個代碼片段中,我看到結構中的數據庫字段帶有指針取消引用,如下所示。為什么這是必要的?type DB struct { *bolt.DB}func Open(path string, mode os.FileMode) (*DB, error) { db, err := bolt.Open(path, mode) if err != nil { return nil, err } return &DB{db}, nil}
1 回答

楊魅力
TA貢獻1811條經驗 獲得超6個贊
或取消引用的指針符號 *
這是規范,對于復雜的非值類型,以避免復制。
請參閱Golang 書籍“指針”以獲取其中包含指針的結構示例。
return &DB{db}
這將返回一個指向新創建的DB
實例的指針。
正如“你能用 Go 在內存中“固定”一個對象嗎? 中提到的:
請注意,與 C 不同,返回局部變量的地址是完全可以的;與變量關聯的存儲在函數返回后仍然存在
從“指針/值細微之處”:
Go 也是按值傳遞,但它同時具有指針和值類型。指針指向某個內存位置,并允許您改變該位置的數據
如需更多信息,請參見“最佳實踐‘返回’結構進去嗎? ”
將指針用于大結構或必須更改的結構,否則使用值,因為通過指針意外更改內容會令人困惑。
- 1 回答
- 0 關注
- 239 瀏覽
添加回答
舉報
0/150
提交
取消