You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中如何读取any类型及any[]数组对象?代码报错求助

问题解决:Go类型断言失败的原因与修复

问题根源

你在代码中把Location的指针赋值给了DataRow(row1.DataRow = &Location{"YourHome", "GoHome"}),但后续类型断言时却使用了值类型Location,两者类型不匹配,导致运行时panic。

修复方案(二选一即可)

方案1:断言为指针类型

既然存的是指针,断言时就要对应*Location类型,Go允许直接通过指针访问结构体字段(自动解引用):

package main

import "fmt"

type Location struct {
    Name string
    Home string
}

type MyRow struct {
    Type int
    DataRow any 
}

type MyTransaction struct {
    TID    int
    Rows   []MyRow
}

type SoftTran map[int]MyTransaction
var MapTran SoftTran

func main() {
    MapTran = make(SoftTran)
    
    var TT1 MyTransaction 

    var row1 MyRow
    row1.Type = 100
    row1.DataRow = &Location{"YourHome", "GoHome"}
    TT1.Rows = append(TT1.Rows, row1)
    
    for _, row := range TT1.Rows {
        switch row.Type {
            case 100:
                // 断言为指针类型
                val := row.DataRow.(*Location)
                fmt.Printf("%s %s\n", val.Home, val.Name)
            default:
        }
    }
}

方案2:存储值类型而非指针

如果不需要指针,直接把Location值赋值给DataRow,保持断言和存储类型一致:

package main

import "fmt"

type Location struct {
    Name string
    Home string
}

type MyRow struct {
    Type int
    DataRow any 
}

type MyTransaction struct {
    TID    int
    Rows   []MyRow
}

type SoftTran map[int]MyTransaction
var MapTran SoftTran

func main() {
    MapTran = make(SoftTran)
    
    var TT1 MyTransaction 

    var row1 MyRow
    row1.Type = 100
    // 直接赋值值类型
    row1.DataRow = Location{"YourHome", "GoHome"}
    TT1.Rows = append(TT1.Rows, row1)
    
    for _, row := range TT1.Rows {
        switch row.Type {
            case 100:
                val := row.DataRow.(Location)
                fmt.Printf("%s %s\n", val.Home, val.Name)
            default:
        }
    }
}

额外建议

为了避免类似类型不匹配的panic,推荐使用带ok的类型断言,这样可以优雅处理类型不匹配的情况,避免程序崩溃:

val, ok := row.DataRow.(*Location)
if !ok {
    fmt.Println("类型断言失败")
    return
}
fmt.Printf("%s %s\n", val.Home, val.Name)

内容的提问来源于stack exchange,提问作者AeJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:59:58