type Usber interface {start()stop()
}
type Phone struct {Name string
}func (p Phone) start() {fmt.Println(p.Name, "啟動")
}
func (p Phone) stop() {fmt.Println(p.Name, "關機")
}
func main() {p := Phone{Name: "華為手機",}var p1 Usberp1 = pp1.start()
}
結構體實現接口
go中空接口可以當作任意類型
type A interface {
}func main() {var a A = 10fmt.Println(a)a = truefmt.Println(a)
}
空接口做傳參表示可以接收任意類型
切片和map的值用空接口表示可以是任意類型
func main() {var m1 = make(map[string]interface{})m1["a"] = 1m1["b"] = "asd"m1["c"] = truefmt.Println(m1)var s1 = []interface{}{12, true, "123"}fmt.Println(s1)
}
斷言,用接口.(T)來判斷接口類型
func main() {var m1 = make(map[string]interface{})m1["a"] = 1m1["b"] = "asd"m1["c"] = truefmt.Println(m1)var s1 = []interface{}{12, true, "123"}fmt.Println(s1)v, ok := s1[0].(string)if ok {fmt.Println(v)} else {fmt.Println("判斷失敗")}
}
把切片和結構體賦值給空接口類型,不能訪問其中具體的值和屬性
需要使用類型斷言提取出,然后在訪問值
在swich中用.type來判斷斷言類型
switch s1[0].(type) {case int:fmt.Println("int")default:fmt.Println("其他")}
結構體值類型和指針類型都可以賦值給接口變量
type Usber interface {start()stop()
}
type Phone struct {Name string
}func (p Phone) start() {fmt.Println(p.Name, "啟動")
}
func (p Phone) stop() {fmt.Println(p.Name, "關機")
}
func main() {var p1 = Phone{Name: "小米",}var p2 Usber = p1p2.start()var p3 = &Phone{Name: "蘋果",}var p4 Usber = p3p4.start()
}
結構體的方法是指針接收者,只能用指針類型賦值
type Usber interface {start()stop()
}
type Phone struct {Name string
}func (p *Phone) start() {fmt.Println(p.Name, "啟動")
}
func (p *Phone) stop() {fmt.Println(p.Name, "關機")
}
func main() {var p3 = &Phone{Name: "蘋果",}var p4 Usber = p3p4.start()
}
接口嵌套,需要實現所有的接口