douzen1880 2015-07-19 04:30
浏览 160
已采纳

为什么会出现“接口转换:接口为int32”,用于将列表整数元素转换为字符串?

New to Go...I wrote a program to remove duplicate integers stored in a list. When I run the following test for the removeDuplicates function, I get the following error which points to this line: testString += strconv.Itoa(e.Value.(int)) in linked_test.go. Why is this and how do I fix it? I store integers in testList and fetch them with e.Value and typecast with .(int).

panic: interface conversion: interface is int32, not int [recovered]
    panic: interface conversion: interface is int32, not int

linked_test.go

package linked

import (
    "container/list"
    "strconv"
    "testing"
)

func TestDuplicates(t *testing.T) {
    var (
        testList           = list.New()
        exampleList        = list.New()
        testString  string = ""
    )
    testList.PushBack(1)
    testList.PushBack(2)
    testList.PushBack(3)
    testList.PushBack(2)
    exampleList = removeDuplicates(testList)
    for e := exampleList.Front(); e.Next() != nil; e = e.Next() {
        testString += strconv.Itoa(e.Value.(int))
    }
    if testString != "123" {
        t.Fatalf("removeDuplicates failed")
    }
}

linked.go

package linked

import (
    "container/list"
    "strconv"
    "strings"
)

func removeDuplicates(l *list.List) *list.List {
    var newList = list.New()
    var dupString string = ""
    for e := l.Front(); e.Next() != nil; e = e.Next() {
        if strings.Index(dupString, strconv.Itoa(e.Value.(int))) == -1 {
            dupString += strconv.Itoa(e.Value.(int))
        }
    }
    for _, c := range dupString {
        newList.PushBack(c)
    }
    return newList
}
  • 写回答

1条回答 默认 最新

  • dongyu1918 2015-07-19 04:45
    关注

    rune is aliased to int32,

    for _, c := range dupString {
        newList.PushBack(c) // c is a rune aka int32
    }
    

    is pushing int32s, while int is aliased to int64 on 64bit CPUs, so one way to do it is to just force the type:

    for _, c := range dupString {
        newList.PushBack(int(c))
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?