首页后端开发其他后端知识Golang中接口对象的转型方式有哪些

Golang中接口对象的转型方式有哪些

时间2024-03-26 09:00:03发布访客分类其他后端知识浏览1119
导读:这篇文章给大家分享的是“Golang中接口对象的转型方式有哪些”,文中的讲解内容简单清晰,对大家认识和了解都有一定的帮助,对此感兴趣的朋友,接下来就跟随小编一起了解一下“Golang中接口对象的转型方式有哪些”吧。 接口对象的...
这篇文章给大家分享的是“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)
 }

}
    

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

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



以上就是关于“Golang中接口对象的转型方式有哪些”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Golang中接口对象的转型方式有哪些
本文地址: https://pptw.com/jishu/653395.html
PHP mkdir创建文件夹的方法是什么?要注意哪些? node-saas库用于做什么的,怎样使用

游客 回复需填写必要信息