Go入门之接口

发布于:2025-02-26 ⋅ 阅读:(20) ⋅ 点赞:(0)
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()
}

接口嵌套,需要实现所有的接口


网站公告

今日签到

点亮在社区的每一天
去签到