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

Golang 基礎トレーニング

Golang 制御文

Golang 関数 & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang エラ(Error)

Golang その他の雑多

Go 関数を構造体のフィールドとして使用

Golangでは構造体またはstructはユーザー定義のタイプであり、一つのユニットで異なるタイプの要素のグループを作成することができます。属性やフィールドを持つ実際の実体は構造体として表現できます。Go言語では関数もユーザー定義のタイプであることを知っており、Go構造体に関数フィールドを作成することができます。匿名関数を使ってGo構造体に関数フィールドを作成することもできます。以下の例を参照してください。2図示の通り。

文法:

type function_name func()
type strcut_name struct{
  var_name  function_name
}

この概念についてサンプルを用いて説明しましょう:

//Go構造体のフィールドとして
package main 
  
import "fmt"
  
// Finalsalary関数のタイプ
type Finalsalary func(int, int) int
  
//構造体の作成
type Author struct { 
    name      string 
    language  string 
    Marticles int
    Pay       int
  
    //関数としてのフィールド
    salary Finalsalary 
} 
  
func main() { 
  
    // 構造体フィールドの初期化
    result := Author{ 
        name:      "Sonia", 
        language:  "Java", 
        Marticles: 120, 
        Pay:       500, 
        salary: func(Ma int, pay int) int { 
            return Ma * pay 
        , 
    } 
  
    fmt.Println("著者名: ", result.name) 
    fmt.Println("言語: ", result.language) 
    fmt.Println("5月に発表した記事の総数: ", result.Marticles) 
    fmt.Println("一記事の報酬: ", result.Pay) 
    fmt.Println("総給与: ", result.salary(result.Marticles, result.Pay)) 
}

出力:

著者名:  Sonia
言語:  Java
5月に発表した記事の総数:  120
一記事の報酬:  500
総給与:  60000

Goの構造体のフィールドとして匿名関数の使用2:

//Goの構造体のフィールドとして匿名関数の使用
package main 
  
import "fmt"
  
//構造体の作成
type Author struct { 
    name      string
    language  string
    Tarticles int
    Particles int
    Pending   func(int, int) int
} 
  
func main() { 
  
    //構造体フィールドの初期化
    result := Author{ 
        name:      "Sonia", 
        language:  "Java", 
        Tarticles: 340, 
        Particles: 259, 
        Pending: func(Ta int, Pa int) int { 
            return Ta - Pa 
        , 
    } 
  
    fmt.Println("著者名: ", result.name) 
    fmt.Println("言語: ", result.language) 
    fmt.Println("文章数: ", result.Tarticles) 
      
    fmt.Println("発表文章数: ", result.Particles) 
    fmt.Println("待処理文章: ", result.Pending(result.Tarticles, result.Particles)) 
}

出力:

著者名:  Sonia
言語:  Java
文章总数:  340
投稿された記事の総数:  259
未処理の記事:  81