동적으로 패키지 유형 찾기
reflect 패키지에 유형 검색 메커니즘이 없음에도 불구하고 내보낸 유형, 특히 구조체를 검색하기 위한 다른 방법이 존재합니다. , 런타임에.
1.5로 이동하여 나중에
Go 1.5 이상에서는 유형 및 가져오기 패키지가 이 작업에 도움이 될 수 있습니다. 다음 코드 조각은 프로세스를 보여줍니다.
package main import ( "fmt" "go/importer" ) func main() { pkg, err := importer.Default().Import("time") if err != nil { fmt.Printf("error: %s\n", err.Error()) return } for _, declName := range pkg.Scope().Names() { fmt.Println(declName) } }
1.5 이전 버전
Go 1.5 이전에는 ast 패키지가 이 문제에 대해 해킹되지 않은 유일한 접근 방식을 제공합니다. . 이 패키지는 소스 코드를 컴파일하여 유형 정보를 추출할 수 있습니다.
package main import ( "fmt" "go/ast" "go/parser" "go/token" ) func main() { fset := token.NewFileSet() node, err := parser.ParseFile(fset, "time.go", nil, parser.ParseComments) if err != nil { fmt.Printf("error: %s\n", err.Error()) return } ast.Inspect(node, func(n ast.Node) bool { if n, ok := n.(*ast.TypeSpec); ok { fmt.Println(n.Name.Name) } return true }) }
이러한 기술을 사용하면 실행 중인 Go 패키지 내에서 내보낸 유형, 특히 구조체를 검색할 수 있으므로 인스턴스를 추가로 분석하고 인스턴스화할 수 있습니다.
위 내용은 Go에서 패키지 유형을 동적으로 검색하려면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!