유형 판단
_.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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.