menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right All_wiki chevron_right the-way-to-go_ZH_CN chevron_right eBook chevron_right 11.5.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    11.5.md
    1.27 KB / 2024-07-16 23:14:27
        # 11.5 测试一个值是否实现了某个接口
    
    这是 11.3 类型断言中的一个特例:假定 `v` 是一个值,然后我们想测试它是否实现了 `Stringer` 接口,可以这样做:
    
    ```go
    type Stringer interface {
        String() string
    }
    
    if sv, ok := v.(Stringer); ok {
        fmt.Printf("v implements String(): %s\n", sv.String()) // note: sv, not v
    }
    ```
    
    `Print()` 函数就是如此检测类型是否可以打印自身的。
    
    接口是一种契约,实现类型必须满足它,它描述了类型的行为,规定类型可以做什么。接口彻底将类型能做什么,以及如何做分离开来,使得相同接口的变量在不同的时刻表现出不同的行为,这就是多态的本质。
    
    编写参数是接口变量的函数,这使得它们更具有一般性。
    
    **使用接口使代码更具有普适性。**
    
    标准库里到处都使用了这个原则,如果对接口概念没有良好的把握,是不可能理解它是如何构建的。
    
    在接下来的章节中,我们会讨论两个重要的例子,试着去深入理解它们,这样你就可以更好的应用上面的原则。
    
    ## 链接
    
    - [目录](directory.md)
    - 上一节:[类型判断:type-switch](11.4.md)
    - 下一节:[使用方法集与接口](11.6.md)
    
    
    links
    file_download