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

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

藏色散人
풀어 주다: 2019-12-25 17:19:47
원래의
3370명이 탐색했습니다.

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

golang 인터페이스란 무엇인가요?

고루틴과 채널이 Go 동시성의 두 가지 초석이라면 인터페이스는 Go 언어 프로그래밍에서 데이터 유형의 핵심입니다. Go 언어의 실제 프로그래밍에서 거의 모든 데이터 구조는 인터페이스를 중심으로 이루어지며, 인터페이스는 Go 언어의 모든 데이터 구조의 핵심입니다.

관련 권장사항: golang 튜토리얼

Interface in golang

1. 인터페이스

개념: 인터페이스는 메소드 세트를 정의하지만 이러한 메소드의 특정 구현을 포함하지 않습니다. 변수를 포함할 수 없습니다.

인터페이스 정의 형식

type Namer interface {
method1() return_type
method2() return_type
}
로그인 후 복사

2. 인터페이스의 예

    package main
    import "fmt"
    
    type Message interface {
        Send()
    }
    type user struct {
        name string
        score int
    }
    func (u *user) Send() {
        fmt.Println("hi", u.name, "this is your ", u.score)
    }
    func sendMessage(msg Message) {
        msg.Send()
    }
    func main() {
        u := &user{name: "roty", score: 44}
        sendMessage(&u)
    }
로그인 후 복사

Golang의 인터페이스는 코딩을 더욱 유연하고 쉽게 확장할 수 있게 하여 Go가 객체 지향 다형성의 특성을 가지게 합니다.

여기서 세 가지 사항만 기억하면 충분합니다.

● 메소드 선언 모음

● 어떤 유형의 객체가 인터페이스에 선언된 모든 메소드를 구현한다면 해당 유형이 해당 인터페이스를 구현한다는 의미입니다.

●는 데이터 유형으로 사용될 수 있으며, 이 인터페이스를 구현하는 모든 객체는 해당 인터페이스 유형 변수에 값을 할당할 수 있습니다.

예제를 사용하여 위의 세 가지 사항을 이해하세요.

package main
import "fmt"
import "math"
// 几何图形的接口(interface)
type geometry interface {
    area() float64
    perim() float64
}
// rect 和 circle 实现 geometry 接口
type rect struct {
    width, height float64
}
type circle struct {
    radius float64
}
// 实现了接口中声明的所有方法即实现了该接口,这里 rects 实现了 geometry 接口
func (r rect) area() float64 {
    return r.width * r.height
}
func (r rect) perim() float64 {
    return 2*r.width + 2*r.height
}
// circles 实现 geometry 接口
func (c circle) area() float64 {
    return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
    return 2 * math.Pi * c.radius
}
// 定义的接口可以作为一种数据类型,当一个变量的类型为一个接口类型时,这个变量可以调用接口中定义的方法。
// 这里定义一个函数,接收一个类型为 geometry 的参数变量
func measure(g geometry) {
    fmt.Println(g)
    fmt.Println(g.area())
    fmt.Println(g.perim())
}
func main() {
    r := rect{width: 3, height: 4}
    c := circle{radius: 5}
    // The circle and rect struct types both implement the geometry interface so we can use instances of these structs as arguments to measure.
    // rect 和 circle 结构类型都实现了 geometry 接口,所以我们能够把它们的对象作为参数传给 measure 函数
    // 在 measure 函数内部,参数对象调用了所属类型实现的接口方法。
    measure(r)
    measure(c)
}
로그인 후 복사

유형은 인터페이스에서 선언된 메서드를 구현하는 한 인터페이스를 구현할 수 있으며, 동일한 유형은 동시에 여러 인터페이스 구현을 지원할 수 있습니다. 여러 유형으로 구현될 수도 있습니다. 유형이 인터페이스를 구현하는 경우 이 유형의 객체를 이 인터페이스 유형의 변수에 할당할 수 있습니다.

package main
import "fmt"
type I interface {
  method1()
}
type T struct{}
func (T) method1()  {}
func main()  {
  var i I = T{}
  fmt.Println(i)
}
로그인 후 복사

마지막 부분에서는 인터페이스{} 유형에 대해 설명합니다. 이 유형의 인터페이스는 일반적으로 빈 인터페이스라고 알려진 메서드를 선언하지 않습니다. 모든 유형의 객체는 기본적으로 빈 인터페이스를 구현하기 때문에 (위에서 언급한 것처럼 모든 유형이 인터페이스 메소드를 구현하는 한 해당 인터페이스를 구현합니다. 빈 인터페이스에는 메소드가 없으므로 모든 유형은 기본적으로 빈 인터페이스를 구현합니다) . 필요한 경우 유형 변수와 관련하여 매우 유용합니다.

아아아아

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿