>  기사  >  백엔드 개발  >  golang에서 인터페이스를 생성하고 설정하는 방법(메소드에 대한 간략한 분석)

golang에서 인터페이스를 생성하고 설정하는 방법(메소드에 대한 간략한 분석)

PHPz
PHPz원래의
2023-04-13 18:34:221139검색

Golang에서 인터페이스는 객체의 동작을 설명하는 유형입니다. 인터페이스를 정의함으로써 객체의 기능과 상호 작용 방법을 표준화하여 다양한 유형의 객체 간의 상호 작용을 촉진할 수 있습니다.

Golang에서 인터페이스의 메소드 세트는 메소드 정의 세트로 구성됩니다. 인터페이스를 구현하는 유형은 인터페이스의 모든 메소드를 구현해야 합니다. 그러나 인터페이스를 구현할 때 인터페이스 구현을 명시적으로 선언할 필요는 없으며, 클래스를 상속하거나 인터페이스를 구현할 필요도 없습니다. 인터페이스의 메소드 세트만 구현하면 됩니다. 인터페이스는 유연성과 확장성이 좋은 동적 디스패치 형식으로 구현됩니다.

그렇다면 Golang에서 인터페이스를 어떻게 만들고 설정하나요? 다음에는 다음과 같은 측면에서 소개하겠습니다.

  1. 인터페이스 정의

먼저 인터페이스를 정의하고, 인터페이스에 유형 키워드를 추가하여 인터페이스 유형을 정의하고, 괄호 안에 인터페이스의 메소드 세트를 정의해야 합니다. 예:

type MyInterface interface {
    Method1() string
    Method2() int
}

위 코드 MyInterface라는 인터페이스 유형에는 Method1과 Method2라는 두 가지 메서드가 포함되어 있습니다. 인터페이스에 정의된 메서드에는 특정 구현 본문이 없으며 메서드 이름과 반환 값 유형만 있습니다.

  1. 인터페이스 구현

다음으로 인터페이스 메소드 세트를 구현하는 구조 유형을 정의하여 인터페이스를 구현해야 합니다. 예:

type MyStruct struct{}

func (m MyStruct) Method1() string{
    return "Method1 is called."
}

func (m MyStruct) Method2() int{
    return 100
}

위 코드는 두 가지 메소드를 구현하는 MyStruct라는 구조 유형을 정의합니다. MyInterface 인터페이스의 Method1 및 Method2입니다. 인터페이스를 구현하는 메소드는 인터페이스에 정의된 것과 완전히 동일한 메소드 이름, 매개변수 목록, 반환값 유형을 사용해야 인터페이스 구현으로 인식된다는 점에 유의해야 한다. 이 예에서는 MyStruct 유형에 설정된 메소드가 MyInterface의 메소드 세트도 구현합니다. 즉, MyInterface 인터페이스가 구현됩니다.

  1. 인터페이스 사용

인터페이스 사용은 Golang의 인터페이스와 관련된 가장 기본적인 작업입니다. 인터페이스 유형의 변수를 정의하면 이 변수를 인터페이스를 구현하는 다양한 유형에 할당할 수 있습니다. 코드는 MyInterfce 유형의 변수 i를 정의하고 여기에 MyStruct 유형의 변수를 할당합니다. MyStruct 유형은 MyInterface 인터페이스를 구현하므로 MyInterface에 정의된 모든 메소드에 액세스할 수 있습니다. 출력 결과는 다음과 같습니다.

var i MyInterface
i = MyStruct{}

fmt.Println(i.Method1())
fmt.Println(i.Method2())

MyStruct 유형의 변수를 MyInterface i 유형의 변수에 할당하면 실제로는 다음과 같습니다. MyStruct 유형의 값 복사본이 MyInterface 유형의 변수 i에 할당됩니다. 이는 C++의 가상 함수 구현과 유사합니다. 따라서 포인터 유형을 사용하여 인터페이스를 구현할 때는 주의해야 합니다. 포인터 유형 변수가 가리키는 객체가 변경되면 인터페이스 구현 가용성에 영향을 미칠 수 있기 때문입니다.

인터페이스 중첩
  1. Golang에서 인터페이스는 중첩, 즉 인터페이스의 메서드 세트로 다른 인터페이스 유형을 중첩하는 것도 지원합니다. 예:
Method1 is called.
100

위 코드는 중첩된 MyInterface1 인터페이스를 정의하고 MyInterface1 및 MyInterface2 인터페이스의 메서드를 구현하는 MyInterface2 인터페이스를 정의합니다. MyStruct 유형은 이 두 인터페이스도 구현하므로 i 및 call 메소드에 할당할 수 있습니다.

빈 인터페이스
  1. Golang에서는 객체의 특정 유형을 모르지만 여전히 해당 객체에 대해 작업을 수행하려는 경우 인터페이스를 사용하여 객체를 완성할 수 있습니다. 이것이 빈 인터페이스의 개념입니다. 빈 인터페이스는 Golang의 특수 유형이며 해당 메소드 세트는 비어 있으며 모든 유형의 객체를 나타낼 수 있습니다. 예:
type MyInterface1 interface {
    Method1() string
}

type MyInterface2 interface {
    MyInterface1
    Method2() int
}

type MyStruct struct{}

func (m MyStruct) Method1() string{
    return "Method1 is called."
}

func (m MyStruct) Method2() int{
    return 100
}

func main() {
    var i MyInterface2
    i = MyStruct{}

    fmt.Println(i.Method1())
    fmt.Println(i.Method2())
}

위 코드는 인터페이스{} 유형의 변수 i를 정의한 다음 여기에 정수 1을 할당합니다. 인터페이스{} 유형은 모든 유형의 객체를 나타낼 수 있으므로 i 값을 출력하고 올바른 결과를 얻을 수 있습니다.

위는 Golang에서 인터페이스를 생성하고 설정하는 기본 방법입니다. 인터페이스 사용을 익히면 코드가 더욱 유연하고 확장 가능해지며 프로그램의 가독성과 유지 관리성이 향상됩니다.

위 내용은 golang에서 인터페이스를 생성하고 설정하는 방법(메소드에 대한 간략한 분석)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.