Метод reflect.Type.PkgPath

Метод PkgPath интерфейса reflect.Type возвращает строку, содержащую полный путь импорта пакета, в котором объявлен данный тип. Для встроенных типов (например, int, string) и анонимных типов (безымянных структур, слайсов, мапов и т.д.) метод возвращает пустую строку. Этот метод особенно полезен при работе с рефлексией, когда необходимо определить происхождение типа или получить информацию о его пакете.

Синтаксис

gopkgPath := t.PkgPath()

Пример с пользовательским типом

Рассмотрим пример получения пути пакета для пользовательского типа 'MyStruct', объявленного в пакете 'main':

gopackage main

import (
  "fmt"
  "reflect"
)

type MyStruct struct {
  Field int
}

func main() {
  var s MyStruct
  t := reflect.TypeOf(s)
  pkgPath := t.PkgPath()
  fmt.Println(pkgPath)
}

Результат выполнения кода:

go"main"

Пример со встроенным типом

Для встроенного типа 'int' метод возвращает пустую строку:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var num int
  t := reflect.TypeOf(num)
  pkgPath := t.PkgPath()
  fmt.Printf("%q\n", pkgPath)
}

Результат выполнения кода:

go""

Пример с анонимным типом

Для анонимного типа (слайс строк) метод также возвращает пустую строку:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  slice := []string{"a", "b", "c"}
  t := reflect.TypeOf(slice)
  pkgPath := t.PkgPath()
  fmt.Printf("%q\n", pkgPath)
}

Результат выполнения кода:

go""

Пример с экспортируемым типом из другого пакета

Если тип определен в другом пакете (например, 'http.Client'), метод вернет полный путь этого пакета:

gopackage main

import (
  "fmt"
  "net/http"
  "reflect"
)

func main() {
  var client http.Client
  t := reflect.TypeOf(client)
  pkgPath := t.PkgPath()
  fmt.Println(pkgPath)
}

Результат выполнения кода:

go"net/http"

Смотрите также

  • метод reflect.Type.Name,
    который возвращает имя типа
  • метод reflect.Type.String,
    который возвращает строковое представление типа
  • функцию reflect.TypeOf,
    которая возвращает тип переданного значения
  • метод reflect.Type.Kind,
    который возвращает категорию типа