请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

interface{} 类型转换的问题

我希望定义一个 interface{} 类型的切片,然后希望拼接所有的元素

var result string
var arrs []interface{}
arrs = append(arrs, 1)
arrs = append(arrs, "ha")
for _, v := range arrs {
   result += v.(string)
}
fmt.Println(arrs)

然后就会报错 :

panic: interface conversion: interface {} is int, not string


正在回答 回答被采纳积分+3

2回答

ccmouse 2018-07-09 19:49:42

类型转换可以多收一个参数,result,ok:=v.(string)
或者可以使用type assertion,我会讲到。
我看了下其实你想不管啥类型都拼成string,那使用fmt.Sprintf(“%v”,v)就可以了

0 回复 有任何疑惑可以回复我~
  • 提问者 晓之海绵宝宝 #1
    嗯,现在是用 Sprint 处理了。但是这样我要做的功能又衍生出新的问题... 
    我本来是重写了内部元素的 String() 方法,希望通过转换为 String 应用我重写的方法,用 Sprint 又没有办法了。
    问题接踵而至...
    回复 有任何疑惑可以回复我~ 2018-07-12 15:52:48
  • ccmouse 回复 提问者 晓之海绵宝宝 #2
    Sprintf使用了%v后,就是调用了内部的String()方法的。
    回复 有任何疑惑可以回复我~ 2018-07-16 23:16:10
  • 提问者 晓之海绵宝宝 回复 ccmouse #3
    亲测有效 , 666
    回复 有任何疑惑可以回复我~ 2018-07-18 12:17:40
废名0 2018-07-08 18:50:09

你添加int  1   又用了类型断言 string   肯定会报错啊。。

0 回复 有任何疑惑可以回复我~
  • 提问者 晓之海绵宝宝 #1
    那我要拼接一个 interface{} 类型的切片,用什么方法把元素转换为 string 类型
    回复 有任何疑惑可以回复我~ 2018-07-08 22:57:26
  • 废名0 回复 提问者 晓之海绵宝宝 #2
    可以string强制类型转换
    回复 有任何疑惑可以回复我~ 2018-07-08 23:00:55
  • 提问者 晓之海绵宝宝 回复 废名0 #3
    如果那么简单就不提问了... interface{}  不能通过 string 直接转换,编译都不能通过。
    回复 有任何疑惑可以回复我~ 2018-07-09 09:34:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信