取消引用结构中DB的指针

时间:2014-08-22 15:36:19

标签: go

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

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 个答案:

答案 0 :(得分:2)

  

或解除引用的指针符号*

对于复杂的非价值类型,这是常态,以避免复制 有关包含指针的struct的示例,请参阅Golang book "Pointers"

return &DB{db}

返回指向新创建的DB实例的指针 如" Can you “pin” an object in memory with Go?"中所述:

  

请注意,与C不同,返回局部变量的地址是完全可以的。与函数关联的存储在函数返回后仍然存活

来自" Pointer/Value Subtleties":

  

Go也是按值传递的,但它同时包含指针和值类型。指针指的是某个内存位置,允许您改变该位置的数据


有关详情,请参阅" Best practice “returning” structs in Go?"

  

使用大型结构或结构的指针,你必须改变,否则使用值,因为通过指针让事情突然改变是令人困惑的。