Golang接口笔记

本文介绍了Golang中的接口概念,展示了如何通过结构体实现接口,包括单一接口、多接口以及接口嵌套的使用。同时,文章还讨论了空接口的应用,如在存储任意类型数据和创建通用函数中的作用,并给出了实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记

Golang接口

package main

import (
	"fmt"
)

// Usb 如果接口里有方法,必须使用结构体或自定义类型实现这个接口
type Usb interface {
	start()
	stop()
}

// Usb2 示范多接口
type Usb2 interface{}

// Usb3 示范接口的嵌套(此接口相当于融合合并了两个接口, 实例需要实现其内部所有接口的方法)
type Usb3 interface {
	Usb
	Usb2
}

// Phone 该结构体要实现Usb接口就必须要实现Usb接口中的所有方法
type Phone struct {
	Name string
}

// 值类型接受者(实例化值接受者后 值类型和指针类型都可以赋值给接口变量实现接口)
func (p Phone) start() {
	fmt.Println(p.Name, "start启动")
}
func (p Phone) stop() {
	fmt.Println(p.Name, "start停止")
}

// 指针类型接受者(实例化指针类型接受者后 只接收指针类型 必须用地址&赋值给接口变量实现接口)
func (p *Phone) start() {
 	fmt.Println(p.Name, "start启动")
}
func (p *Phone) stop() {
	fmt.Println(p.Name, "start停止")
}

// Camera 该结构体要实现Usb接口就必须要实现Usb接口中的所有方法
type Camera struct {
	name string
}

func (c Camera) start() {
	fmt.Println(c.name, "start启动")
}
func (c Camera) stop() {
	fmt.Println(c.name, "start停止")
}

// Test 测试接口
type Test struct {
	name string
}

func (t Test) start() {
	fmt.Println(t.name, "start启动")
}

func test(usb Usb) {
	usb.start()
	usb.stop()
}

// Empty 空接口,常用来表示任意数据类型
type Empty interface{}

func main() {
	// Phone结构体实例phone实现接口
	phone := Phone{
		Name: "荣耀9X",
	}
	// Golang中接口就是一个数据类型
	var usb1 Usb
	usb1 = phone
	usb1.start()

	// Camera结构体实例camera实现多接口
	camera := Camera{
		name: "康威相机",
	}
	var usb2 Usb = camera
	var usb3 Usb2 = camera
	usb2.stop()
	fmt.Println("多接口!!!", usb3)

	// t := Test{
	// 	name: "该结构体没有完全实现接口方法会报错",
	// }
	test(phone)
	// test(t)

	var empty Empty
	var a string = "12345"
	empty = a // 空接口可以用任意数据类型实现 表示是任意类型 这里用string类型做例子
	fmt.Println(empty)

	// 例如用空接口表示map存任意类型的值
	var m1 = make(map[string]interface{})
	m1["name"] = "why"
	m1["age"] = 19
	m1["sex"] = true
	fmt.Println(m1)

	// 存储任意类型的切片
	var c = []interface{}{1, "why", true}
	fmt.Println(c)

	// 但是用空接口实现的任意类型切片或任意类型map数据类型无法获取到其中的结构体或切片的内部值

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值