標籤:style blog color os ar sp strong div on
An interface type is defined by a set of methods.
A value of interface type can hold any value that implements those methods.
Note: The code on the left fails to compile.
Vertex
doesn‘t satisfy Abser
because the Abs
method is defined only on*Vertex
, not Vertex
.
package mainimport ( "fmt" "math") type Abser interface { Abs() float64 } func main() { var a Abser f := MyFloat(-math.Sqrt2) v := Vertex{3, 4} a = f // a MyFloat implements Abser a = &v // a *Vertex implements Abser // In the following line, v is a Vertex(not *Vertex) // and does Not Implement 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) }
介面現在的看法越來越是只要這個類 對象 結構或者任何東西它實現了某一些方法組合那麼他就實現了這個介面
A Tour of Go Interfaces