Go의 인터페이스에 대한 간략한 소개

20465 단어 goprogrammingbeginners
새로운 Gopher이자 이전에 C++ 또는 강력한 유형의 언어를 입력한 적이 없는 CodeNewbie로서 저는 Go의 Interfaces에 대한 초보자 친화적인 리소스를 찾는 데 어려움을 겪고 있었습니다.

그래서 여기 내가 하나를 작성하고 모든 초보자를 돕기 위해 최선을 다하기로 결정했습니다.


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



Interfaces in Go provide a way to specify the behavior of an object: if something can do this, then it can be used here. - Effective Go



기본적으로 인터페이스는 많은 메서드가 있는 유형임을 의미합니다.

자, 긴 말은 하지 않고 오늘 분명히 합시다.

코드 작성



목표: 두 숫자의 합과 빼기를 출력하는 두 가지 방법sum()substr()를 구현합니다.

1) 설정부터 시작하자

package main

import "fmt"

func main() {
}


2) 그런 다음 유형, 여기에 각각 두 개의 숫자 유형item1이 있는 item2float64가 있습니다.

package main

import "fmt"



type item1 struct {
    num1, num2 float64
}

type item2 struct {
    num1, num2 float64
}

func main() {
}


3) 이제 코드가 작동하려면 몇 가지 지침(메서드)이 필요합니다.

package main

import "fmt"

type item1 struct {
    num1, num2 float64
}

type item2 struct {
    num1, num2 float64
}



// Method
func (a item1) sum() float64 {
    return a.num1 + a.num2
}

// Method
func (a item1) substr() float64 {
    return a.num1 - a.num2
}

// Method
func (b item2) sum() float64 {
    return b.num1 + b.num2
}

// Method
func (b item2) substr() float64 {
    return b.num1 - b.num2
}



func main() {
}


계속하기 전에 방법을 더 잘 이해합시다.

// Method
func (b item2) substr() float64 {
    return b.num1 - b.num2
}

bitem2 에 대한 참조로 num1 내부 num2item2에 액세스하는 방법입니다. 그런 다음 이름substr(), 반환 유형float64 및 반환 메서드가 있습니다.

4) result1result2 구현 및 결과 출력:

package main

import "fmt"

type item1 struct {
    num1, num2 float64
}

type item2 struct {
    num1, num2 float64
}

// Method
func (a item1) sum() float64 {
    return a.num1 + a.num2
}

// Method
func (a item1) substr() float64 {
    return a.num1 - a.num2
}

// Method
func (b item2) sum() float64 {
    return b.num1 + b.num2
}

// Method
func (b item2) substr() float64 {
    return b.num1 - b.num2
}



// Result 1 & Result 2
func result1(i item1) {
    fmt.Println("Sum: ", i.sum())
    fmt.Println("Substr: ", i.substr())
}

func result2(i item2) {
    fmt.Println("Sum: ", i.sum())
    fmt.Println("Substr: ", i.substr())
}

func main() {
    a := item1{num1: 10, num2: 5}
    b := item2{num1: 20, num2: 10}

    result1(a) 
    result2(b)
}

// Sum:  15
// Substr:  5
// Sum:  30
// Substr:  10


여기에서 ab 두 개의 변수를 result1result2 두 함수에 전달하고 결과를 얻었습니다.

그러나 여기에 문제가 있습니다.

Why do we need to write two functions (result1 and result2) that basically do the same thing?




여기 당신이 기다리던 것이 있습니다: 인터페이스



5) 인터페이스 구현. 앞에서 언급했듯이 인터페이스는 메서드(함수)의 모음이 있는 유형입니다. 아래 메서드의 이름인 sum()substr() 가 모두 있습니다.

package main

import "fmt"



type math interface {
    sum() float64
    substr() float64
}



type item1 struct {
    num1, num2 float64
}

type item2 struct {
    num1, num2 float64
}

// Method
func (a item1) sum() float64 {
    return a.num1 + a.num2
}

// Method
func (a item1) substr() float64 {
    return a.num1 - a.num2
}

// Method
func (b item2) sum() float64 {
    return b.num1 + b.num2
}

// Method
func (b item2) substr() float64 {
    return b.num1 - b.num2
}

func main() {

}


6) 결과를 인쇄하십시오:

package main

import "fmt"

type math interface {
    sum() float64
    substr() float64
}

type item1 struct {
    num1, num2 float64
}

type item2 struct {
    num1, num2 float64
}

// Method
func (a item1) sum() float64 {
    return a.num1 + a.num2
}

// Method
func (a item1) substr() float64 {
    return a.num1 - a.num2
}

// Method
func (b item2) sum() float64 {
    return b.num1 + b.num2
}

// Method
func (b item2) substr() float64 {
    return b.num1 - b.num2
}



func result(m math) {
    fmt.Println("Sum: ", m.sum())
    fmt.Println("Substr: ", m.substr())
}

func main() {
    a := item1{num1: 10, num2: 5}
    b := item2{num1: 20, num2: 10}

    result(a)
    result(b)
}

// Sum:  15
// Substr:  5
// Sum:  30
// Substr:  10


따라서 이제 math 인터페이스result를 포함하면 됩니다. 그러면 sum() 섹션에서 한 번 호출하여 substr()main()에 액세스할 수 있습니다.
여기서 우리는 두 변수에 대해 한 번 result를 호출하고 동일한 결과를 얻었습니다!

계속 ->

Thanks for reading my first ever published article!

좋은 웹페이지 즐겨찾기