当前位置: 首页 > news >正文

Go入门之接口

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()
}

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

http://www.dtcms.com/a/35598.html

相关文章:

  • VMware虚拟机17.5.2版本下载与安装(详细图文教程包含安装包)
  • C语言:字符函数和字符串函数
  • 【Swift 算法实战】利用 KMP 算法高效求解最短回文串
  • scp工具
  • ES6新增的变量
  • (七)趣学设计模式 之 适配器模式!
  • 算法15--BFS
  • 动态链接库
  • Pretraining Language Models with Text-Attributed Heterogeneous Graphs
  • Kubernetes控制平面组件:API Server Node 授权机制 详解
  • 刷题记录08
  • 16、Python面试题解析:python中的浅拷贝和深拷贝
  • 《Effective Objective-C》阅读笔记(上)
  • 电机控制的空间矢量调制 (SVPWM)
  • openharmony5.0中hdf框架中实现驱动程序的动态加载和管理的技术细节分析
  • C++中tuple的用法
  • Spring Boot 中的日志管理
  • 数据库设计的优化建议
  • AcWing 299 裁剪序列
  • 6种MySQL高可用方案对比分析
  • C语言基本知识------指针(4)
  • springboot004网页时装购物系统(源码+数据库+文档)
  • threejs 安装教程
  • 51单片机测试题AI作答测试(DeepSeek Kimi)
  • w~视觉~合集13
  • Sinusoidal、RoPE和可学习嵌入的详细介绍及它们增强位置感知能力的示例
  • 信而泰CCL仿真:解锁AI算力极限,智算中心网络性能跃升之道
  • 可视化报表
  • 括号配对问题 【刷题反思】
  • DeepSeek AI人工智能该如何学习?