问题标签 [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.

0 投票
2 回答
1421 浏览

go - 如何访问接口中未定义的类型方法?

我的接口要求其实现者具有 Click 方法。但是实现这个接口的FakeTicker类型除了Click方法外,还实现了Tick方法。

在这里我收到以下错误“clocker.Tick undefined (type Ticker has no field or method Tick)”

我知道接口只有方法 Click() 但由于 FakeWriter 正在实现接口,它不应该能够调用自己的方法 Tick() 吗?

0 投票
1 回答
39 浏览

arrays - 使用一组键拆分对象数组

我有一个json的例子如下:

{"key1": "val1", "key2": "val2", "key3": [{"k1": v1"}, {"k2": "v2"}]}

现在我需要把它分成两个对象:

{"key1": "val1", "key2": "val2", "key3": {"k1": v1"}}{"key1": "val1", "key2": "val2", "key3": {"k2": v2"}}

基本上我想拆分 key3 元素,在新结构中保持所有其他键相同。

我的结构如下:

请让我知道如何实现这一目标。

关于,-M-

0 投票
1 回答
672 浏览

go - Golang 接口 & *接口

我正在尝试在我的代码库中更多地为我正在编写的游戏服务器使用接口,并理解高级概念以及何时应该使用(我认为)。就我而言,我正在使用它们将我的软件包彼此分离,并使测试更容易。

我的问题归结为我有一个具有 ptr 接收方法的结构。然后我通过接口将此结构传递给另一个函数,就像在这个操场上一样,我很困惑为什么具有接口类型参数的函数可以接受实现该接口的东西的地址。为什么不是func something(f *face),有什么目的*interface

0 投票
1 回答
789 浏览

go - Golang 类型断言/强制转换为中间结构

给定以下类型:

eventHandleFunc我的目标是为具体类型ActionSuccessEvent以及ActionFailureEvent更抽象的类型提供事件处理程序(类型) ActionResultEvent。后者我想同时用于ActionSuccessEvents 和ActionFailureEvents。

现在我的想法是将Event接口类型转换为我想要处理的结构,这对于具体类型非常有效。

现在接受ActionResultEvents 的处理程序呢?我最喜欢的应该是这样的:

这显然像etype一样恐慌ActionSuccessEvent

然后我们当然可以转换为初始类型并返回中间类型:

从我的角度来看,另一个非常好的方法是:

有人能想到一个顺利的解决方案吗?附带说明:如果处理程序在运行时在类型转换失败时发生恐慌,我很高兴,因为包装器将从中恢复。

这是上面操场上的示例代码。谢谢!

0 投票
3 回答
3841 浏览

json - 在 Golang 中将 interface{} 直接转换为 int,其中 interface 将数字存储为字符串

我有一个 map[string]interface{} 因为解码为 JSON;对于普通数据,接口大多只是一个数字,但类型为字符串,如下所示:

然后所有数据都将存储到struct中。

所以我需要将 interface 转换为 int,但不能轻松有效地做到这一点,因为只有代码会是https://play.golang.org/p/oktbvTUbk93,非常烦人,如果你看代码似乎不可读记住我应该处理所有可能的错误

我想将它直接转换为 int,我一直在寻找解决方案,但任何这种转换都可以按我的意愿工作https://play.golang.org/p/Dw67U6kZwHC

如果您想知道为什么我不直接将其解码为结构,那是因为它是动态数据,实际解码是这样发生的:

然后我根据code和id来处理Data,它们都是不同的数据结构,所以我不能直接用JSON处理

0 投票
1 回答
170 浏览

go - 尝试使用 go 接口实现多态性

我正在尝试在第三方库之上创建一个层,在本例中为 libchan。这是我定义的接口:

InboundTransport意味着作为 type 的替代品Transport

只是为了上下文,这是libchan.Receiver定义(请注意它与我的匹配ReceiverStream

Transportlibchan 库在此处返回:

由于libchan.TransportInboundTransport分享了一种WaitReceiveChannel() (ReceiverStream, error)方法,我想我应该能够将一个方法分给另一个方法,如下所示:

但我收到一个错误:

我假设这个错误的意思是类型ReceiverStream不匹配libchan.Receiver,但我认为golang接口是隐式的,这意味着只要返回类型实现与预期接口相同的方法,它就会通过编译。有什么我可以改变的,以便我可以将自定义接口叠加到第三方库返回的接口上吗?

TLDR:第三方库正在返回 interface 的对象TransportTransport接口指定了一个方法WaitReceiveChannel()。我有一个自定义接口InboundTransport,它还指定WaitReceiveChannel(). 我调用的第三方方法返回一个Transport通过 method实现的对象WaitReceiveChannel()。我假设它也会实现InboundTransport,因为后者也指定了WaitReceiveChannel()相同类型的 a。这是行不通的。为什么不?

0 投票
1 回答
4074 浏览

go - 了解接口内部的接口(嵌入式接口)

我试图用下面的代码理解接口嵌入。

我有以下内容:

现在,如果我有以下情况:

现在,如果我想调用 MyprojectV1alpha1Interface

创建 SampleInterface 函数

我需要做什么?

另外,请解释一下这个接口在 Golang 中是如何工作的。

0 投票
3 回答
4971 浏览

go - 未实现,方法类型错误

给定以下 Go 代码:

我收到这些错误:

SuperToy实现CatToyDogToy。_ 但是,当我创建一个Pet以 interface 作为参数的接口时,我得到一个错误。我可以知道我怎样才能得到一个里面有猫和狗的数组/切片吗?我想遍历这个切片并为每个切片调用一个函数。我也想保留CatToyDogToy接口。我也可以删除Pet接口。

更多信息:将来,我更有可能添加更多pets. 我认为我不会添加更多操作,例如Play.

谢谢

0 投票
1 回答
1927 浏览

go - 如何将接口传递给有很多参数的方法

我编写了一个惰性代码来演示我必须实现接口的问题。我有方法 M1、M2 以结构 X 作为参数并具有结构 Y 类型。我希望所有这些方法都由单个接口 I 实现。问题是实现接口的方法 M 我需要注意需要传递给子方法(M1,M2)的参数。我收到一个错误:<argument name> used as a value当我在 M 中传递多个参数时

0 投票
1 回答
390 浏览

pointers - go中函数参数中的指针、切片和接口{}混淆

我一直在阅读有关 Go 如何通过指针与值将参数传递给函数的信息。我一直在阅读有关接口类型的信息。而且我一直在篡改反射包。但很明显,由于这里的示例代码,我仍然不明白它是如何工作的:

当我运行此代码时,它将打印一个包含 10 个业务结构的列表,其中 Business.Name 的比萨饼 0 到 9。我知道在我的示例中,我的DoSomething函数收到了业务切片的副本,因此,business变量在我的主要功能中不受任何影响DoSomething

我接下来所做的就是将我的更改func DoSomething(b []Business)func DoSomething(b interface{}). 现在,当我尝试运行脚本时,出现运行时panic: reflect: Elem of invalid type on错误z := reflect.New(v.Type().Elem())

我注意到,DoSomething(b []Business)变量i == &[]. 但有了DoSomething(b interface{}),变量i == 0xc42000e1d0。为什么i在这两种情况下变量不同?