gocron源代碼中的Action那個地方,就是個空接口類型Action interface{},能夠傳遞任意類型進去,這裏是傳了個函數進去web
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)
做爲函數傳參的時候也是能夠的,可是看成爲返回類型時,有時要進行類型斷言,把類型轉回來才能賦值給別的變量spa
func test1(str string) interface{} { return str } var b string b = test1("taoshihan").(string) fmt.Println(b)
完整源碼:code
package main import "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) }