当前位置: 首页 > 面试题库 >

为Golang结构字段分配一个新值

高正初
2023-03-14
问题内容

我对结构字段有疑问。

我已经创建了一个类Point与一种方法Move()即增加或减少对象变量x通过dx。另一种方法Print用于输出结果。

main()一个新的实例与默认创建x = 3dx = 2,然后我打电话Move()Print()。我希望x在期间更改的值Move()Print()产生Final x=5,但它显示的是:

2014/07/28 15:49:44 New X=5
2014/07/28 15:49:44 Final X=3

我的代码有什么问题?

type Point struct {
  x, dx int
}

func (s Point) Move() {
  s.x += s.dx
  log.Printf("New X=%d", s.x)
}

func (s Point) Print() {
  log.Printf("Final X=%d", s.x)
}

func main() {
  st := Point{ 3, 2 };
  st.Move()
  st.Print()
}

问题答案:

您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都通过价值传递。

type Point struct {
  x, dx int
}

func (s *Point) Move() {
  s.x += s.dx
  log.Printf("New X=%d", s.x)
}

func (s *Point) Print() {
  log.Printf("Final X=%d", s.x)
}

func main() {
  st := Point{ 3, 2 };
  st.Move()
  st.Print()
}


 类似资料:
  • 问题内容: 我有一个RegistrationRequest结构: 再次在哪里输入电子邮件值,以验证用户输入的内容正确无误。 我也有一个用户结构: 当然,没有必要存储超出注册的范围。 所以我有两个变量:和-每个结构一个。是否可以将结构分配给该结构,以便所有公共字段都将存在于该结构中? 问题答案: 使用简单分配,您不能这样做,因为即使的字段是的子集,它们也完全是2种不同的类型,并且可分配性规则不适用。

  • 我想为 Go 中的结构字段分配默认值。我不确定这是否可能,但在创建/初始化结构的对象时,如果我不为字段分配任何值,我希望它从默认值分配。知道如何实现它吗?

  • 问题内容: 我有以下代码: 我想做的是创建一个Writer接口来包装,因为它没有命名为“ Write”,并且我不能将其与任何需要“ Writer”接口的东西一起使用。 该代码无法正常工作,因为它抱怨: 方法MyWriterFunction不是表达式,必须调用 我在这里做错了什么?如何设置是? 注意:我尽了最大的努力简化了这个问题,实际上我有一个具有AND普通Write函数的结构,所以它有点复杂…(

  • 问题内容: 我有这样的数据结构: 是另一个结构。 然后,当我尝试在Users切片中添加一些新值时,如下所示: 我不断收到此错误: 还尝试在这里https://github.com/golang/go/issues/3117变通方法,像这样: 但是没有运气,仍然是完全相同的错误。 并且还尝试使用指针声明地图,因此:,仍然没有运气。 问题答案: 首先,对于这个问题,本文中的解决方案为什么在将值设置为结

  • 问题内容: 如果我的猜测正确的话,我可能会遇到结构问题,可能还会遇到指针问题。 该结构具有一些字段和一个包含切片的字段: 这看起来是这样的: 我的问题是将的值更改为。 有一个监听连接的方法: 并且是无法正常工作的部分,该方法如下所示: 这实际上被执行了,所以连接没有得到响应或其他问题不是问题。 但是,如果以后尝试使用的方法来遍历它,则总是出于某种原因(默认设置)。 我想我正在使用的是原始连接的副本

  • 问题内容: 我有一个表字段,其中包含用户的姓氏和名字。是否有可能分裂成那些2场,? 所有记录的格式均为“名字的姓氏”(不带引号,中间还有空格)。 问题答案: 不幸的是,MySQL没有分割字符串功能。但是,您可以为此创建一个用户定义的函数,例如以下文章中描述的函数: Federico Cargnelutti撰写的MySQL Split String Function 使用该功能: 您将可以按照以下方