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

Golang中的不变结构

竺辉
2023-03-14
问题内容

可以在Golang中定义一个不变的结构吗?一旦初始化,则只能对struct的字段进行读取操作,而无需修改字段值。如果是这样,该怎么做。


问题答案:

通过使其成员不导出并提供阅读器,可以在其程序包外部将结构设为只读。例如:

package mypackage

type myReadOnly struct {
  value int
}

func (s myReadOnly) Value() int {
  return s.value
}

func NewMyReadonly(value int) myReadOnly{
  return myReadOnly{value: value}
}

和用法:

myReadonly := mypackage.NewMyReadonly(3)
fmt.Println(myReadonly.Value())  // Prints 3


 类似资料:
  • 我正在使用go-redis/redis和go-redis/cache来缓存Go对象。 其中obj是一个具有go映射(键值对)的结构,通过使用上面的代码,我正在设置一个键并将值保存到其中。这是package Common。现在我想在不同的包中访问它,比如GetRedis_pkg,而不导入pkg。我有什么办法可以做到。并且我可以通过任何方式访问该结构内部的特定映射吗?使用redis key imort

  • 问题内容: 这是该应用程序的示例。基本代码位于:golang-code / handler / handler.go(在主题之后应显示ID!) 我试图在Google Appengine上的Golang中建立一个小型博客系统,并使用Mustache作为模板引擎。 所以,我有一个结构: 数据通过传递给GAE 因此,GAE自动分配一个intID(int64)。现在我试图获得最新的博客文章 直到那里一切正

  • 我试图通过C结构从主要Go语言代码到不同的包,并得到类型转换错误。 C头文件test.h 高浪包测试 Go语言主要代码 编译主代码时,我收到以下错误:无法转换 当我尝试对变量进行类型转换时,它给出了以下错误:无法引用未报告的名称测试_Ctype_struct_dd_err_struct无法转换 请帮我解决这个问题

  • Go 语言中的结构体和 C 语言中结构体一样,都是用来保存一组 不同类型的数据 Go 语言中的结构体和 C 语言中结构体一样,都需要先定义结构体类型再利用结构体类型定义结构体变量 定义结构体类型 type 类型名称 struct{ 属性名称 属性类型 属性名称 属性类型 ... ... } type Studentstruct { name string age int

  • 问题内容: 我来自Java,试图弄清楚Go的类型系统是如何工作的。我想创建一个简单的图形数据结构并实现广度优先搜索。到目前为止,这就是我所拥有的。 当我尝试使用测试代码运行它时: 在我的String()方法中,len(node.neighbors)始终为0。我在做什么错?我以为,因为我在addEdge中采用了引用类型,所以它修改了节点引用,但显然我缺少有关Go的类型系统的信息。 问题答案: 这不是

  • 问题内容: 是否可以在不使用嵌入式结构的情况下继承类型的方法? 代码的第一个片段是将结构嵌入其中的工作代码,我可以在上调用该方法。我不喜欢的是,当我初始化时,我有(?)来初始化其中的结构。有没有解决的办法? 最终,我想做以下事情。where 是类型和初始化位置,也不需要初始化结构。以下代码不起作用,但可能清楚我的目标是什么。 我将添加更多使用的方法的结构,这就是我要问的原因。如果只拥有,我将拥有可