草庐IT

接口封装

全部标签

struct - 在将它作为接口(interface)传递并运行它的方法后,让你将结构恢复为它的数据类型?

我有一个结构如下typeMyStruct{EmbeddedFooBar}func(m*MyStruct)Foo(b*http.Request){//Doingsomething}funcfn(args...interfaces){//It'shereIwanttogetmystructbackandrunthe"Get"method//PleasekeepinmindIamtoopassapointerparamintothestructmethodstrt:=args[0]....getstructbacktostaticdatatypeMyStructandrun"Get()",d

pointers - 在 golang 中打印一组空接口(interface)?

我有一个结构,其字段形式为field[]interface{}。如果我打印该字段,我会得到一个指针引用。如果我尝试取消引用该字段,我会收到“无效间接”错误。代码如下:typeMyTypestruct{field[]interface{}}myType:=//createaMyType.Fieldisjustanarrayofnumbersprintln(myType.field)//printsapointerreference,ex:[1/1]0xc420269aa0println(*(myType.field))//doesn'tcompile如何打印myType.field中的值

json - 将接口(interface)传递给函数

我正在尝试编写一个采用json文件名和配置结构的配置包。它应该将json解码到传入的结构中并返回它。我正在尝试使用接口(interface),以便我可以传递任何我想要的结构错误是:panic:接口(interface)转换:interface{}是map[string]interface{},不是*main.ConfigurationData我不太确定如何解决这个问题。这是我的主包packagemainimport("config""commons")typeConfigurationDatastruct{S3ARNstring`json:"S3ARN"`SQSQueueUrlstri

go - 创建一个函数来测试从接口(interface)编码/解码

我想创建一个简单的函数来测试编码/解码记录是否按预期工作。我只是在这个例子中使用JSON:packagetestimport("encoding/json""fmt""testing""reflect""github.com/stretchr/testify/require")funcCheckRoundTripJSON(t*testing.T,recordinterface{}){data,err:=json.Marshal(record)require.NoError(t,err)fmt.Println("Record:",record,"wasencodedto:",data,"

go - 如何知道结构或结构指针是否实现接口(interface)

我需要知道结构或指向该结构的指针是否实现了给定的接口(interface)。//Youcaneditthiscode!//Clickhereandstarttyping.packagemainimport"fmt"funcmain(){varaA=A{i:5,}Serialize(a)Serialize(&a)}typeSerializableinterface{//Serialize()string//Deserialize(string)Serializebyte()[]byteDeserializebyte(b[]byte)(bytesReadint)}typeAstruct{i

slice 接口(interface)上的 Golang Switch Case

是否可以区分switchcase中的[]interface{}和interface{}?尝试创建一个解码函数,您可以在其中传递不同的类型,然后switchcase确定类型,然后继续解码该特定类型。虽然当传递的类型是[]interface{}时我遇到了问题。我一直在试验reflect包,但到目前为止运气不好。请参阅下面的代码片段和Playground链接。packagemainimport("fmt""math/big")typeTeststruct{tinterface{}}funcmain(){testVar1:=big.NewInt(0)testVar2:=int64(1)test

go - 无法将接口(interface) slice 传递给空白接口(interface)类型函数

我在我的goLang应用程序中使用“garyburd/redigo/redis”并尝试使用pubSubConn.Subscribe()订阅多个channel传递像pubSubConn.Subscribe("chn1","chn2")这样的值可以工作并创建对两个channel的订阅,但我不知道如何在此函数中传递n个channel。我试过传递接口(interface)slice,但它会将其转换为字符串varanything[]interface{}varstringList[]stringstringList=append(stringList,"chn1")stringList=appe

go - 我应该在 Go 中封装 slice 和 maps 吗?如果可以,该怎么做?

我想创建一个可以在其他包中访问的结构,但我不想允许修改这个结构。在其他语言中,这是通过将所有字段设为私有(private)并仅公开公共(public)setter/getter来存档的。使用getter的解决方案适用于除slice和映射之外的所有数据类型,因为默认情况下不会复制返回的slice和映射,因此可以修改它们。我想出的唯一解决方案是创建新的map/slice并在循环中分配所有项目,但这会引入大量重复且丑陋的代码,尤其是对于大型嵌套结构。packagemainimport("fmt")typeOtherStructstruct{propstring}typeStructstruc

go - 我如何使用接口(interface)定义安全划分并反射(reflect)?

我想定义一个安全分区,例如:funcsafeDivide(a,binterface{})interface{}{ifb==0{return0}returna/b}很明显,这个功能是行不通的。我们不能划分界面。一种解决方案是判断输入的类型并进行除法。switchreflect.ValueOf(x).Kind(){casereflect.Int://balabala...虽然看起来很多余,但我必须处理每一个案子。那么我是否可以使用反射来保证输入的类型?我试过reflect.TypeOf()但失败了。顺便说一句,我注意到了这一点:a:=uint32(0)ifZero(a)//outputs"

go - 如果接口(interface)类型的变量是实现它的某种结构类型,如何检查 Go?

假设我有以下内容:typeAInterface{....}//ImplementsAtypeBstruct{....}//ImlementsAtypeCstruct{....}现在我有一个函数,它接受A类型的变量作为参数:funcFoo(objA){ifAisB{....}elseifAisC{....}}还有一个main函数:funcmain(){b:=B{}Foo(b)}如何检查传递给函数的参数是否实际上是B类型? 最佳答案 使用typeswitch如前所述,@CeriseLimón链接的旅游页面。funcFoo(vA){swi