go関数をタイプとして-go言語

1541 ワード

Go言語では中国では関数を一種のタイプとしてtypeで定義することができる.この特性を利用して,タイプ変換を行うことができる.関数パラメータのタイプとして使用して、パラメータを拘束できます.
関数のタイプ変換
タイプ変換の基本フォーマットは次のとおりです.
type_name(expression)
package main

import "fmt"

//        
type CalculateType func(int , int )

//             
func (c *CalculateType) Server() {
	fmt.Println("        ")
}

//    
func add(a, b int) {
	fmt.Println( a + b)
}

//    
func mul(a, b int){
	fmt.Println( a * b)
}

func main() {
	// add         CalculateType  
	a := CalculateType(add)
	// mul        CalculateType  
	b := CalculateType(mul)

	a(2, 3)
	b(2, 3)
	a.Server()
	b.Server()
}

//5
//6
//        
//        

//   ,     Calculate Type     ,   Serve()   ,          add   mul      

 
以上のように、Calculate Type関数のタイプを宣言し、Serve()メソッドを実装し、同じパラメータを持つaddとmulを強制的に変換します.
関数をパラメータとして使用するタイプ
package main

import "fmt"

//        
type CalculateType func(int , int )


//    
func add(a, b int) {
	fmt.Println( a + b)
}

//    
func mul(a, b int){
	fmt.Println( a * b)
}

func Calculate(a, b int, f CalculateType)  {
	f(a, b)
}

func main() {
	a, b := 2,3

	Calculate(a, b, add)
	Calculate(a, b, mul)
}

//5
//6

//    ,Calculate   f        CalculateType , add   mul         CalculateType               ,
//       add   mul          Calculate    
    ,Calculate   f        CalculateType , add   mul         CalculateType               ,
       add   mul          Calculate    

Net/httpパケットソースコード例