猿问

类型不匹配! 到底怎么传参数? insert 函数?

func insert(slice *[]interface{}, index int, value interface{}) {
rear := append([]interface{}{}, (*slice)[index:]...)
*slice = append(append((*slice)[:index], value), rear...)
}
s1 := []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}
insert(s1, 5, "A")
//报错 cannot use str (type []string) as type *[]interface {} in argument to insert
如何把insert函数interface改成string,不只能用string了? interface怎么传?

狐的传说
浏览 105回答 2
2回答

芜湖不芜

给你个fmt.Printf的例子:echo 函数不定参数,其调用fmt.Printf进行输出,因为v是一个slice,所以传递给fmt.Printf的时候需要 v...,就类似append(slice1,slice2...)package mainimport ("fmt")func main() {echo("Hello %s, I am %s\n", "Bob", "John")}func echo(format string, v ... interface{}) {fmt.Printf(format, v...)} 

九州编程

Golang的interface,和别的语言是不同的。它不需要显式的implements,只要某个struct实现了interface里的所有函数,编译器会自动认为它实现了这个interface。  SICP里详细解释了为什么同一个接口,需要根据不同的数据类型,有不同的实现;以及如何做到这一点。在这里没有OO的概念,先把OO放到一边,从原理上看一下这是怎么做到的。  先把大概原理放在这里,然后再举例子。为了实现多态,需要维护一张全局的查找表,它的功能是根据类型名和方法名,返回对应的函数入口。当我增加了一种类型,需要把新类型的名字、相应的方法名和实际函数入口添加到表里。这基本上就是所谓的动态绑定了,类似于C++里的vtable。对于SICP中使用的lisp语言来说,这些工作需要手动完成。而对于java,则通过implements完成了这项工作。而golang则用了更加激进的方式,连implements都省了,编译器自动发现自动绑定。
随时随地看视频慕课网APP

相关分类

Go
我要回答