秒はgolangインタフェースを理解します

6363 ワード

インタフェースの詳細
  • は、コードがタイプの特定の実装に従って異なる動作をとることができる能力を指す.
  • pythonおよびC++には、クラスを継承する方法で書き換える、マルチステート
  • を実現する.
  • C++の中の経典の例を持って見て、面積と周長を求めます
  • は、circleタイプおよびrectangleタイプをそれぞれ定義し、その周長および面積を返す方法関数
  • を定義する.
  • はgeometryタイプインタフェースを介して、この2つの方法
  • を宣言する.
  • measure関数では、関数の受信者はインタフェースタイプ変数
  • である.
  • しかし呼び出す時、直接circleとrectangleタイプの変数を詰め込むことができて、この2つのタイプの変数がインタフェースの中で宣言したすべての方法を実現したため、多態を実現して、1つのmeasure関数holdはこのインタフェースを実現したすべてのデータ型??

  • package main
    
    import (
    	"fmt"
    	"math"
    )
    
    type geometry interface {
    	area() float32
    	perimeter() float32
    }
    
    type rect struct {
    	width, height float32
    }
    type circle struct {
    	radius float32
    }
    
    func (r rect) area() float32 {
    	return r.height * r.width
    }
    
    func (c circle) area() float32 {
    	return math.Pi * c.radius * c.radius
    }
    
    func (r rect) perimeter() float32 {
    	return 2 * (r.height + r.width)
    }
    
    func (c circle) perimeter() float32 {
    	return 2 * math.Pi * c.radius
    }
    
    func measure(g geometry) {
    	fmt.Println(g.area())
    	fmt.Println(g.perimeter())
    }
    
    func main() {
    	r := rect{3, 4}
    	c := circle{3}
    	measure(r)
    	measure(c)
    }
    
    

    実行結果:
    12
    14
    28.274334
    18.849556