zoukankan      html  css  js  c++  java
  • [Go] gocron源码阅读-空接口类型interface{}

    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 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)
    }
  • 相关阅读:
    stmt.executeQuery不执行解决办法
    可变参数
    深度理解JVM
    JDBC 基础入门
    Flask中Mysql数据库的常见操作
    Flask与mysql数据库字段类型的区别以及基本用法
    Flask里面session的基本操作
    Flask里面的cookie的基本操作
    Flask表单(form)的应用
    Flask网页模板的入门
  • 原文地址:https://www.cnblogs.com/taoshihan/p/11870147.html
Copyright © 2011-2022 走看看