Метод reflect.Type.AssignableTo

Метод AssignableTo проверяет, можно ли присвоить значение типа, представленного текущим объектом reflect.Type, переменной целевого типа. В первый параметр мы передаем целевой тип, во второй - ничего не передаем, так как метод вызывается на исходном типе. Метод возвращает true, если присваивание допустимо, и false в противном случае.

Синтаксис

got1.AssignableTo(t2)

Пример

Давайте проверим, можно ли присвоить значение типа int переменной типа int:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var x int
  var y int
  
  t1 := reflect.TypeOf(x)
  t2 := reflect.TypeOf(y)
  
  res := t1.AssignableTo(t2)
  fmt.Println(res)
}

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

gotrue

Пример

Давайте проверим, можно ли присвоить значение типа int переменной типа string:

gopackage main

import (
  "fmt"
  "reflect"
)

func main() {
  var x int
  var y string
  
  t1 := reflect.TypeOf(x)
  t2 := reflect.TypeOf(y)
  
  res := t1.AssignableTo(t2)
  fmt.Println(res)
}

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

gofalse

Пример

Давайте проверим, можно ли присвоить значение пользовательского типа переменной базового типа:

gopackage main

import (
  "fmt"
  "reflect"
)

type MyInt int

func main() {
  var x MyInt
  var y int
  
  t1 := reflect.TypeOf(x)
  t2 := reflect.TypeOf(y)
  
  res := t1.AssignableTo(t2)
  fmt.Println(res)
}

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

gofalse

Пример

Давайте проверим, можно ли присвоить значение интерфейсного типа переменной конкретного типа:

gopackage main

import (
  "fmt"
  "reflect"
)

type MyInterface interface {
  Method()
}

type MyStruct struct{}

func (m MyStruct) Method() {}

func main() {
  var x MyStruct
  var y MyInterface
  
  t1 := reflect.TypeOf(x)
  t2 := reflect.TypeOf(y)
  
  res := t1.AssignableTo(t2)
  fmt.Println(res)
}

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

gotrue

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

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