【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
相关推荐
码剑客9 小时前
Gin+GORM+Redis 项目开发常见性能坑汇总(Go后端避坑指南)
redis·后端·golang·gin
承渊政道9 小时前
Linux网络学习【五种IO模型与⾮阻塞IO】
linux·网络·学习·ubuntu·io模型·非阻塞io
FungLeo9 小时前
成为全栈·Go 后端篇·换后端不改前端:四个客户端如何做兼容回归
flutter·golang·go·成为全栈·兼容测试·taro 小程序
何中应9 小时前
【Go-1】变量&常量定义
开发语言·后端·golang
无心水10 小时前
20、大数据架构设计理论与实践 核心考点与学习笔记
大数据·笔记·学习·架构师·系统架构设计师·软考系统架构设计师·架构设计师
程序员梅雨10 小时前
【从零开始学习数据仓库 | 第三篇】: Flume——数据采集基石
java·大数据·数据仓库·后端·学习·flume
snysy10 小时前
WordPress伪静态404故障排查笔记
android·笔记·wordpress
Z21-X10 小时前
云原生运维实战笔记:华为云计算与网络类服务全景解析
运维·笔记·学习·云原生·华为云
半壶清水10 小时前
[软考网规考点笔记]-局域网之冗余网关技术
网络·笔记·智能路由器
redtank200010 小时前
纯血鸿蒙学习效率三件套实测:背单词艾宾浩斯曲线、时间记录与睡眠辅助
学习·华为·harmonyos