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 Usber
p1 = p
p1.start()
}
结构体实现接口
go中空接口可以当作任意类型
type A interface {
}
func main() {
var a A = 10
fmt.Println(a)
a = true
fmt.Println(a)
}
空接口做传参表示可以接收任意类型
切片和map的值用空接口表示可以是任意类型
func main() {
var m1 = make(map[string]interface{})
m1["a"] = 1
m1["b"] = "asd"
m1["c"] = true
fmt.Println(m1)
var s1 = []interface{}{12, true, "123"}
fmt.Println(s1)
}
断言,用接口.(T)来判断接口类型
func main() {
var m1 = make(map[string]interface{})
m1["a"] = 1
m1["b"] = "asd"
m1["c"] = true
fmt.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 = p1
p2.start()
var p3 = &Phone{
Name: "苹果",
}
var p4 Usber = p3
p4.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 = p3
p4.start()
}
接口嵌套,需要实现所有的接口