2016-09-08 64 views
-2

在這個功能我得到的聲明和不使用「我不明白 - 我需要以某種方式標記爲'真的我用它'或什麼?去:var聲明,但沒有使用錯誤 - 如何解決它?

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"} 
} 

而且,到這些因素成一個單一功能的正確方法的任何想法將受到歡迎!

+0

我無法重現您的錯誤。你確定沒有其他的東西導致它? https://play.golang.org/p/OpqqN7cBFZ – ale64bit

+0

你是什麼意思「將這些因素納入單一功能」? 'getString'從地圖中讀取一個字符串並將其返回。 'getInt'從地圖中讀取一個int並返回它。在Go中,這些是非常不同的行爲。 –

+0

你的代碼中可能有一個不同的「s」讓你感到困惑? (提示:使用更多描述性的varnames)。 –

回答

1

你的錯誤來自使用相同標識符的其他地方,因爲這編譯和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 
} 
+0

err ma gerrrd。在我的防守中,已近午夜。謝謝! –

0

您的代碼看起來是正確的,錯誤是不可複製的。 當然,你可以將這些重構成一個單一的功能,但你可能不喜歡它,這取決於品味。

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 
    } 
} 
+0

謝謝!你說得對,這是否是對形勢的改善,這是值得懷疑的。 –

相關問題