[Go] gocron源碼閱讀-空接口類型interface{}

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)
}
相關文章
相關標籤/搜索