English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Go言語では、インターフェースはメソッドのシグネチャのコレクションであり、同時に一種のタイプでもあり、インターフェースタイプの変数を作成できることを意味します。よく知られているように、Go言語は継承をサポートしていませんが、Goインターフェースは完全にネストをサポートしています。ネストプロセス中に、一つのインターフェースは他のインターフェースをネストすることができますし、一つのインターフェースは他のインターフェースの中にメソッドのシグネチャをネストすることもできます。どちらも結果は例と同じです1および2に示されるのと同じです。単一のインターフェースに任意の数のインターフェースをネストすることができます。また、インターフェースのメソッドに何か変更があった場合、そのインターフェースを他のインターフェースにネストする際に、ネストされたインターフェースにも反映されます、例えば3示されています。
文法:
type interface_name1 interface { Method1() } type interface_name2 interface { Method2() } type finalinterface_name interface { interface_name1 interface_name2 } または type interface_name1 interface { Method1() } type interface_name2 interface { Method2() } type finalinterface_name interface { Method1() Method2() }
インターフェースのネストの例1:
package main import "fmt" // インターフェース 1 type AuthorDetails interface { details() } // インターフェース 2 type AuthorArticles interface { articles() } // インターフェース 3 //インターフェース3ネストされたインターフェース1およびインターフェース2 type FinalDetails interface { AuthorDetails AuthorArticles } // 構造体 type author struct { a_name string branch string college string year int salary int particles int tarticles int } // インターフェースを実現1のメソッド func (a author) details() { fmt.Printf("作者: %s", a.a_name) fmt.Printf("\n部門: %s 通過日付: %d", a.branch, a.year) fmt.Printf("\n大学名称: %s", a.college) fmt.Printf("\n給与: %d", a.salary) fmt.Printf("\n公開された記事数: %d", a.particles) } // インターフェースを実現2のメソッド func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\n未定義の記事数: %d", pendingarticles) } func main() { // 構造体割り当て values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, } // FinalDetailsインターフェースを使用してインターフェース1,2のメソッド var f FinalDetails = values f.details() f.articles() }
出力:
作者: Mickey 学科: コンピュータサイエンス 通過日: 2012 大学名: XYZ 給与: 50000 公開された記事数: 209 未定義の記事数: 100
使用方法:上記の例のように、我々には3つのインターフェースがあります。インターフェース1および2がシンプルなインターフェースの場合、インターフェース3がネストされたインターフェースを含む場合、その中に1および2インターフェース。1およびインターフェース2が何か変更があった場合、インターフェース3全て反映されます。インターフェース3インターフェースにアクセスできます1および2に存在する全てのメソッド。
インターフェースメソッドのネスト:
package main import "fmt" // インターフェース 1 type AuthorDetails interface { details() } // インターフェース 2 type AuthorArticles interface { articles() } // インターフェース 3 //インターフェース3 インターフェースを内包1およびインターフェースのメソッド type FinalDetails interface { details() articles() } // 構造体 type author struct { a_name string branch string college string year int salary int particles int tarticles int } // インターフェースを実現1のメソッド func (a author) details() { fmt.Printf("作者: %s", a.a_name) fmt.Printf("\n部門: %s 通過日付: %d", a.branch, a.year) fmt.Printf("\n大学名称: %s", a.college) fmt.Printf("\n給与: %d", a.salary) fmt.Printf("\n公開された記事数: %d", a.particles) } // インターフェースを実現2のメソッド func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\n未定義の記事数: %d", pendingarticles) } func main() { // 構造体割り当て values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, }
出力:
作者: Mickey 学科: コンピュータサイエンス 通過日: 2012 大学名: XYZ 給与: 50000 公開された記事数: 209 未定義の記事数: 100
使用方法:上記の例のように、我々には3つのインターフェースがあります。インターフェース1および2がシンプルなインターフェースの場合、インターフェース3がネストされたインターフェースを含む場合、その中に1および2インターフェースメソッドのシグネチャ。したがって、インターフェース1およびインターフェース2のメソッドが何か変更があった場合、インターフェース3中の3インターフェースにアクセスできます1および2に存在する全てのメソッド。
インターフェースのネストと同時に独自のメソッドを持つインターフェースの例3:
package main import "fmt" // インターフェース 1 type AuthorDetails interface { details() } // インターフェース 2 type AuthorArticles interface { articles() picked() } // インターフェース 3 //インターフェース3インターフェースをネスト1およびインターフェース2,同時に自分自身のメソッドを追加 type FinalDetails interface { details() AuthorArticles cdeatils() } // author 構造体 type author struct { a_name string branch string college string year int salary int particles int tarticles int cid int post string pick int } // インターフェースを実現1のメソッド func (a author) details() { fmt.Printf("作者: %s", a.a_name) fmt.Printf("\n部門: %s 通過日付: %d", a.branch, a.year) fmt.Printf("\n大学名称: %s", a.college) fmt.Printf("\n給与: %d", a.salary) fmt.Printf("\n公開された記事数: %d", a.particles) } // インターフェースを実現2のメソッド func (a author) articles() { pendingarticles := a.tarticles - a.particles fmt.Printf("\n未定義の記事数: %d", pendingarticles) } func (a author) picked() { fmt.Printf("\n選択された記事の総数: %d", a.pick) } // インターフェースに埋め込まれたメソッドを実現 func (a author) cdeatils() { fmt.Printf("\n作者ID: %d", a.cid) fmt.Printf("\n提出: %s", a.post) } func main() { //構造体割り当て values := author{ a_name: "Mickey", branch: "Computer science", college: "XYZ", year: 2012, salary: 50000, particles: 209, tarticles: 309, cid: 3087, post: "Technical content writer", pick: 58, } // FinalDetailsインターフェースを使用してインターフェースにアクセス1、2のメソッド var f FinalDetails = values f.details() f.articles() f.picked() f.cdeatils() }
出力:
作者: Mickey 学科: コンピュータサイエンス 通過日: 2012 大学名: XYZ 給与: 50000 公開された記事数: 209 未定義の記事数: 100 選択された記事の総数: 58 作者ID: 3087 提出: 技術コンテンツライター
使用方法:上記の例のように、我々には3つのインターフェースがあります。インターフェース1および2はシンプルインターフェースであり、インターフェース3はネストされたインターフェースを含むインターフェースです1のメソッドシグネチャが、インターフェース2それ自体のメソッドも含まれています。したがって、インターフェース1のメソッドとインターフェース2何か変更が発生した場合、インターフェースに反映されます3中の3インターフェースにアクセスできます1すべてのメソッド、インターフェースを含む1、2それ自身のメソッドと。