问题标签 [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 - 是否有必要使用类型断言来访问接口返回的类型的值?
当我有一个返回接口类型的函数时,返回的值不会像我预期的那样工作。也就是说,它严格充当已定义的接口,要访问接口中未定义的方法和值,我必须进行类型断言。为什么?
考虑以下示例代码:
有没有更好、更容易、更惯用的方法foo.Value
?或者类型断言真的是最好的方法吗?
go - En/Decode 结构包含许多具有不同实现的接口,每个接口都有 gob
我有一个非常复杂的结构,其中包含许多具有不同实现的接口。为了在 gob 中编码/解码该结构,我似乎必须注册每个可能用于每个接口的实现。所以我最终得到了一种方法:
我需要在编码/解码之前调用它。有没有更简单的方法来做到这一点?或者我应该研究生成这种方法的可能性,因为跟踪所有可能的实现非常乏味?
go - 如何在 go 中实现可比较的接口?
我最近开始学习 Go 并面临下一个问题。我想实现 Comparable 接口。我有下一个代码:
所以我收到错误
而且我想我理解T
没有实现的问题,Comparable
因为 compare 方法作为参数T
而不是Comparable
.
也许我错过了什么或不明白,但有可能做这样的事情吗?
json - 从字节数组创建结构
我使用json.Marshal
接口接受 amap[string]interface{}
并将其转换为 a []byte
(这是一个字节数组吗?)
我得到这个输出
底层字节与以下声明的结构有关
我想获取data
并生成一个类型的变量Person struct
我怎么做?
go - 是否可以存储 Go 类型
我有一些接口,以及任意实现这些接口的 n 个结构。我想保留一个类型的数组,并能够在它们上运行一个循环来查看实现了哪些类型。是否可以存储这样的类型?我在反射包上花了一点时间,但找不到我想要的东西,我知道这可能不是最佳实践。尝试做类似的事情..没有巨大的类型开关,失败,或者如果..如果...如果。
编辑:标记为正确的答案在技术上是正确的。我发现由于对方法调用和过度使用反射的评论,这种方法是一个坏主意。相反,我使用类型切换来检查单个接口,因为类型切换不支持失败,并且带有类型断言的大型 if.. if.. if.. 能够进行适当的调用。
pointers - 在 Go 中,如何检查值是否为(任何)指针类型?
我有一个切片,interface{}
我需要检查这个切片是否包含指针字段值。
澄清示例:
go - 如何从 Go 中的结构中获取接口实例的属性
我想得到v.val,但是 go 编译器给我一个错误:
v.val 未定义(类型 testInterface 没有字段或方法 val)
但是在v.testMe方法中,它可以工作。
pointers - 是否可以将接口 obj 传递给 interface{} 类型?
我是 golang 新手,我想实现一个类似于 C++ 重载的重载方法,我的代码如下所示:
所以问题是:
如何确保实现对象接口的人将属于案例对象类型?
提前致谢。
go - 将 JSON 整数解组为空接口会导致错误的类型断言
我有这个代码。我希望接口的类型断言为 int。但是,接口的类型改为 float64。谁能解释为什么会这样?以及规避它的最佳方法是什么。
此代码打印“X 是 float64”。您可以在那里运行代码https://play.golang.org/p/9L9unW8l3n
go - GoLang - 将 nil 传递给接受接口的函数
最近我偶然发现了一些让我陷入 golang 循环的东西。
createRequestNoBody
当直接将 nil 传递给时,此代码在函数中有效,但在调用函数中使用set tohttp.NewRequest
调用时会产生恐慌。createRequest
*bytes.Buffer
nil
http库中的NewRequest函数原型如下:
func NewRequest(method, urlStr string, body io.Reader) (*Request, error)
接口在哪里io.Reader
。
我不确定为什么通过变量传递的 nil 会导致body
NewRequest 变为非 nil。
谁能解释为什么createRequest
方法会导致恐慌?方法内部的 nil 参数如何data = createRequest("GET", "https://google.com", nil)
变为非 nil NewRequest
?