gocron源代碼中的Action那個地方,就是個空介面型別Action interface{},可以傳遞任意型別進去,這里是傳了個函式進去
command := cli.Command{ Name: "web", Usage: "run web server", Action: runWeb, Flags: flags, }
介面是合約,任何型別只要實作了介面中的方法,那么就可以認為實作了這個介面,對于沒有方法的介面interface{}型別,可以看做所有的型別都實作了這個介面,因此可以作為傳遞引數時傳遞任意型別,
下面的代碼宣告a是空介面,因此任何型別的資料都可以存進去
var a interface{} a = 1 fmt.Println(a) a = "taoshihan" fmt.Println(a) a = User{Name: "taoshihan"} fmt.Println(a)
作為函式傳參的時候也是可以的,但是當作為回傳型別時,有時要進行型別斷言,把型別轉回來才能賦值給別的變數
func test1(str string) interface{} { return str} var b string b = test1("taoshihan").(string) fmt.Println(b)
完整原始碼:
package mainimport "fmt"type User struct { Name string}//空介面作為傳參func test(a interface{}) { //可以用這個判斷型別 switch a.(type) { case string: fmt.Println(a) }}//空介面作為回傳func test1(str string) interface{} { return str}func main() { //任何型別都能存進去 var a interface{} a = 1 fmt.Println(a) a = "taoshihan" fmt.Println(a) a = User{Name: "taoshihan"} fmt.Println(a) //空介面作為引數 test("taoshihan") //這里要進行型別斷言,把空介面轉回string var b string b = test1("taoshihan").(string) fmt.Println(b)}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63343.html
標籤:Go
上一篇:Go - Map 集合
