我正在尝试学习如何在go中使用结构。
我有以下包
// src/db/db.go
package db
type DB struct {
pk string
}
func (db DB) SetPk(s string) {
db.pk = s
}
func (db DB) GetPk() string {
return db.pk
}
这是我的主要内容。
package main
import (
"log"
"db"
)
func main() {
d := db.DB{}
d.SetPk("Hello World")
log.Println(d.GetPk())
}
当我运行命令go run main.go
时,我在命令提示符下得到一个换行符。我验证了SetPk和GetPk都被触发,并且SetPk正在为db.pk分配一个值。但是当GetPk被解雇时,db.pk再次为空。
如何让db对象保留pk值并将其返回GetPk?
答案 0 :(得分:2)
这是因为您需要使方法能够使用指向变量的指针而不是副本。目前,每种方法仅使用原始副本(空白)来运行该方法。以下将有效。
// src/db/db.go
package db
type DB struct {
pk string
}
// Use the pointer back to the object
func (db *DB) SetPk(s string) {
db.pk = s
}
// Use the pointer back to the object
func (db *DB) GetPk() string {
return db.pk
}