>  기사  >  백엔드 개발  >  Golang의 인터페이스란 무엇입니까?

Golang의 인터페이스란 무엇입니까?

藏色散人
藏色散人앞으로
2021-06-18 15:37:141961검색

다음 튜토리얼 칼럼은 golang에서 Golang의 인터페이스를 소개할 예정입니다. 필요한 친구들에게 도움이 되길 바랍니다!

Interface in Golang

먼저 인터페이스에 대해 이야기해 보겠습니다. 저는 인터페이스를 동작의 집합으로 이해합니다. 아직도 혼란스러워 보입니다. 그럼 코드와 허용되는 효과를 살펴보겠습니다.

package main
import "fmt"
type TypeCalculator interface {
    TypeCal() string
}
type Worker struct {
    Type int
    Name string
}
type Student struct {
    Name string
}
func (w Worker) TypeCal() string {
    if w.Type == 0 {
        return w.Name +"是蓝翔毕业的员工"
    } else {
        return w.Name+"不是蓝翔毕业的员工"
    }
}
func (s Student) TypeCal() string  {
    return s.Name + "还在蓝翔学挖掘机炒菜"
}
func main() {
    worker := Worker{Type:0, Name:"小华"}
    student := Student{Name:"小明"}
    workers := []TypeCalculator{worker, student}
    for _, v := range workers {
        fmt.Println(v.TypeCal())
    }
}
//运行效果
//小华是蓝翔毕业的员工
//小明还在蓝翔学挖掘机炒菜
开始解(xia)释(bai)
首先我们写了一个interface,里面有个待实现的方法TypeCal()
type TypeCalculator interface {
    TypeCal() string
}
又写了两个结构体Worker和Student
type Worker struct {
    Type int
    Name string
}
type Student struct {
    Name string
}

구조에 동일한 이름의 함수를 각각 구현했습니다.

func (w Worker) TypeCal() string {
    if w.Type == 0 {
        return w.Name +"是蓝翔毕业的员工"
    } else {
        return w.Name+"不是蓝翔毕业的员工"
    }
}
func (s Student) TypeCal() string  {
    return s.Name + "还在蓝翔学挖掘机炒菜"
}

각각 작업자와 학생의 인스턴스를 생성했습니다.

worker := Worker{Type:0, Name:"小华"}
student := Student{Name:"小明"}

자, 요점이 있습니다. 이 두 인스턴스를 TypeCalculator의 동일한 조각에 넣으세요

workers := []TypeCalculator{worker, student}

슬라이스를 순회하고 슬라이스에 있는 함수를 호출하여 결과를 인쇄합니다

for _, v := range workers {
    fmt.Println(v.TypeCal())
}

간단한 분석

결과를 보면 서로 다른 인스턴스가 자체 함수를 호출하는 것이 사실입니다. 이 함수의 함수 이름과 반환 값은 같습니다. 인터페이스에서. 그렇다면 특정 인스턴스가 인터페이스의 기능을 구현하지 않으면 어떻게 될까요? Student에 해당하는 함수를 주석 처리한 다음 프로그램을 실행하면 프로그램에서 다음 오류를 보고합니다(느슨한 영어 번역을 사용하면 Student가 TypeCalculator를 구현하지 않으며 TypeCal 함수/메서드를 찾을 수 없습니다)

 Student does not implement TypeCalculator (missing TypeCal method)

위 내용은 Golang의 인터페이스란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 studygolang.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제