【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
相关推荐
Hotchip_MEMS9 分钟前
TWS耳机微米级较量:超薄LGA封装如何助力MEMS麦克风小型化?
人工智能·笔记·物联网·电脑
Ztt66666666615 分钟前
金泉方壶四面端正,月白釉却把棱角放柔了
经验分享·笔记·其他·百度·微信公众平台
for_ever_love__27 分钟前
python基础语法学习: 变量, 输入输出, 运算符
网络·python·学习
学习和思考36 分钟前
非自动化专业如何自学PLC?我的6个月学习路线图
笔记·学习·自动化·学习方法
圣殿骑士-Khtangc1 小时前
Go-Map面试核心考点从哈希冲突到并发安全的完整解析
面试·golang·哈希算法
worxfr1 小时前
Go 并发控制:从 Channel 方向约束到实战模式
开发语言·后端·golang
拾陆楼1 小时前
PT: DMSA辅助调tree报告前后级余量脚本
后端·学习
xcLeigh2 小时前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
疯狂打码的少年2 小时前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法
JavaPub-rodert2 小时前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin