2016-11-30 114 views
0

我試圖通過將類型傳入函數來實現類型斷言。換句話說,我想實現這樣的事情:Golang:將類型變量傳入函數

// Note that this is pseudocode, because Type isn't the valid thing to use here 
func myfunction(mystring string, mytype Type) { 
    ... 

    someInterface := translate(mystring) 
    object, ok := someInterface.(mytype) 

    ... // Do other stuff 
} 

func main() { 
    // What I want the function to be like 
    myfunction("hello world", map[string]string) 
} 

什麼是正確的函數聲明,我需要在myfunction使用,成功地在myfunction執行類型說法對嗎?

+1

類型斷言需要特定的類型。描述你正試圖解決的更高層次的問題。什麼是「做其他事情」? –

回答

2

寫這樣的:

func myfunction(jsonString string, v interface{}) { 
    err := json.Unmarshal([]byte(jsonString), v) 
    ... do other stuff 
} 

func main() { 
    var v map[string]string 
    myfunction("{'hello': 'world'}", &v) 
} 

在這個例子中,JSON文本將被解組到地圖[字符串]字符串。不需要類型斷言。

+1

謝謝。我讓帖子更通用,所以它不包含有關json編組的任何內容。我仍然好奇如何通過Go中的類型斷言,所以我編輯了這篇文章。 – hlin117

1

@ hlin117,

嘿,如果我理解正確你的問題,你需要比較的類型,這裏是你可以做什麼:

package main 

import (
    "fmt" 
    "reflect" 
) 

func myfunction(v interface{}, mytype interface{}) bool { 
    return reflect.TypeOf(v) == reflect.TypeOf(mytype) 
} 

func main() { 

    assertNoMatch := myfunction("hello world", map[string]string{}) 

    fmt.Printf("%+v\n", assertNoMatch) 

    assertMatch := myfunction("hello world", "stringSample") 

    fmt.Printf("%+v\n", assertMatch) 

} 

的方法是使用類型的樣本你想匹配。

相關問題