函数如何能接收[]int8和[]uint8类型的数据

func b2s(bs []int8) string {
    b := make([]byte, len(bs))
    for i, v := range bs {
        b[i] = byte(v)
    }
    return string(b)
}

一个将[]int8或[]uint8数组的数据转成字符串的程序,[]int8和[]uint8的效果完全一样,怎么让这个方法能接收这两种数据呢?(否则就得写两个,除了参数类型,其它完全一样)

共 2 个回复


zengming00

可以这样吗?

func b2s(data interface{}) (string, error) {
    var b []byte

    switch bs := data.(type) {
    case []int8:
        b = make([]byte, len(bs))
        for i, v := range bs {
            b[i] = byte(v)
        }
    case []uint8:
        b = make([]byte, len(bs))
        for i, v := range bs {
            b[i] = byte(v)
        }
    default:
        return "", fmt.Errorf("expect []int8 or []uint8, but give %T", data)
    }
    return string(b), nil
}
# 0

stevewang

写两个函数也没什么关系,不用这么纠结。

# 1