職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

go言語のインターフェース

2023年03月10日 | GO言語
インターフェイス


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

【インターフェース】
インターフェースとは、インターフェースを介してインターフェースと一致する複数の異なるメソッドを同じ方法で呼び出せるようになる。

インターフェースは、メソッドだけを定義する

・メソッドだけのプログラム(インターフェースを使わない)
// dogcat.go
package main

import "fmt"

//Dog-犬の構造体
type Dog struct{}

//Cry - 犬が吠える
func (d *Dog) Cry() {
fmt.Println("わんわん")
}

//Cat - 猫の構造体
type Cat struct{}

//Cry - 猫が鳴く
func (c *Cat) Cry() {
fmt.Println("にゃ-ご")
}

func main() {
//犬と猫を作る
dog := new(Dog)
Cat := new(Cat)
//犬と猫が鳴く
dog.Cry()
Cat.Cry()
}
・実行
PS D:\GO言語\サンプルプログラム\Go-7\インターフェース> go run dogcat.go
わんわん
にゃ-ご

◆インターフェースを使うプログラム
インターフェースを使用すると、犬とネコを「動物」というカテゴリにまとめて、犬猫の区別無く鳴かせることができる
インターフェース型はメソッドの宣言だけを定義したもので、メソッドには実行するプログラムコードは記述しない!

type name interface {
.....
......
}
・サンプルコード
// animal.go
package main

import "fmt"

//Animal - 動物のインターフェース
type Animal interface {
Cry()
}

//Dog - 犬の構造体
type Dog struct{}

//Cry - 犬が吠える
func (d *Dog) Cry() {
fmt.Println("わんわん")
}

//Cat - 猫の構造体
type Cat struct{}

//Cat - 猫が鳴く
func (c *Cat) Cry() {
fmt.Println("にゃーご")
}

func main() {
//犬と猫を作る
dog := new(Dog)←犬の構造体のポインタ
cat := new(Cat)←猫の構造体のポインタ
//犬と猫が鳴く
dog.Cry()
cat.Cry()
//犬と猫のスライスを作る
animals := [...]Animal{dog, cat}
for _, a := range animals {
a.Cry()←インターフェースならではの表現
}
}


・実行
PS D:\GO言語\サンプルプログラム\Go-7\インターフェース> go run animal.go
わんわん
にゃーご
わんわん
にゃーご



コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« goのコンポジット型--スライム編 | トップ | Go言語のインターフェース2 »
最新の画像もっと見る

コメントを投稿

GO言語」カテゴリの最新記事