教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 GoLang学习笔记(三十六)接口对象的转型

GoLang学习笔记(三十六)接口对象的转型

发布时间:2022-02-02   编辑:jiaochengji.com
教程集为您提供GoLang学习笔记(三十六)接口对象的转型等资源,欢迎您收藏本站,我们将为您提供最新的GoLang学习笔记(三十六)接口对象的转型资源

接口对象转型
方式一:
instance,ok:=接口对象.(实际类型)
如果该接口对象是对应的实际类型,那么instance就是转型之后对象,ok的值为true
配合if...else if...使用
方式二:
接口对象.(type)
配合switch...case语句使用

<pre class="has"><code class="language-Go">type shape interface { perimeter() float64 area() float64 } type rectangle struct { a, b float64 } type triangle struct { a, b, c float64 } type circular struct { radius float64 } func (r rectangle) perimeter() float64 { return (r.a r.b) * 2 } func (r rectangle) area() float64 { return r.a * r.b } func (t triangle) perimeter() float64 { return t.a t.b t.c } func (t triangle) area() float64 { p := t.perimeter() / 2 return math.Sqrt(p * (p - t.a) * (p - t.b) * (p - t.c)) } func (c circular) perimeter() float64 { return c.radius * math.Pi * 2 } func (c circular) area() float64 { return math.Pow(c.radius, 2) * math.Pi } func getType(s shape) { if i,ok := s.(rectangle); ok{ fmt.Printf("图形的长:%.2f,图形的宽:%.2f \n", i.a, i.b) } else if i,ok := s.(triangle); ok { fmt.Printf("图形的第一个边:%.2f,图形的第二个边:%.2f,图形的第三个边:%.2f \n", i.a, i.b, i.c) } else if i,ok := s.(circular); ok { fmt.Printf("图形的半径:%.2f \n",i.radius) } } func getResult(s shape) { fmt.Printf("周长为:%.2f,面积为:%.2f \n",s.perimeter(),s.area()) fmt.Println("------------------------------") } func transInterface1() { var s shape s = rectangle{10, 20} getType(s) getResult(s) s = triangle{30, 40, 50} getType(s) getResult(s) s = circular{50} getType(s) getResult(s) }</code></pre>

上面的例子使用的是方式一,如果要使用方式2,可以将getType()函数改为:

<pre class="has"><code class="language-Go">func getType(s shape) { switch i := s.(type) { case rectangle: fmt.Printf("图形的长:%.2f,图形的宽:%.2f \n", i.a, i.b) case triangle: fmt.Printf("图形的第一个边:%.2f,图形的第二个边:%.2f,图形的第三个边:%.2f \n",i.a,i.b,i.c) case circular: fmt.Printf("图形的半径:%.2f \n",i.radius) } }</code></pre>

PS:上面求三角形面积使用了海伦公式求三角形的面积,公式为:

三角形的面积=平方根[三角形周长的一半×(三角形周长的一半减去第一个边)×(三角形周长的一半减去第二个边)×(三角形周长的一半减去第三个边)]

到此这篇关于“GoLang学习笔记(三十六)接口对象的转型”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
GoLang学习笔记(三十六)接口对象的转型
想系统学习GO语言(Golang
go语言学习笔记(十三)——接口类型
GoLang学习笔记(三十四)接口及空接口
php入门实例查询数据库记录
Golang学习笔记(十二):接口的声明与使用
go语言学习笔记(第3章)—面向对象编程
go struct 成员变量后面再加个字符串是什么意思?_Go语言的学习笔记(第十章) 接口...
golang基础教程
asp.net中2, 8, 10, 16进制转换

[关闭]
~ ~