通常,当我看到在结构上声明的字段时,它没有指针或取消引用的指针符号 *,但是在几个代码片段中,我看到结构中的数据库字段带有指针取消引用,如下所示。为什么这是必要的?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 关注
- 215 浏览
添加回答
举报
0/150
提交
取消