Метод reflect.Type.PkgPath
Метод PkgPath интерфейса reflect.Type возвращает строку,
содержащую полный путь импорта пакета, в котором объявлен данный тип.
Для встроенных типов (например, int, string) и анонимных типов
(безымянных структур, слайсов, мапов и т.д.) метод возвращает пустую строку.
Этот метод особенно полезен при работе с рефлексией, когда необходимо
определить происхождение типа или получить информацию о его пакете.
Синтаксис
pkgPath := t.PkgPath()
Пример с пользовательским типом
Рассмотрим пример получения пути пакета для пользовательского типа
'MyStruct', объявленного в пакете 'main':
package main
import (
"fmt"
"reflect"
)
type MyStruct struct {
Field int
}
func main() {
var s MyStruct
t := reflect.TypeOf(s)
pkgPath := t.PkgPath()
fmt.Println(pkgPath)
}
Результат выполнения кода:
"main"
Пример со встроенным типом
Для встроенного типа 'int' метод возвращает пустую строку:
package main
import (
"fmt"
"reflect"
)
func main() {
var num int
t := reflect.TypeOf(num)
pkgPath := t.PkgPath()
fmt.Printf("%q\n", pkgPath)
}
Результат выполнения кода:
""
Пример с анонимным типом
Для анонимного типа (слайс строк) метод также возвращает пустую строку:
package main
import (
"fmt"
"reflect"
)
func main() {
slice := []string{"a", "b", "c"}
t := reflect.TypeOf(slice)
pkgPath := t.PkgPath()
fmt.Printf("%q\n", pkgPath)
}
Результат выполнения кода:
""
Пример с экспортируемым типом из другого пакета
Если тип определен в другом пакете (например, 'http.Client'),
метод вернет полный путь этого пакета:
package main
import (
"fmt"
"net/http"
"reflect"
)
func main() {
var client http.Client
t := reflect.TypeOf(client)
pkgPath := t.PkgPath()
fmt.Println(pkgPath)
}
Результат выполнения кода:
"net/http"
Смотрите также
-
метод
reflect.Type.Name,
который возвращает имя типа -
метод
reflect.Type.String,
который возвращает строковое представление типа -
функцию
reflect.TypeOf,
которая возвращает тип переданного значения -
метод
reflect.Type.Kind,
который возвращает категорию типа