Go 接口

作者: SHAN某人 | 来源:发表于2017-12-23 10:35 被阅读0次
    package main
    
    import (
        "fmt"
        "math"
    )
    
    type Abser interface {   //接口类型
        Abs() float64    // 接口抽象方法,将实现与引用分离,便于扩展
    }
    
    func main() {
        var a Abser
        f := MyFloat(-math.Sqrt2)
        v := Vertex{3, 4}
    
        a = f  // a MyFloat 实现了 Abser
        a = &v // a *Vertex 实现了 Abser
    
        // 下面一行,v 是一个 Vertex(而不是 *Vertex)
        // 所以没有实现 Abser。
        //a = v
    
        fmt.Println(a.Abs())
    }
    
    type MyFloat float64
    
    func (f MyFloat) Abs() float64 {
        if f < 0 {
            return float64(-f)
        }
        return float64(f)
    }
    
    type Vertex struct {
        X, Y float64
    }
    
    func (v *Vertex) Abs() float64 {
        return math.Sqrt(v.X*v.X + v.Y*v.Y)
    }
    

    相关文章

      网友评论

        本文标题:Go 接口

        本文链接:https://www.haomeiwen.com/subject/aqifgxtx.html