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

如何检查变量是否为字符串/整数/浮点数并转换指定Map类型?

Go 类型检查与Map转换问题解答

1. 检查变量是否为string/int/float类型

在Go中,判断变量类型最常用的两种方式是类型断言和type switch:

方式一:类型断言(适合单次类型判断)

var v interface{} = "test"

// 判断是否为string
if s, ok := v.(string); ok {
    println("类型为string,值:", s)
}
// 判断是否为int
if i, ok := v.(int); ok {
    println("类型为int,值:", i)
}
// 判断是否为float64(Go默认浮点数类型为float64)
if f, ok := v.(float64); ok {
    println("类型为float64,值:", f)
}

注意:如果需要支持float32,需要单独添加对应断言分支。

方式二:type switch(适合多类型分支判断)

var v interface{} = 3.14

switch val := v.(type) {
case string:
    println("类型:string,值:", val)
case int:
    println("类型:int,值:", val)
case float64:
    println("类型:float64,值:", val)
default:
    println("不支持的类型:", val)
}

2. 将map[string]interface{}转为map[string]string(仅支持string/int,其他类型返回错误)

你之前用value, ok := v.(string)断言int失败,是因为类型断言是精确匹配的。要实现需求,可以写一个转换函数,遍历原map并针对允许的类型做处理:

import (
    "fmt"
    "strconv"
)

func ConvertToStrMap(src map[string]interface{}) (map[string]string, error) {
    dst := make(map[string]string, len(src))
    for key, val := range src {
        switch v := val.(type) {
        case string:
            dst[key] = v
        case int:
            dst[key] = strconv.Itoa(v)
        // 若需要支持浮点数,可添加以下分支
        // case float64:
        //     dst[key] = strconv.FormatFloat(v, 'f', -1, 64)
        default:
            return nil, fmt.Errorf("key %q 的值类型不支持:%T", key, val)
        }
    }
    return dst, nil
}

使用示例

func main() {
    srcMap := map[string]interface{}{
        "username": "clarkk",
        "level":    10,
        // "score":    95.5, // 若开启此注释,需在转换函数中添加float64分支,否则会返回错误
    }

    strMap, err := ConvertToStrMap(srcMap)
    if err != nil {
        panic(err)
    }
    // 输出:clarkk 10
    println(strMap["username"], strMap["level"])
}

这个函数会:

  • 直接保留string类型的值
  • 将int类型的值转为string存入目标map
  • 遇到其他类型(如float、bool、结构体等)时,立即返回错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:23:16