golang 在任何类型中使用接口返回类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 在任何类型中使用接口返回类型相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
	"reflect"
)
//general return type for go
//add ints together
func addints(first, second int) interface{} {
	return first + second
}

func concatstrs(first, second string) interface{} {
	return first + second
}

func main() {
  fmt.Println(addints(9, 9));
  fmt.Println(reflect.TypeOf(addints(8, 8)))
  fmt.Println(reflect.TypeOf(concatstrs("hello ", "world")))
}
/*18
int
string*/

如何在 Golang 中使用接口与地图?

【中文标题】如何在 Golang 中使用接口与地图?【英文标题】:How to use interface with map in Golang? 【发布时间】:2022-01-13 17:38:24 【问题描述】:

我有一个实现接口的结构 - 因此我可以将该结构分配给所述接口的变量。

但我想创建一个从 string -> Whoa 接口映射的类型,但在初始化时能够使用具体的结构。这不起作用,我得到:

不能在变量声明中使用 (map[string]Boom literal) (map[string]Boom 类型的值) 作为 poppa 值

任何帮助表示赞赏!

package main

type Whoa interface 
    yes()


type Boom struct 
    hey string


func (b Boom) yes() 



type poppa map[string]Whoa

func main() 
    var thisWorks Whoa = Boom
    var thisDoesnt poppa = map[string]Boom

【问题讨论】:

您不能将具体类型为map[string]Boom 的值赋给具体类型为poppa 的变量(map[string]Whoa)。映射值在内存中具有不同的表示形式。编写代码将map[string]Boom 复制到poppa 【参考方案1】:
    var thisWorks Whoa = Boom

这是因为 Boom 实现了 Whoa

你可能会想既然Boom实现了Whoa,那么map[string]Boom也可以是map[string]Whoa。但它不能。

可以做的是创建一个map[string]Whoa,其值为Booms。

    var thisShould poppa = map[string]Whoa"first": Boom

故事的寓意是,接口类型的切片和映射可以保存满足该接口的任何值,但满足接口的类型的切片和映射不等同于该接口的切片和映射 em>。

编写代码将地图[string]Boom复制到poppa

如果您想将 map[string]Boom 转换为 map[string]Whoa,正确的做法是:

whoas := make(map[string]Whoa)
for k, v := map[string]Boom 
  whoas[k] = v

【讨论】:

以上是关于golang 在任何类型中使用接口返回类型的主要内容,如果未能解决你的问题,请参考以下文章

如何实现带返回类型的接口方法是Golang中的一个接口

如何在 Golang 中使用接口与地图?

GO开发:接口

Go语言学习之旅--接口

Go语言学习之旅--接口

Go语言学习之旅--接口