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