Go 言語のインターフェイスチュートリアル

GolangGolangBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験は、Go言語のインターフェイスに関するものです。インターフェイスは、メソッドシグネチャの名前付きコレクションです。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) go/ObjectOrientedProgrammingGroup -.-> go/interfaces("Interfaces") subgraph Lab Skills go/interfaces -.-> lab-15484{{"Go 言語のインターフェイスチュートリアル"}} end

インターフェイス

問題は、Go言語でインターフェイスを実装することです。インターフェイス内のすべてのメソッドを実装すればよいのです。ここでは、rectcircleに対してgeometryを実装します。

  • Go言語でインターフェイスを実装する。
  • インターフェイス内のすべてのメソッドを実装する。
  • 汎用的なmeasure関数を使って、任意のgeometryに対して動作させる。
  • circlerect構造体のインスタンスをmeasureの引数として使う。
$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793

## Goのインターフェイスに関する詳細を学ぶには、この
## [素晴らしいブログ記事](https://jordanorelli.tumblr.com/post/32665860244/how-to-use-interfaces-in-go) を参照してください。

以下が完全なコードです:

// _インターフェイス_ は、メソッド
// シグネチャの名前付きコレクションです。

package main

import (
	"fmt"
	"math"
)

// ここには、幾何学的形状のための基本的なインターフェイスがあります。
type geometry interface {
	area() float64
	perim() float64
}

// 私たちの例では、このインターフェイスを
// `rect` と `circle` の型で実装します。
type rect struct {
	width, height float64
}
type circle struct {
	radius float64
}

// Go言語でインターフェイスを実装するには、
// インターフェイス内のすべてのメソッドを
// 実装するだけです。ここでは、`rect` に対して
// `geometry` を実装します。
func (r rect) area() float64 {
	return r.width * r.height
}
func (r rect) perim() float64 {
	return 2*r.width + 2*r.height
}

// `circle` に対する実装です。
func (c circle) area() float64 {
	return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
	return 2 * math.Pi * c.radius
}

// 変数がインターフェイス型を持っている場合、
// その名前付きインターフェイスに含まれる
// メソッドを呼び出すことができます。ここには、
// 任意の `geometry` に対して動作させるために
// これを利用した汎用的な `measure` 関数があります。
func measure(g geometry) {
	fmt.Println(g)
	fmt.Println(g.area())
	fmt.Println(g.perim())
}

func main() {
	r := rect{width: 3, height: 4}
	c := circle{radius: 5}

	// `circle` と `rect` の構造体型は両方とも
	// `geometry` インターフェイスを実装しているので、
	// これらの構造体のインスタンスを
	// `measure` の引数として使うことができます。
	measure(r)
	measure(c)
}

まとめ

この実験は、Go言語でインターフェイスを実装することに関するものです。私たちは、rectcircle に対して geometry インターフェイスを実装し、任意の geometry に対して動作させるための汎用的な measure 関数を使用しました。