Golang では、type キーワードを使用してカスタム型を定義し、関数もデータ型であるため、type キーワードを使用して関数型を定義できます。
関数型の構文を定義する
関数タイプを定義するための構文は次のとおりです。
type FuncType func(argument_list) return_type
FuncType は定義された関数の型名、argument_list は関数のパラメータ リスト、return_type は関数の戻り値の型です。関数の型を定義した後、この型を使用して変数を関数のパラメーターや戻り値の型などとして宣言できます。簡単な例は次のとおりです。
type MathFunc func(int, int) int // 定义函数类型
func add(x, y int) int { // 定义加法函数
return x + y
}
func sub(x, y int) int { // 定义减法函数
return x - y
}
関数タイプは独自のメソッドを定義できます。以下は関数自体を実行するメソッドを定義します
type MathFunc func(int, int) int // 定义函数类型
func (f *MathFunc) run(str string) { // MathFunc 提供的方法
fmt.Println(str)
}
func add(x, y int) int { // 定义加法函数
return x + y
}
func sub(x, y int) int { // 定义减法函数
return x - y
}
完全な使用例
完全な使用例は次のとおりです。
package main
import "fmt"
type MathFunc func(int, int) int // 定义函数类型
func (f *MathFunc) test(str string) { // MathFunc 提供的方法
fmt.Println(str)
}
func add(x, y int) int { // 定义加法函数
return x + y
}
func sub(x, y int) int { // 定义减法函数
return x - y
}
func main() {
var f MathFunc // 声明函数类型变量
f = add // 函数类型变量赋值为加法函数
fmt.Println(f(1, 2))// 给加法函数传参并打印返回值
f.test("路多辛的博客")
f = sub // 函数类型变量赋值为减法函数
fmt.Println(f(3, 2))// 给减法函数传参并打印返回值
f.test("路多辛的所思所想")
}
実行して効果を確認してください
$ go run main.go
3
路多辛的博客
1
路多辛的所思所想
まず、MathFunc という名前の関数型が定義されており、これは 2 つの int 型パラメータを受け入れて int 型の値を返す関数の記述に使用され、テスト メソッドを定義してから、add と sub という 2 つの特定の関数を実装します。は関数型変数 f にバインドされており、加算または減算を実行するためにさまざまなパラメーターを渡すことによって f が呼び出されます。
注意点
カスタム関数タイプを使用する場合は、次の点に留意する必要があります。
- カスタム関数タイプのシグネチャは、実際の関数のシグネチャと一致している必要があります。そうでない場合、コンパイル エラーが発生します。
- カスタム関数タイプは、他のタイプと同様に、割り当てたり、パラメータを渡したりすることができます。
- カスタム関数タイプは、関数パラメータまたは戻り値のタイプとして使用できます。
まとめ
Golang では、関数は関数パラメータとして渡したり、関数の戻り値として返すことができる第一級市民です。カスタム関数タイプを使用すると、関数をより柔軟に使用できます。