千家信息网

golang中接口对象如何转型

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍golang中接口对象如何转型,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!接口对象的转型有两种方式:1. 方式一:instance,ok:=接口对象.(实际类
千家信息网最后更新 2025年01月20日golang中接口对象如何转型

这篇文章主要介绍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中接口对象如何转型"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0