golang - Function call by name in Golang, 함수 이름을 변수에 넣고 그 변수 이름을 가지고 함수를 실행하기, 호출하기.
이 름 : 바다아이
|
조회수 : 9195
짧은 주소 : https://www.bada-ie.com/su/?991591784111
함수 이름을 변수에 넣고
그 변수 이름을 가지고 함수를 실행하는 것인데요...
다른 언어 예를 들어 php 같은 경우 좀 편합니다만
golang 은 형에 민감해서 잘 보셔야 합니다.
golang 에서도 같은 형끼리는 편합니다만..
다른 형에서는 interface 를 사용해야 합니다.
아래 예제들 보세요...
php 에서 예제
function foobar() {
echo "Hello Golang\n";
}
$funcs = array(
"foobar" => "foobar",
"hello" => "foobar",
);
$funcs["foobar"]();
$funcs["hello"]();
golang 에서 같은 형끼리 모였을때...package main
import (
"fmt"
)
funcfoo(a int) {
fmt.Println("foo")
}
funcbar(a int) {
fmt.Println("bar")
}
funcmain() {
funcs := map[string]func(a int){"foo": foo, "bar": bar}
funcs["foo"](1)
funcs["bar"](1)
}
golang 에서 여러가지 형태가 섞여있을 때...package main
import"fmt"import"reflect"import"errors"funcfoo() {
fmt.Println("we are running foo")
}
funcbar(a, b, c int) {
fmt.Println("we are running bar", a, b, c)
}
funcCall(m map[string]interface{}, name string, params ...interface{})(result []reflect.Value, err error) {
f := reflect.ValueOf(m[name])
iflen(params) != f.Type().NumIn() {
err = errors.New("The number of params is not adapted.")
return
}
in := make([]reflect.Value, len(params))
for k, param := range params {
in[k] = reflect.ValueOf(param)
}
result = f.Call(in)
return
}
funcmain() {
// nota bene: for perfect score: use reflection to build this map
funcs := map[string]interface{}{
"foo": foo,
"bar": bar,
}
Call(funcs, "foo")
Call(funcs, "bar", 1, 2, 3)
}
참고 : https://mikespook.com/2012/07/function-call-by-name-in-golang/
|
|
번 호
카테고리
제 목
이름
조회수
Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천 실행시간 : 0.06696 초 to webmaster... gogo sea. gogo sea.