为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
冉冉说 2021-08-10 16:57:17
通常,当我看到在结构上声明的字段时,它没有指针或取消引用的指针符号 *,但是在几个代码片段中,我看到结构中的数据库字段带有指针取消引用,如下所示。为什么这是必要的?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 也是按值传递,但它同时具有指针和值类型。指针指向某个内存位置,并允许您改变该位置的数据


如需更多信息,请参见“最佳实践‘返回’结构进去吗? ”

将指针用于大结构或必须更改的结构,否则使用值,因为通过指针意外更改内容会令人困惑。


查看完整回答
反对 回复 2021-08-10
  • 1 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信