저는 주로 PHP 개발자이고 최근에는 Go에 대해 알아보기 시작했습니다. PHP에서는 다음과 같이 할 수 있습니다.Go에서 패키지 속성을 동적으로 참조 할 수 있습니까?
<?php
class TestClass {
public function testMethod() {
echo "Hello!\n";
}
}
$obj = new TestClass();
$method_name = "testMethod";
$obj->{$method_name}();
?>
출력은 Hello!
입니다.
Go는 클래스가 없으므로 다음과 같은 완벽한 비교는 아니지만 Go 모듈의 내 보낸 속성과 비슷한 작업을 수행 할 수 있는지 궁금합니다. 예를 들면 다음과 같습니다 (유효한 코드가 아님).
package main
import "fmt"
func main() {
name := "Println"
fmt[name]("Hello!")
}
어쨌든 가능합니까? 어떻게 비슷한 것이 성취 될 수 있습니까? 고맙습니다.
편집 : 변경이 적절한 이름
나는 "모듈"이라고 말하면서 마땅치 않다. Go에서는 패키지를 언급 할 것입니다. "속성"은 패키지가 노출하는 것을 의미합니다. 솔루션은 작동하지만지도를 만들지 않고이를 수행하는 방법을 알고 있습니까? – 6124j50n
답변을 찾은 유일한 해결책은 다음과 같습니다. https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/JWquU5kRjIA – 6124j50n
모듈/패키지의 Go Wrt 속성에는 한 가지 차이점이 있습니다 . 이동 패키지는 이동 유형의 인스턴스가 아닙니다. 그것은 이름 범위 지정 개념 일뿐입니다. IOW, 어떤 변수도 패키지 (instance/reference/...)를 나중에 선택자 피연산자'.'에 사용할 수 없습니다. 소스 코드에서 보면 (예 :'fmt.Printf'와 같이), 런타임시에 유추가없는 컴파일 타임 (이름) 해석 메커니즘 일뿐입니다. – zzzz