【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 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20161 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本1 天前
离散数学第六课
学习·离散数学
ttwuai2 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
深圳老胡2 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
codeejun2 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型