为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
狐的传说 2023-02-11 10:14:20
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怎么传?
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

给你个fmt.Printf的例子:
echo 函数不定参数,其调用fmt.Printf进行输出,因为v是一个slice,所以传递给fmt.Printf的时候需要 v...,就类似append(slice1,slice2...)

package main

import (
"fmt"
)

func main() {
echo("Hello %s, I am %s\n", "Bob", "John")
}

func echo(format string, v ... interface{}) {
fmt.Printf(format, v...)
}

 


查看完整回答
反对 回复 2023-02-15
?
九州编程

TA贡献1785条经验 获得超4个赞

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

查看完整回答
反对 回复 2023-02-15
  • 2 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信