【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
相关推荐
M78佐菲3 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
噜~噜~噜~4 小时前
操作系统笔记-2.3.5.1.1生产者-消费者问题
笔记·操作系统
yi.Ist4 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
骐骥18 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦8 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
谢白羽9 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
噜~噜~噜~9 小时前
操作系统笔记-2.3.5.2 读者-写者问题
笔记·操作系统
m4Rk_10 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
闭月之泪舞10 小时前
C++编程学习
c++·学习
MindUp11 小时前
企业私有化文件管理系统选型实录:从部署架构到AI能力的技术调研笔记
人工智能·笔记·架构