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)
    }
  • 相关阅读:
    移动性能测试 | 持续集成中的 Android 稳定性测试
    iOS 测试 | iOS 自动化性能采集
    Google 测试总监聊如何经营成功的测试职业生涯
    浅谈一下可扩展性网站架构设计
    一条SQL执行慢的原因有哪些
    为什么在做微服务设计的时候需要DDD?
    是时候拥抱.NET CORE了
    MySql多表查询优化
    九种高性能可用高并发的技术架构
    HTTP协议总结
  • 原文地址:https://www.cnblogs.com/taoshihan/p/11870147.html
Copyright © 2011-2022 走看看