有没有办法从 Go 中的结构访问自定义构造函数中的内部参数?
Is there a way to access an internal parameter in a custom constructor from struct in Go?
我想访问自定义构造函数中的内部 属性,在我的例子中,它是来自超类的 属性,如下所示:
type BaseRepository struct {
database mongo.Database
}
type PointRepository struct {
BaseRepository
pointCollection mongo.Collection
}
func NewPointRepository() *PointRepository {
pointCollection := ***self***.database.GetCollection("points")
pr := &PointRepository{
pointCollection: pointpointCollection,
}
}
如您所见,我需要访问类似 self 的内容才能使这种方法有效。
我该如何解决这种情况?
Go 中没有构造函数或 类。
PointRepository
嵌入 BaseRepository
,它有一个未导出的 database
字段。任何与BaseRepository
同包的函数都可以直接访问database
字段。
如果您需要从包外的函数访问该字段,您要么必须导出它,要么必须在 BaseRepository
.[=16= 中提供导出的 getter 方法]
解决方案 1:
Add Set
function for BaseRepository
解决方案 2:
use unsafe
package
type BaseRepository struct {
database string
}
type PointRepository struct {
BaseRepository
pointCollection string
}
baseRepository := &internel.BaseRepository{}
databasePointer := (*string)(unsafe.Pointer(uintptr(unsafe.Pointer(baseRepository))))
*databasePointer = "changed here"
fmt.Printf("%+v",baseRepository)
输出:
&{database:changed here}
这只是一个示例,您应该更改字段数据库的类型。
我想访问自定义构造函数中的内部 属性,在我的例子中,它是来自超类的 属性,如下所示:
type BaseRepository struct {
database mongo.Database
}
type PointRepository struct {
BaseRepository
pointCollection mongo.Collection
}
func NewPointRepository() *PointRepository {
pointCollection := ***self***.database.GetCollection("points")
pr := &PointRepository{
pointCollection: pointpointCollection,
}
}
如您所见,我需要访问类似 self 的内容才能使这种方法有效。
我该如何解决这种情况?
Go 中没有构造函数或 类。
PointRepository
嵌入 BaseRepository
,它有一个未导出的 database
字段。任何与BaseRepository
同包的函数都可以直接访问database
字段。
如果您需要从包外的函数访问该字段,您要么必须导出它,要么必须在 BaseRepository
.[=16= 中提供导出的 getter 方法]
解决方案 1:
Add
Set
function forBaseRepository
解决方案 2:
use
unsafe
package
type BaseRepository struct {
database string
}
type PointRepository struct {
BaseRepository
pointCollection string
}
baseRepository := &internel.BaseRepository{}
databasePointer := (*string)(unsafe.Pointer(uintptr(unsafe.Pointer(baseRepository))))
*databasePointer = "changed here"
fmt.Printf("%+v",baseRepository)
输出:
&{database:changed here}
这只是一个示例,您应该更改字段数据库的类型。