Go语言学习:每日一练3

Go语言学习:每日一练3

目录

方法

方法是一类有接收者参数的函数。

接收者的类型定义和方法的声明必须在一个包里

go 复制代码
type MyInt int

func (m MyInt) Add(add int) int {
	return int(m) + add
}
//OR
func (m *MyInt) Add(add int) int {
	return int(m) + add
}
func main() {
	v := MyInt(12)
	fmt.Println(v.Add(1))
}
  • 接收者值传递
  • go的优化--调用的时候不需要区分接受者是指针还是源类型
go 复制代码
//等价的
func (reciever Vertex) Test() {}
func Test(receiver Vertex) {}

接口

接口类型的定义为一组方法签名。

接口类型的变量可以持有任何实现了这些方法的值。

go 复制代码
type Abser interface{
    Abs() float64
}
go 复制代码
type Vertex struct {
    X, Y float64
}
func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
    v := Vertex{3, 4}
    var abser Abser
    abser = &v
//方法定义的接受者为指针,所以接口的变量只能持有一个指针
//但接收值为源类型的时候,接口的变量没有持有限制。
}

继承

go没有提供继承的机制,但是又类似于继承的处理方式。

go 复制代码
type Inner struct {
	name string
}

type Outer struct {
	Inner
	Inner2 Inner
	string
}
func (inner Inner) SayName() {
	fmt.Println(inner.name)
}

当结构体中存在匿名字段的时候,结构体可以直接访问其属性和方法,看起来像继承了一样。

go 复制代码
func main() {
	out := Outer{
		Inner{"hello"},
		Inner{"world"},
		"111"}
	fmt.Println(out.name)
	out.SayName()
	fmt.Println(out.string)
}

类型断言

类型断言提供了一种访问接口底层具体值的方法

go 复制代码
t := i.(T)  //失败会触发panic

t, ok = i.(T) //更推荐的语法

类型选择

go 复制代码
switch v := i.(type) {
	case int:
		fmt.Printf("二倍的 %v 是 %v\n", v, v*2)
	case string:
		fmt.Printf("%q 长度为 %v 字节\n", v, len(v))
	default:
		fmt.Printf("我不知道类型 %T!\n", v)
	}

👑 天下英雄出我辈,一入江湖岁月催 我是热爱生活的「 无间行者 」,努力把实践过的解决方案分享给大家 如果这篇文章对你有用,一键三连,感谢你的鼓励,让我知道你在看


相关推荐
大可不必了16 分钟前
03 函数定义和调用
开发语言·python
I_belong_to_jesus18 分钟前
C++关于分支预测的优化1
开发语言·c++·算法
承渊政道1 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛1 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
Rabitebla2 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
Gary移动存储固件2 小时前
eMMC5.1协议中文学习讲解(6.6.17~6.6.22.4.6)
学习·ufs·emmc·nand·存储固件
一个天蝎座 白勺 程序猿3 小时前
别让收藏夹替你学习:我搭AI知识体系的完整方法,脚本直接拿去用
人工智能·学习·ai·ai学习
eggwyw3 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
楚山之石4 小时前
【Nat Biomed Eng】Connectome 2.0 超高梯度扫描仪:500 mT/m 与 600 T/m/s 把活体人脑微观结构分辨推进到亚微米级
图像处理·学习·数据分析·mri
坤坤子吖6 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习