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

囲碁言語基本囲碁インターフェイス使用例詳細

2022-01-06 08:09:34

概要

Goのインターフェースはメソッドシグネチャの集合体です。インターフェイスは宣言されるだけで、実装はされず、変数も含まれません。

構文

インターフェイスの定義

type [interface name] interface {
    Method name 1 (parameter list) Return value list   
    method name 2 (list of parameters) list of returned values
    ...
}


type Isay interface{
  sayHi()
}


インターフェースの実装

使用例

// Define the implementation class of the interface
type Chinese struct{}
//Implement the interface
func (_ *Chinese) sayHi() {
  fmt.Println("Chinese sayHi")
}


//Chinese
type Chinese struct{}
//Americans
type Americans struct{}
func (this *Chinese) sayHi() {
  fmt.Println("Chinese sayHi")
}
func (this Americans) sayHi() {
  fmt.Println("Americans say hi")
}
// call
&Chinese{}.sayHi()
Americans{}.sayHi()


空のインターフェース

Go 言語の他のすべてのデータ型は、null インターフェースを実装しています。

interface{}


var v1 interface{} = 1
var v2 interface{} = "abc"
var v3 interface{} = struct{ X int }{1}


関数が任意のデータ型を受け取ることを意図している場合、その参照先をinterface{}として宣言することができます。最も典型的な例は,標準ライブラリfmtパッケージに含まれるPrint関数とFprint関数のファミリーです.

func Fprint(w io.Writer, a . . interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a . . interface{})
func Fprintln(w io.Writer, a . . interface{})
func Print(a . . interface{}) (n int, err error)
func Printf(format string, a . .interface{})
func Println(a ... .interface{}) (n int, err error)


インターフェースの組合せ

1つのインタフェースが1つ以上のインタフェースを含む

//speaking
type Isay interface{
  sayHi()
}
//work
type Iwork interface{
  work()
}

//define an interface that combines the above two interfaces
type IPersion interface{
  Isay
  Iwork
}

type Chinese struct{}

func (_ Chinese) sayHi() {
  fmt.Println("Chinese speaks Chinese")
}

func (_ Chinese) work() {
	fmt.Println("Chinese people working in the field")
}

// The above interface is equivalent to.
type IPersion2 interface {
	sayHi()
	work()
}


概要

インターフェイスの型はデフォルトではポインターで、空のインターフェイスを使用すると、任意の値を保持できます 空のインターフェイスでは動的な値を比較できません インターフェイスを定義するには、これらのメソッドをすべて実装して、コンパイルして使用する必要があります

package main
import "fmt"
//Chinese
type Isay interface {
	sayHi()
}
//work
type Iwork interface {
	work()
}
//Chinese
type Chinese struct{}
//Americans
type Americans struct{}
func (this *Chinese) sayHi() {
	fmt.Println("Chinese sayHi")
}
func (this Americans) sayHi() {
	fmt.Println("Americans say hi")
}
type IPersion interface {
	Isay
	Iwork
}
func (_ Chinese) work() {
	fmt.Println("Chinese working in the field")
}
func main() {
	var chinese Isay = &Chinese{}
	chinese.sayHi()
	Americans{}.sayHi()
	//Interface combination
	var ipersion IPersion = &Chinese{}
	ipersion.sayHi()
	ipersion.work()
}


上記は、Go言語基本囲碁インターフェイスの使用例の詳細です、Go言語基本についての詳細情報は、スクリプトハウスの他の関連記事に注目してください