问题标签 [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 回答
2500 浏览

go - 如何使用接口联合两个不同的结构?

我有以下代码:

此代码返回一个错误:

./start.go:20:不能在赋值中使用 DataError 文字(类型 DataError)作为数据类型

似乎我无法分配给response不同类型的 var 数据(在我的情况下DataError)。我听说可能的解决方案是通过接口联合DataDataError结构。或者也许有另一个更好的解决方案?

你能指点我如何解决这个问题吗?

谢谢

0 投票
2 回答
46 浏览

go - 创建结构时正确使用接口

我正在尝试编写一个小程序,其中有几个包,每个包都有一个实现接口的结构。这个想法是,基于用户输入,我可以选择使用哪个包来构建特定结构,然后在其上调用他们都应该拥有的函数。由于我事先不知道类型,我的印象是我可以使用 ainterface{}并将其用作前向声明(参见最后一个代码片段)。我有一些看起来像这样的东西:

在另一个包中bob,我有类似的东西:

在我的主包中,我有一些看起来像这样的东西:

运行/构建/等时,我收到以下错误:

我对自己做错了什么感到有些困惑......关于我应该如何使用interface{}(如果有的话)的任何澄清都会非常有帮助!

0 投票
3 回答
2567 浏览

go - 如何在 Golang 中保持代码 DRY

编辑++:

如何不在 Go 中重复我的代码?

我为 type 实现了三个方法Wolf,我需要实现Tigertype 的所有方法来实现接口。但是KingdomPhylum两种类型的方法都是相同的。是否有可能只FamilyTiger类型实现方法:

而不是为每种类型重复所有三种方法?

免责声明

请不要与方法中的简单字符串返回混淆,在实际情况下,我需要不同的方法实现,而不仅仅是预定义的值。使用这种愚蠢的风格,我想避免玷污你的大脑。所以跳过方法根本不是办法。谢谢

0 投票
1 回答
53 浏览

go - 存储所有符合相同接口的类型的构造函数集合

我正在制作一个需要一组规则来运行工作的应用程序。该应用程序提供了用几种不同语言中的一种来表达规则的可能性。因此,我为实时规则引擎定义了一个接口,它提供了应用程序查询当前规则集所需的方法。在这个界面后面,根据源语言,会有一种不同类型的引擎。

现在我想根据规则文件的扩展名实例化一个规则引擎。但是我遇到了一些我很难克服的错误。

让我首先提供这个简化的骨架:

当我尝试构建它时,我得到35: cannot use NewASimpleRulesEngine (type func(string) *ASimpleRulesEngine) as type func(string) RulesEngine in assignment

我也试过:

  • 在没有指针的情况下进行分配,尽管我在尝试时感到很愚蠢
  • 在函数中有一个中间步骤init,我将在其中创建一个new(func (string) RulesEngine)然后分配给它,有和没有指针。
  • 像在 C 中一样存储函数指针,但编译器说它无法获取我的函数的地址。

我对 Go 不太熟悉,这有点令人惊讶。什么是正确的类型签名使用?这可能吗?如果这是不可避免的,我显然会在一侧有一个简单的扩展数组(以检查文件是否可能是规则文件),而switch在另一侧有一个大的扩展来提供足够的构造函数,但尽可能我会想避免这样的重复。

感谢您的任何见解!

0 投票
1 回答
778 浏览

pointers - 指针接收器与值接收器

情况:

我已经了解了指针接收器值接收器。据我了解:如果要修改对象本身,则需要使用指针接收器。我在go 文档中阅读了有关接口的更多信息,并发现了这段代码:

  • LessandLen方法使用值接收器,这是有道理的,因为它们正在返回数据而不是修改Sequence状态。

  • 但是在这个例子中,我很好奇为什么当它看起来试图修改它的状态时它Swap仍然使用一个值接收器。

问题:

这是一个错误,还是我对值/指针接收器的理解在某种程度上存在缺陷?

0 投票
1 回答
2601 浏览

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

我希望能够从此界面附加/编辑值。知道我该怎么做吗?谢谢。

0 投票
3 回答
10134 浏览

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 ?

0 投票
1 回答
325 浏览

database - 从 db 获取数据并填充数组的 Golang 抽象函数

我想创建一个抽象函数,从数据库中获取数据并用这些数据填充数组。数组的类型可以不同。由于性能问题,我想在没有反射的情况下做到这一点。我只想在任何地方调用 GetDBItems() 之类的函数,并从 DB 中获取所需类型的数据数组。但是我创建的所有实现都是糟糕的。

这是这个函数的实现:

我在这里调用这个函数:

它可以工作,但是调用此函数的代码太多,而且将事件数组复制到接口数组也存在一些性能问题。

如何在没有反射的情况下使用简短的函数调用代码来做到这一点?还是反映在这种情况下不慢?

0 投票
1 回答
18446 浏览

go - 在golang中将Json.Number转换为int/int64/float64

我有一个变量数据,它是一个接口。当我打印它的类型时,我得到它作为 json.Number。如何将类型转换为 int/int64/float64

如果我尝试 data.(float64),它最终会出现恐慌错误

0 投票
1 回答
161 浏览

go - Golang结构指针调用接口方法

我正在使用 Golang,但在遍历链表时遇到了问题。我打算做的是访问链表的所有节点,并从每个节点调用一个接口方法。

我定义了一个接口

我已经定义了一个节点类型和一个链表

当我在遍历链表时进行比较时会出现问题:......

我得到:恐慌:接口转换:可排序是*节点,而不是节点

猜猜这是因为 PNode 和 PNode.pNext 是指向节点结构的指针,而不是节点对象?那么我应该如何投射指针以使其正确?我以前用 C++ 编写,所以也许我的策略在 Golang 世界中出错了?

任何建议表示赞赏!