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 중국어 웹사이트의 기타 관련 기사를 참조하세요!