Reputation: 2082
While looking at the google plus sign in in go, I found a very interesting pattern. Here is a trivial example (live).
package main
import(
"fmt"
)
type FuncType func(i int) int
func (fn FuncType) MultiplyByTwo(i int) int{
return fn(i) * 2
}
func MultiplyByThree(i int) int{
return i * 3
}
func main(){
fn := FuncType(MultiplyByThree)
fmt.Println("returns 2 * 3 * 5: ",fn.MultiplyByTwo(5))
}
My question is quite simple, how come can we initiate the FuncType with parentheses? I do not understant!
Thanks.
Upvotes: 3
Views: 81
Reputation: 230326
Conversions are expressions of the form T(x) where T is a type and x is an expression that can be converted to type T.
So,
fn := FuncType(MultiplyByThree)
FuncType
is a type. And MultiplyByThree
is a pointer to function (which is an expression) with the same signature as FuncType
. Therefore, it can be converted to this type.
BTW, the output is slightly wrong. Should be
returns 5 * 3 * 2: 30
This is the correct sequence of multiplications. :)
Upvotes: 4