【Go语言入门学习笔记】Part13.结构体与接口

一、前言

结构体操作同c,接口隐式实现,面向对象。

二、学习代码

Go 复制代码
package main

import "fmt"

// 接口
// 下面可以写方法来实现其中的函数
// 如果一个结构体这几个函数都实现了,那么就可以用这个接口的类型来接收这个结构体的实例
type cal interface {
	areaSize() float64
	perimeter() float64
}

//下面两个结构体定义
type area struct {
	long  int
	width int
}

type circle struct {
	radius float64
}

func (x *area) getLong() int { //结构体指针的方法,调用,可改变实际的值
	return x.long
}

//下面四个实现接口中的函数
func (x area) areaSize() float64 { //方法,可以结构体直接加点调用
	return float64(x.long * x.width)
}

func (x area) perimeter() float64 {
	return float64(2 * (x.long + x.width))
}

func (c circle) areaSize() float64 {
	return 3.14 * c.radius * c.radius
}

func (c circle) perimeter() float64 {
	return 2 * 3.14 * c.radius
}

func menu(c cal) { //传参要求是cal接口类型,a和c都实现了cal接口,所以可以传入
	fmt.Println("面积:", c.areaSize())
	fmt.Println("周长:", c.perimeter())
}

func main() {
	a := area{long: 10, width: 5} //结构体操作同c
	fmt.Println(a.areaSize())
	a.width = 10 //结构体赋值
	fmt.Println(a.areaSize())

	pa := &a                  //结构体指针
	fmt.Println(pa.getLong()) //用指针的方法

	c := circle{radius: 5}
	fmt.Println(c.areaSize())
	//只要一个类型拥有接口声明的所有方法,它就自动实现了该接口。
	//下面相当于实现了接口的两个方法,areaSize()和perimeter(),所以可以传入menu函数
	menu(a) //传入结构体
	menu(c) //传入结构体
}
三、运行结果
bash 复制代码
50
100
10
78.5
面积: 100
周长: 40
面积: 78.5
周长: 31.400000000000002
相关推荐
学计算机的计算基1 小时前
回溯算法下篇:四道经典题讲透约束剪枝、原地标记、预计算与状态压缩
java·笔记·算法
雷工笔记1 小时前
Ubuntu迁移记录
笔记·ubuntu
microrain1 小时前
从设备孤岛到智能协同:SagooIoT场景联动实战解析
物联网·golang·sagooiot
Leekwen1 小时前
认识人与人的大不同
学习·思考·生活·认知高度·审视自己
一只小菜鸡..1 小时前
Stanford CS144 学习笔记 (九):大师访谈与互联网的未来
笔记·学习
范什么特西1 小时前
每日学习-06
学习
十月的皮皮2 小时前
STM32从零到量产开发:四路继电器工业控制模块开发实战笔记(小白视角)
c语言·笔记·stm32·stm32cubemx·hal库
疯狂打码的少年2 小时前
【软件工程】软件项目管理(人员/产品/过程/项目)
笔记·软件工程
woshihuanglaoshi2 小时前
参数验证_Flutter在鸿蒙平台确保路由参数类型安全
学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统