関数アドレスはメモリ内の関数の場所であり、Go の & 演算子を使用して取得できます。関数アドレスは、引数 (コールバックなど) として渡すことも、リフレクションとともに使用して関数の詳細 (関数アドレスなど) を検査および操作することもできます。
Golang 関数アドレスの魅力を明らかにする
Golang では、関数は第一級市民です。 like 他の値と同様に、割り当て、渡され、比較されます。この機能は、コールバック、クロージャ、リフレクションなどのさまざまなプログラミング パターンを実装するための強力なツールを提供します。
関数アドレスは、メモリ内の関数の場所を指します。 Golang では、&
演算子を使用して関数のアドレスを取得できます。例:
func add(a, b int) int { return a + b } // 获取 add 函数的地址 funcAddr := &add
実際のケース: 関数をパラメーターとして渡す
関数アドレスをパラメーターとして他の関数に渡すことができます。これは Golang の一般的なパターンであり、コールバックと呼ばれます。たとえば、add
関数を sort.Sort
関数に渡して、スライスを並べ替えることができます。
package main import ( "fmt" "sort" ) func main() { // 定义一个 int 切片 nums := []int{5, 2, 9, 1, 3} // 按照升序对切片进行排序 sort.Slice(nums, func(i, j int) bool { return nums[i] < nums[j] }) fmt.Println(nums) // [1 2 3 5 9] }
実践例: リフレクションの使用
リフレクションは、プログラムが実行時に型と値を検査および操作できるようにする Golang の高度な機能です。リフレクションを使用すると、アドレスを含む関数の詳細を取得できます。例:
package main import ( "fmt" "reflect" ) func main() { // 获取 add 函数的类型信息 funcType := reflect.TypeOf(add) // 获取函数的地址 funcValue := reflect.ValueOf(add) funcPtr := funcValue.Pointer() fmt.Println(funcPtr) // 类似于 &add }
関数アドレスを理解することで、第一級市民として Golang 関数を活用できるようになり、より柔軟で強力なプログラムを作成できるようになります。
以上がGolang 関数アドレスの魔法を明らかにするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。