go:var声明但未使用错误-如何解决它?

go:var声明但未使用错误-如何解决它?,go,Go,在这个函数中,我得到了声明的而未使用的“,我不明白-我是否需要以某种方式将它标记为“真的我使用过它”或其他什么 func getString(data map[string]interface{}, name string) (string, error) { s := data[name] if reflect.TypeOf(s).Kind() != reflect.String { return s.(string), nil } return

在这个函数中,我得到了声明的而未使用的“,我不明白-我是否需要以某种方式将它标记为“真的我使用过它”或其他什么

func getString(data map[string]interface{}, name string) (string, error) {
    s := data[name]
    if reflect.TypeOf(s).Kind() != reflect.String {
        return s.(string), nil
    }
    return "", &apiError{1, "it's not a string"}
}
奇怪的是,我没有从这个函数中得到错误:

func getInt(data map[string]interface{}, name string) (int, error) {
    t := data[name]
    if reflect.TypeOf(t).Kind() == reflect.Int {
        return t.(int), nil
    }
    return 0, &apiError{1, "it's not an int"}
}
此外,任何关于将这些功能整合到单一功能中的正确方法的想法都将受到欢迎

您的错误来自于(声明和不声明)在其他地方使用相同的标识符,因为这在
golang.org上编译并运行良好

package main

import "reflect"

func main() {
    m := make(map[string]interface{})
    m["foo"] = "25"
    getString(m, "foo")
}

func getString(data map[string]interface{}, name string) (string, error) {
    s := data[name]
    if reflect.TypeOf(s).Kind() != reflect.String {
        return s.(string), nil
    }
    return "", nil
}

您的代码看起来是正确的,错误是不可复制的。 当然,您可以将它们重构为单个函数,但您可能不喜欢它,这取决于您的喜好

type VType int
const (
    VInteger VType = iota
    VString
    VUnknown
)
func getValue(data map[string]interface{}, name string) (VType, int, string) {
    switch v := data[name].(type) {
    case int:
        return VInteger, v, ""
    case string:
        return VString, 0, v
    default:
        return VUnknown, 0, ""
    }
}
func main() {
    m := make(map[string]interface{})
    m["foo"] = "25"
    switch t, i, s := getValue(m, "foo"); t {
    case VInteger:
        fmt.Println("int ", i)  //do something with int
    case VString:
        fmt.Println("string ", s) //do something with string
    case VUnknown:
        err := &apiError{1, "it's not an int"} //do something with err
    }
}

我无法重现你的错误。你确定周围没有别的原因吗?你所说的“将这些因素分解为单个函数”是什么意思
getString
从映射中读取字符串并返回它
getInt
从映射中读取一个int并返回它。在围棋中,这些是非常不同的行为。你的代码中可能有不同的“s”让你感到困惑吗?(提示:使用更具描述性的变量名)。为我辩护,已经快午夜了。谢谢谢谢你说得对,这是否是形势的改善值得怀疑。