无法设置结构的属性

时间:2017-11-19 22:05:57

标签: go struct

我正在尝试学习如何在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?

1 个答案:

答案 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
}