在结构中取消引用指向 DB 的指针

通常,当我看到在结构上声明的字段时,它没有指针或取消引用的指针符号 *,但是在几个代码片段中,我看到结构中的数据库字段带有指针取消引用,如下所示。为什么这是必要的?


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

}


冉冉说
浏览 216回答 1
1回答

杨魅力

或取消引用的指针符号 *这是规范,对于复杂的非值类型,以避免复制。请参阅Golang 书籍“指针”以获取其中包含指针的结构示例。return &DB{db}这将返回一个指向新创建的DB实例的指针。正如“你能用 Go 在内存中“固定”一个对象吗? 中提到的:请注意,与 C 不同,返回局部变量的地址是完全可以的;与变量关联的存储在函数返回后仍然存在从“指针/值细微之处”:Go 也是按值传递,但它同时具有指针和值类型。指针指向某个内存位置,并允许您改变该位置的数据如需更多信息,请参见“最佳实践‘返回’结构进去吗? ”将指针用于大结构或必须更改的结构,否则使用值,因为通过指针意外更改内容会令人困惑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go