유형 판단

3804 단어
_.ok:=interface{}(a).(B)

이 문은 객체 a가 B 유형인지 여부를 판단하는 데 사용됩니다.
대상 a가 B 인터페이스를 실현했는지 판단할 수 있다
package main

import "fmt"

type Pet interface {
   SetName(name string)
   Name()string
   Category()string
}

type Dog struct {
   name string
}

func (dog *Dog) SetName(name string) {
   dog.name = name
}

func(dog Dog) Name()string{
   return dog.name
}

func (dog Dog)Category()string{
   return "dog"
}

func main() {
   dog:=Dog{"little pig"}

   _,ok:=interface{}(dog).(Pet)
   fmt.Printf("Dog implements interface Pet: %v
", ok) _, ok = interface{}(&dog).(Pet) fmt.Printf("*Dog implements interface Pet: %v
", ok) fmt.Println() var pet Pet = &dog fmt.Printf("This pet is a %s, the name is %q.
", pet.Category(), pet.Name()) }

출력:
Dog implements interface Pet: false
*Dog implements interface Pet: true

This pet is a dog, the name is "little pig".

하나의 바늘 유형은 특정한 인터페이스 유형을 실현하지만, 그 기본 유형은 반드시 이 인터페이스의 실현 유형이 될 수 있는 것은 아니다.
어떻게 하나의 데이터 유형을 판정하는 어떤 방법이 실현되는 것이 바로 어떤 인터페이스 유형 중의 어떤 방법입니까?
두 가지 충분한 필요조건이 있는데 하나는'두 가지 방법의 서명이 완전히 일치해야 한다'는 것이고, 다른 하나는'두 가지 방법의 명칭이 똑같아야 한다'는 것이다.분명히 이것은 한 함수가 어떤 함수 유형을 실현했는지 판단하는 것보다 더욱 엄격하다.
이는 Dog 유형 자체의 방법 집합에 두 가지 방법, 즉 모든 값 방법만 포함되어 있음을 의미한다.포인터 유형 *Dog 메소드 컬렉션에는 3가지 메소드가 포함되어 있습니다.
전재 대상:https://www.cnblogs.com/TimLiuDream/p/9898199.html

좋은 웹페이지 즐겨찾기