English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎チュートリアル

Golang 制御文

Golang ファンクション & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang エラ

Golang 他の雑多

Go 言語のインターフェースのネスト

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それ自身のメソッドと。