1. ホーム
  2. スクリプト・コラム
  3. ゴラン

golangでインターフェースオブジェクトを変換する2つの方法

2022-02-14 19:49:06

インターフェース・オブジェクトを変換するには、2つの方法があります。

1. 方法1: インスタンス,OK:=インターフェース・オブジェクト。(実際の型)

  インターフェースオブジェクトが対応する実際の型であれば、instanceは変換されたオブジェクトであり、okの値は真である
  if... ...else if...と併用してください。使用方法

2.方法2

  インターフェースオブジェクトです。(タイプ)
  switch... .case文と一緒に使用します。

package main
 
import (
    "fmt"
    "math"
)
 
type shape interface {
    perimeter() int
    area() int
}
 
type rectangle struct {
    a int // length
    b int // width
}
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 (circle) perimeter() int {
    return 2 * c.radios * int(math.Round(math.Pi))
}
func (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("The length of the rectangle: %d,the width of the rectangle is: %d\n", i.a, i.b)
    } else if i, ok := s.(circle); ok {
        fmt.Printf("The radius of the circle is: %d\n", i.radios)
    }
}
 
func getType2(s shape) {
    switch i := s.(type) {
    case rectangle:
        fmt.Printf("Length of rectangle: %d,Width of rectangle is: %d\n", i.a, i.b)
    case circle:
        fmt.Printf("The radius of the circle is: %d\n", i.radios)
    }
}
 
func getResult(shape) {
    fmt.Printf("The perimeter of the shape is: %d,the area of the shape is: %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)
}

上記の例では方法1を使っていますが、方法2を使うには、getType()関数を次のように変更します。

func getType(s shape) {
 switch i := s.(type) {
 case rectangle:
  fmt.Printf("length of shape: %.2f, width of shape: %.2f \n", i.a, i.b)
 case triangle:
  fmt.Printf("first edge of the graph: %.2f, second edge of the graph: %.2f, third edge of the graph: %.2f \n", i.a, i.b, i.c)
 case circular:
  fmt.Printf("radius of the graph: %.2f \n",i.radius)
 }
}

追記:上記の三角形の面積は、ヘレンの公式を使って、次のように求められます。

三角形の面積=平方根[三角形の外周の半分×(三角形の外周の半分から1辺を引いたもの)×(三角形の外周の半分から2辺を引いたもの)×(三角形の外周の半分から3辺を引いたもの)]とする。

golangのインターフェースオブジェクトの変換に関するこの記事がすべてです。golangのインターフェースオブジェクトに関するより詳しい情報は、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続きご覧ください!今後ともスクリプトハウスをよろしくお願いします。