您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
这篇文章主要介绍golang中接口对象如何转型,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
接口对象的转型有两种方式:
1. 方式一:instance,ok:=接口对象.(实际类型)
如果该接口对象是对应的实际类型,那么instance就是转型之后对象,ok的值为true
配合if...else if...使用
2. 方式二:
接口对象.(type)
配合switch...case语句使用
示例:
package main import ( "fmt" "math" ) type shape interface { perimeter() int area() int } type rectangle struct { a int // 长 b int // 宽 } func (r rectangle) perimeter() int { return (r.a + r.b) * 2 } func (r rectangle) area() int { return r.a * r.b } type circle struct { radios int } func (c circle) perimeter() int { return 2 * c.radios * int(math.Round(math.Pi)) } func (c circle) area() int { return int(math.Round(math.Pow(float64(c.radios), 2) * math.Pi)) } func getType(s shape) { if i, ok := s.(rectangle); ok { fmt.Printf("长方形的长:%d,长方形的宽是:%d\n", i.a, i.b) } else if i, ok := s.(circle); ok { fmt.Printf("圆形的半径是:%d\n", i.radios) } } func getType2(s shape) { switch i := s.(type) { case rectangle: fmt.Printf("长方形的长:%d,长方形的宽是:%d\n", i.a, i.b) case circle: fmt.Printf("圆形的半径是:%d\n", i.radios) } } func getResult(s shape) { fmt.Printf("图形的周长是:%d,图形的面积是:%d\n", s.perimeter(), s.area()) } func main() { r := rectangle{a: 10, b: 20} getType(r) getResult(r) c := circle{radios: 5} getType2(c) getResult(c) }
上面的例子使用的是方式一,如果要使用方式2,可以将getType()函数改为:
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) } }
以上是“golang中接口对象如何转型”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。