问题标签 [go-interface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - 如何使用接口联合两个不同的结构?
我有以下代码:
此代码返回一个错误:
./start.go:20:不能在赋值中使用 DataError 文字(类型 DataError)作为数据类型
似乎我无法分配给response
不同类型的 var 数据(在我的情况下DataError
)。我听说可能的解决方案是通过接口联合Data
和DataError
结构。或者也许有另一个更好的解决方案?
你能指点我如何解决这个问题吗?
谢谢
go - 创建结构时正确使用接口
我正在尝试编写一个小程序,其中有几个包,每个包都有一个实现接口的结构。这个想法是,基于用户输入,我可以选择使用哪个包来构建特定结构,然后在其上调用他们都应该拥有的函数。由于我事先不知道类型,我的印象是我可以使用 ainterface{}
并将其用作前向声明(参见最后一个代码片段)。我有一些看起来像这样的东西:
在另一个包中bob
,我有类似的东西:
在我的主包中,我有一些看起来像这样的东西:
运行/构建/等时,我收到以下错误:
我对自己做错了什么感到有些困惑......关于我应该如何使用interface{}
(如果有的话)的任何澄清都会非常有帮助!
go - 如何在 Golang 中保持代码 DRY
编辑++:
如何不在 Go 中重复我的代码?
我为 type 实现了三个方法Wolf
,我需要实现Tiger
type 的所有方法来实现接口。但是Kingdom
,Phylum
两种类型的方法都是相同的。是否有可能只Family
为Tiger
类型实现方法:
而不是为每种类型重复所有三种方法?
免责声明
请不要与方法中的简单字符串返回混淆,在实际情况下,我需要不同的方法实现,而不仅仅是预定义的值。使用这种愚蠢的风格,我想避免玷污你的大脑。所以跳过方法根本不是办法。谢谢
go - 存储所有符合相同接口的类型的构造函数集合
我正在制作一个需要一组规则来运行工作的应用程序。该应用程序提供了用几种不同语言中的一种来表达规则的可能性。因此,我为实时规则引擎定义了一个接口,它提供了应用程序查询当前规则集所需的方法。在这个界面后面,根据源语言,会有一种不同类型的引擎。
现在我想根据规则文件的扩展名实例化一个规则引擎。但是我遇到了一些我很难克服的错误。
让我首先提供这个简化的骨架:
当我尝试构建它时,我得到35: cannot use NewASimpleRulesEngine (type func(string) *ASimpleRulesEngine) as type func(string) RulesEngine in assignment
我也试过:
- 在没有指针的情况下进行分配,尽管我在尝试时感到很愚蠢
- 在函数中有一个中间步骤
init
,我将在其中创建一个new(func (string) RulesEngine)
然后分配给它,有和没有指针。 - 像在 C 中一样存储函数指针,但编译器说它无法获取我的函数的地址。
我对 Go 不太熟悉,这有点令人惊讶。什么是正确的类型签名使用?这可能吗?如果这是不可避免的,我显然会在一侧有一个简单的扩展数组(以检查文件是否可能是规则文件),而switch
在另一侧有一个大的扩展来提供足够的构造函数,但尽可能我会想避免这样的重复。
感谢您的任何见解!
pointers - 指针接收器与值接收器
情况:
我已经了解了指针接收器和值接收器。据我了解:如果要修改对象本身,则需要使用指针接收器。我在go 文档中阅读了有关接口的更多信息,并发现了这段代码:
Less
andLen
方法使用值接收器,这是有道理的,因为它们正在返回数据而不是修改Sequence
状态。但是在这个例子中,我很好奇为什么当它看起来试图修改它的状态时它
Swap
仍然使用一个值接收器。
问题:
这是一个错误,还是我对值/指针接收器的理解在某种程度上存在缺陷?
pointers - 如何通过引用设置 interface{} 参数?
我有一个函数,它的参数类型为interface{}
。这个参数代表我的模板数据。所以在每个页面上它存储不同的数据类型(主要是结构)。我想在这个参数的数据上附加一些数据,但它是一种interface{}
类型,我做不到。
这是我尝试过的:
我可以成功获得"HeaderCSS"
价值。但我不能用另一个值替换它。我究竟做错了什么?
我的模板数据如下所示:
我有一个通用结构:
我有另一个结构,例如:
我将第二个结构作为 templateData 参数发送。
现在我得到这个错误:
“reflect.Value.Set using unaddressable value”在以下行:reflect.ValueOf(dst).Elem().Elem().FieldByName("HeaderCSS").Set(reflect.ValueOf(v))
上面的代码灵感来自这个答案:https ://stackoverflow.com/a/26824071/1564840
我希望能够从此界面附加/编辑值。知道我该怎么做吗?谢谢。
go - Interfaces and pointer receivers
I am newbie gopher and trying to get my head around the pointer receivers and interfaces.
based on the above definitions..
Get compiler error: cannot use Bar literal (type Bar) as type Foo in assignment: Bar does not implement Foo (foo method has pointer receiver)
I understand that compiler is doing some pointer conversion and de-referencing on our behalf in the first scenario. Why doesn't it do the same thing in the second scenario ?
database - 从 db 获取数据并填充数组的 Golang 抽象函数
我想创建一个抽象函数,从数据库中获取数据并用这些数据填充数组。数组的类型可以不同。由于性能问题,我想在没有反射的情况下做到这一点。我只想在任何地方调用 GetDBItems() 之类的函数,并从 DB 中获取所需类型的数据数组。但是我创建的所有实现都是糟糕的。
这是这个函数的实现:
我在这里调用这个函数:
它可以工作,但是调用此函数的代码太多,而且将事件数组复制到接口数组也存在一些性能问题。
如何在没有反射的情况下使用简短的函数调用代码来做到这一点?还是反映在这种情况下不慢?
go - 在golang中将Json.Number转换为int/int64/float64
我有一个变量数据,它是一个接口。当我打印它的类型时,我得到它作为 json.Number。如何将类型转换为 int/int64/float64
如果我尝试 data.(float64),它最终会出现恐慌错误
go - Golang结构指针调用接口方法
我正在使用 Golang,但在遍历链表时遇到了问题。我打算做的是访问链表的所有节点,并从每个节点调用一个接口方法。
我定义了一个接口
我已经定义了一个节点类型和一个链表
当我在遍历链表时进行比较时会出现问题:......
我得到:恐慌:接口转换:可排序是*节点,而不是节点
猜猜这是因为 PNode 和 PNode.pNext 是指向节点结构的指针,而不是节点对象?那么我应该如何投射指针以使其正确?我以前用 C++ 编写,所以也许我的策略在 Golang 世界中出错了?
任何建议表示赞赏!