Go의 인터페이스는 Go 프로그래밍에서 매우 자주 사용되며, 특히 빈 인터페이스의 사용으로 인해 Go 언어는 매우 강력해집니다. go 언어 튜토리얼 열에서는 Go 인터페이스 인터페이스의 사용법을 소개합니다.
인터페이스 개념 정보:
1 인터페이스는 하나 이상의 메소드 서명 모음입니다#🎜🎜. ## 🎜🎜#2. 특정 유형이 인터페이스의 모든 메소드 서명을 갖고 있는 한, 인터페이스를 구현하더라도 어떤 인터페이스를 구현하는지 명시적으로 선언할 필요가 없습니다. 이를 구조적 유형 지정
이라고 합니다.3. 인터페이스에는 메서드 선언만 있고 구현은 없으며 데이터 구조 필드가 없습니다
4. 인터페이스는 익명으로 다른 인터페이스에 삽입되거나 인터페이스에 삽입될 수 있습니다
5. 객체를 인터페이스에 복사하면 복사가 발생하며 인터페이스의 내부 저장소는 이 복제본에 대한 포인터입니다. 즉 복제본의 상태를 수정할 수 없으며 포인터를 얻을 수 없습니다. 🎜🎜#7. 인터페이스는 OOP
8과 유사한 다형성을 구현할 수도 있습니다. 빈 인터페이스는 모든 유형의 데이터에 대한 컨테이너로 사용할 수 있습니다
이제 가장 기본적인 인터페이스를 소개하겠습니다. 개념 소개 2
package main import ( "fmt" ) type USB interface { // 定义一个USB接口 ,该接口拥有PhoneConnect的所有方法签名, Name() string //即就实现了PhoneConnect的接口,无需在声明。这就是上面说的第2条 Connect() } type PhoneConnect struct { //定义的结构体 name string } func (pc PhoneConnect) Name() string{ //上面结构体的方法 return pc.name } func (pc PhoneConnect) Connect(){ fmt.Println("Connectd to: ",pc.name) } func main(){ var a USB //声明该接口 a = PhoneConnect{"IPhone"} //该接口已经支持PhoneConnect这个结构体了。初始化该结构体 a.Connect() //调用该结构体的Connect方法 }
위의 예를 이해했다면 계속 읽어보세요.
USB 유형의 매개변수를 수신하는 다른 기능을 정의합니다. 전달합니다. 실제로 a는 이미 PhoneConnect의 모든 메소드를 호출할 수 있습니다. 그리고 이때 조금 모호한 발언을 하게 되었습니다.
func Disconnect(usb USB){ fmt.Println("Discounnectd from:",usb.Name()) } func main(){ a := PhoneConnect{"IPhone"} //a是什么类型呢? fmt.Println("type:",reflect.TypeOf(a)) Disconnect(a) }
실행 결과 보기:
type: main.PhoneConnectDiscounnectd from: IPhone
#🎜 🎜 #a는 인스턴스화된 PhoneConnect 유형 구조이지만 Disconnect 기능을 사용하려면 USB 유형 데이터 수신이 필요하며 a를 전달할 수 있습니다! ! !
개념 7을 살펴보겠습니다.인쇄된 결과 보기:type USB interface { // 定义一个USB接口 ,该接口拥有PhoneConnect的所有方法签名, Name() string // Connect //嵌入了一个Connect接口,效果和最开始演示的是一样的 } type Connect interface { Connect() }로그인 후 복사
그러면 Name() 및 Connect() 메서드를 만족하는 모든 구조는 USB로 간주될 수 있습니다. DisConnect() 함수에 전달한 USB가 휴대폰이 아니면 어떻게 되나요? ? 그냥 ok 패턴을 사용하세요. 예를 들어 TV 구조를 추가하면 TV에도 USB 인터페이스가 있습니다.type TVConnect struct { name string } func (tc TVConnect) Name() string{ return tc.name } func (tc TVConnect) Connect() { fmt.Println("Connect to: ",tc.name) } func Disconnect(usb USB){ if rs,ok := usb.(PhoneConnect);ok{ fmt.Println("Disconnect: ",rs.name) }else{ fmt.Println("Unknown device: ") } } func main(){ a := PhoneConnect{"IPhone"} b := TVConnect{"ChuangWei"} Disconnect(a) Disconnect(b) }로그인 후 복사
연결 끊기: IPhone
알 수 없는 장치:# 🎜 🎜#b는 스카이워스 TV의 USB 인터페이스인데, TV이기 때문에 Disconnect 기능에서는 b가 인식되지 않습니다.
다시 발전했습니다. Disconnect 기능에서 들어오는 데이터의 구조를 결정할 수 있으므로 더 이상 USB 인터페이스 유형에 대해 걱정할 필요가 없습니다. 빈 인터페이스로 직접 정의하십시오. 그렇지 않으면 끝입니다. 어쨌든, 당신이 그 함수에 어떤 유형인지 확인하려고 합니다.func Disconnect(usb interface{}){ //注意,这里是空接口 switch v:=usb.(type) { case PhoneConnect: fmt.Println(" Phone device Disconnected from",v.name) case TVConnect: fmt.Println("TV device Disconnected from",v.name) default: fmt.Println("Unknown device ...") } } func main(){ a := PhoneConnect{"IPhone"} b := TVConnect{"ChuangWei"} Disconnect(a) Disconnect(b) }로그인 후 복사
인쇄 상황 보기:
전화 장치: IPhone에서 연결이 끊어짐TV 장치: ChuangWei에서 연결이 끊어짐
#🎜🎜 # 더 많은 바둑 지식을 알고 싶다면 PHP 중국어 웹사이트go 언어 튜토리얼
컬럼을 주목해주세요.위 내용은 Go 인터페이스 인터페이스 사용법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!