草庐IT

interface-design

全部标签

pointers - 如何定义接收指针的 Go 接口(interface)方法的实现?

下面的程序运行良好。packagemainimport("fmt")typePersoninterface{Hello()}typeJokerstruct{Namestring}func(jJoker)Hello(){fmt.Println(j.Name,"says,\"Hello!\"")}funcmain(){varjJoker=Joker{"Peter"}invokeHello(j)}funcinvokeHello(pPerson){p.Hello()}这是输出。$gorunfoo.goPetersays,"Hello!"但是,当我更改Hello方法以接收指针时,出现错误。pac

go - 你如何传递一片 *interface{} 作为参数?

我想使用Scan()在包sql中,但是列的数量以及参数的数量将在运行时发生变化。这是Scan()的签名:func(rs*Rows)Scan(dest...interface{})error根据文档,*interface{}是Scan()接受的类型之一。所以我想创建一段[]*interface{}并将其扩展为参数。这是我认为可行的方法:funcquery(database*sql.DB){rows,_:=database.Query("select*fromtestTable")forrows.Next(){data:=make([]*interface{},2)err:=rows.Sc

go - 你如何传递一片 *interface{} 作为参数?

我想使用Scan()在包sql中,但是列的数量以及参数的数量将在运行时发生变化。这是Scan()的签名:func(rs*Rows)Scan(dest...interface{})error根据文档,*interface{}是Scan()接受的类型之一。所以我想创建一段[]*interface{}并将其扩展为参数。这是我认为可行的方法:funcquery(database*sql.DB){rows,_:=database.Query("select*fromtestTable")forrows.Next(){data:=make([]*interface{},2)err:=rows.Sc

go - golang中通过接口(interface){}的结构的通用映射

我有2种基于我无法更改的第三方代码的结构typeAddEventstruct{}typeDeleteEventstruct{}我想创建一个字符串作为键和对象作为值的映射所以每次我有新事件我都会把它添加到mapI.Emap应如下所示:EventMap:event1,AddEvent{}event2,AddEvent{}event2,DeleteEvent{}AddEvent和DeleteEvent未定义为接口(interface)的问题。我有没有办法使用任何结构作为值在go中创建一个通用映射,如果是,我该如何读取它我需要使用reflect检查类型I.Eevent:=EventMap[ev

go - golang中通过接口(interface){}的结构的通用映射

我有2种基于我无法更改的第三方代码的结构typeAddEventstruct{}typeDeleteEventstruct{}我想创建一个字符串作为键和对象作为值的映射所以每次我有新事件我都会把它添加到mapI.Emap应如下所示:EventMap:event1,AddEvent{}event2,AddEvent{}event2,DeleteEvent{}AddEvent和DeleteEvent未定义为接口(interface)的问题。我有没有办法使用任何结构作为值在go中创建一个通用映射,如果是,我该如何读取它我需要使用reflect检查类型I.Eevent:=EventMap[ev

mongodb - 如何使用 bulk.Insert() 将 interface{} 类型插入到 mongodb

我不能在我的集合中插入一个大数组;interface{}类型有问题。代码如下:collections=getSession().DB("go").C("comments")funcBenchmarkBulkInsert(datainterface{}){bulk:=collections.Bulk()bulk.Insert(data...)_,bulkErr:=bulk.Run()ifbulkErr!=nil{panic(bulkErr)}fmt.Printf("\n-%dcommentsinserted!",reflect.ValueOf(data).Len())}我无法构建该应用程

mongodb - 如何使用 bulk.Insert() 将 interface{} 类型插入到 mongodb

我不能在我的集合中插入一个大数组;interface{}类型有问题。代码如下:collections=getSession().DB("go").C("comments")funcBenchmarkBulkInsert(datainterface{}){bulk:=collections.Bulk()bulk.Insert(data...)_,bulkErr:=bulk.Run()ifbulkErr!=nil{panic(bulkErr)}fmt.Printf("\n-%dcommentsinserted!",reflect.ValueOf(data).Len())}我无法构建该应用程

unit-testing - 如何只模拟接口(interface)的一种方法

我正在努力理解Go中的模拟(正在寻找与Mockito.spy相关的东西,相当于Go中的java)。假设我在Go中有一个接口(interface),其中包含5个方法。但是我要测试的这段代码只引用了两种方法。现在我如何在不实现所有方法的情况下模拟这种依赖关系,即我在源代码中的实际实现实现了接口(interface)的5种方法,但是有没有办法避免在测试文件中实现5种方法的虚拟接口(interface)实现。以下是我目前的做法,实现5个方法是可以管理的,但是如果接口(interface)有20个方法,模拟实现测试文件中的所有方法会变得乏味。示例:handler.go中的源代码:typeClie

unit-testing - 如何只模拟接口(interface)的一种方法

我正在努力理解Go中的模拟(正在寻找与Mockito.spy相关的东西,相当于Go中的java)。假设我在Go中有一个接口(interface),其中包含5个方法。但是我要测试的这段代码只引用了两种方法。现在我如何在不实现所有方法的情况下模拟这种依赖关系,即我在源代码中的实际实现实现了接口(interface)的5种方法,但是有没有办法避免在测试文件中实现5种方法的虚拟接口(interface)实现。以下是我目前的做法,实现5个方法是可以管理的,但是如果接口(interface)有20个方法,模拟实现测试文件中的所有方法会变得乏味。示例:handler.go中的源代码:typeClie

user-interface - 无法将 GUI 变量保持为全局变量

我发现以下代码有效://modifiedfrom:https://github.com/andlabs/ui/wiki/Getting-Startedpackagemainimport("github.com/andlabs/ui")funcmakewinfn(){varname=ui.NewEntry()varbutton=ui.NewButton("Greet")vargreeting=ui.NewLabel("")box:=ui.NewVerticalBox()box.Append(ui.NewLabel("Enteryourname:"),false)box.Append(na