찾다
백엔드 개발Golang언어로 인터페이스를 개발할 수 있나요?

언어로 인터페이스를 개발할 수 있나요?

Dec 15, 2022 pm 06:49 PM
golang인터페이스언어로 가다

Go 언어는 인터페이스를 개발할 수 있습니다. Go 언어의 인터페이스는 Go 언어의 중요한 부분입니다. 인터페이스가 하는 일은 사양이나 프로토콜을 정의하는 것과 같습니다. 인터페이스 키워드는 인터페이스를 정의하기 위해 go 언어에서 사용됩니다. 구문은 "유형 인터페이스 유형 이름 인터페이스{메소드 이름 1(매개변수 목록 1) 반환 값 목록 1 메서드 이름 2(매개변수 목록 2) 반환 값 목록 2.. .}".

언어로 인터페이스를 개발할 수 있나요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

인터페이스는 우리에게 친숙한 개념일 것입니다. Java에 더 익숙한 우리와 같은 프로그래머에게는 인터페이스가 Go 언어에서 어떻게 사용되는지 살펴보겠습니다. , 일상적인 개발에서 인터페이스가 수행하는 역할.

Concept

Go 언어에서 인터페이스는 Go 언어의 중요한 부분입니다. 인터페이스가 하는 일은 각 구현 당사자에게만 필요한 것입니다. 프로토콜에 따라 구현합니다.

인터페이스는 유형입니다.

인터페이스 유형은 다른 유형의 동작을 추상화하고 일반화한 것입니다. 이 추상 방법을 사용하면 함수를 더욱 유연하게 만들 수 있습니다.

인터페이스 정의

type 接口类型名 interface{
    方法名1( 参数列表1 ) 返回值列表1
    方法名2( 参数列表2 ) 返回值列表2
    …
}

Go 언어에서는 인터페이스 키워드를 사용하여 인터페이스를 정의합니다.

인터페이스 구현 조건

임의의 T 유형의 메소드 세트가 인터페이스 유형의 메소드 세트의 상위 세트인 경우 T 유형이 인터페이스를 구현한다고 말합니다.

인터페이스의 구현은 Go 언어에 암시적입니다. 이는 두 유형 간의 구현 관계가 코드에 반영될 필요가 없다는 것을 의미합니다. Go 언어에는 Java의 구현과 유사한 키워드가 없습니다. Go 컴파일러는 필요할 때 자동으로 두 유형 간의 구현 관계를 확인합니다. 인터페이스를 정의한 후에는 호출자가 인터페이스를 올바르게 컴파일하고 사용할 수 있도록 구현해야 합니다.

인터페이스 구현은 두 가지 규칙을 따라야 합니다.

1. 인터페이스의 메소드는 인터페이스를 구현하는 유형 메소드와 동일한 형식입니다. 메소드는 메소드를 추가하여 구현할 수 있습니다. 유형의 인터페이스 서명과 일치합니다. 서명에는 메서드의 이름, 매개변수 목록, 반환 매개변수 목록이 포함됩니다. 즉, 구현된 인터페이스 유형에 있는 메소드의 이름, 매개변수 목록 및 반환 매개변수 목록 중 하나라도 인터페이스에서 구현하려는 메소드와 일치하지 않는 한 인터페이스의 이 메소드는 구현되지 않습니다.

package main

import "fmt"

type Phone interface {
	Call()
	SendMessage()
}

type HuaWei struct {
	Name  string
	Price float64
}

func (h *HuaWei) Call() {
	fmt.Printf("%s:可以打电话",h.Name)
}

func (h *HuaWei) SendMessage() {
	fmt.Printf("%s:可以发送短信",h.Name)
}

func main() {

	h := new(HuaWei)
	h.Name="华为"
	var phone Phone
	phone = h
	phone.SendMessage()
}

유형이 인터페이스를 구현할 수 없는 경우 컴파일러는 다음과 같은 오류를 보고합니다.

a. 일관되지 않은 함수 이름으로 인해 발생하는 오류

b. 함수를 구현하기 위한 일관되지 않은 메서드 서명으로 인해 발생하는 오류

2. 인터페이스에 여러 메서드가 있는 경우 이러한 메서드를 구현해야 인터페이스를 올바르게 컴파일하고 사용할 수 있습니다. 오류를 신고하세요.

타입과 인터페이스의 관계언어로 인터페이스를 개발할 수 있나요?

타입은 다중 인터페이스를 구현합니다

타입은 다중 인터페이스를 구현할 수 있으며, 인터페이스는 서로 독립적이며 서로의 구현을 알지 못합니다.

예를 들어, 개는 움직이고 전화할 수 있습니다.

func (h *Xiaomi) Call() {
	fmt.Printf("%s:可以打电话",h.Name)
}

func main() {
	h := new(Xiaomi)
	h.Name="小米"
	var phone Phone
	phone = h
	phone.SendMessage()
}

여러 유형이 동일한 인터페이스를 구현합니다.

Go 언어의 다양한 유형도 동일한 인터페이스를 구현할 수 있습니다. 먼저 Mover 인터페이스를 정의합니다. 이동 방법이 있어야합니다.

package main

import "fmt"

type Move interface {
	move()
}
type Say interface {
	say()
}
type Dog struct {
	Name string
}

func (d *Dog) move()  {
	fmt.Printf("%s会动\n", d.Name)
}
func (d *Dog) say()  {
	fmt.Printf("%s会叫汪汪汪\n", d.Name)
}

func main() {
	var m Move
	var s  Say
	d:=&Dog{
		Name: "旺财",
	}
	m = d
	s=d
	m.move()
	s.say()
}
예를 들어 개는 움직일 수 있고, 자동차도 움직일 수 있습니다. 이 관계를 달성하기 위해 다음 코드를 사용할 수 있습니다.

type Mover interface {
    move()
}
이때, 코드에서는 개와 자동차를 하나의 움직이는 객체로 취급할 수 있습니다. 더 이상 주의를 기울여야 합니다. 구체적으로 무엇인지, 이동 메소드를 호출하기만 하면 됩니다.

type dog struct {
    name string
}

type car struct {
    brand string
}

// dog类型实现Mover接口
func (d dog) move() {
    fmt.Printf("%s会跑\n", d.name)
}

// car类型实现Mover接口
func (c car) move() {
    fmt.Printf("%s速度70迈\n", c.brand)
}

빈 인터페이스

빈 인터페이스: 인터페이스{}는 어떠한 메서드도 포함하지 않습니다. 이로 인해 모든 유형은 빈 인터페이스를 구현하므로 빈 인터페이스는 모든 유형의 데이터를 저장할 수 있습니다.

시리즈 함수, 대부분의 매개변수는 빈 인터페이스 유형이며 이는 모든 유형을 지원한다고 할 수도 있습니다.

func main() {
        var x Mover
        var a = dog{name: "旺财"}
        var b = car{brand: "保时捷"}
        x = a
        x.move()
        x = b
        x.move()
    }

빈 인터페이스는 맵의 값으로 사용됩니다

func Print(a ...interface{}) (n int, err error)
func Println(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)

fmt 包下的 Print유형 추론

빈 인터페이스 어떤 유형의 값도 저장할 수 있는데, 저장된 특정 데이터를 얻으려면 어떻게 해야 할까요?

인터페이스 값

인터페이스 값(인터페이스 값이라고 함)은 특정 유형과 특정 유형의 값으로 구성됩니다.

이 두 부분을 각각 인터페이스의 동적 유형과 동적 값이라고 합니다.

빈 인터페이스의 값을 판단하려면 이때 유형 어설션을 사용할 수 있습니다. 구문 형식은 다음과 같습니다.

// 空接口作为map值
    var studentInfo = make(map[string]interface{})
    studentInfo["name"] = "李白"
    studentInfo["age"] = 18
    studentInfo["married"] = false
    fmt.Println(studentInfo)
여기서:

x: 유형 인터페이스의 변수를 나타냅니다.{}

  • T: 주장 x를 나타냅니다. 아마도 유형일 것입니다.

该语法返回两个参数,第一个参数是x转化为T类型后的变量,第二个值是一个布尔值,若为true则表示断言成功,为false则表示断言失败。

func main() {
    var x interface{}
    x = "ms的go教程"
    v, ok := x.(string)
    if ok {
        fmt.Println(v)
    } else {
        fmt.Println("类型断言失败")
    }
}

 上面的示例中如果要断言多次就需要写多个if判断,这个时候我们可以使用switch语句来实现:

func justifyType(x interface{}) {
    switch v := x.(type) {
    case string:
        fmt.Printf("x is a string,value is %v\n", v)
    case int:
        fmt.Printf("x is a int is %v\n", v)
    case bool:
        fmt.Printf("x is a bool is %v\n", v)
    default:
        fmt.Println("unsupport type!")
    }
}

因为空接口可以存储任意类型值的特点,所以空接口在Go语言中的使用十分广泛。

总结

关于接口需要注意的是,只有当有两个或两个以上的具体类型必须以相同的方式进行处理时才需要定义接口。不要为了接口而写接口,那样只会增加不必要的抽象,导致不必要的运行时损耗。

【相关推荐:Go视频教程编程教学

위 내용은 언어로 인터페이스를 개발할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

Golang은 높은 동시성 작업에 더 적합하지만 Python은 유연성에 더 많은 장점이 있습니다. 1. Golang은 Goroutine 및 채널을 통해 동시성을 효율적으로 처리합니다. 2. Python은 GIL의 영향을받는 스레딩 및 Asyncio에 의존하지만 여러 동시성 방법을 제공합니다. 선택은 특정 요구 사항을 기반으로해야합니다.

Golang 및 C : 성능 상충Golang 및 C : 성능 상충Apr 17, 2025 am 12:18 AM

Golang과 C의 성능 차이는 주로 메모리 관리, 컴파일 최적화 및 런타임 효율에 반영됩니다. 1) Golang의 쓰레기 수집 메커니즘은 편리하지만 성능에 영향을 줄 수 있습니다. 2) C의 수동 메모리 관리 및 컴파일러 최적화는 재귀 컴퓨팅에서 더 효율적입니다.

Golang vs. Python : 응용 프로그램 및 사용 사례Golang vs. Python : 응용 프로그램 및 사용 사례Apr 17, 2025 am 12:17 AM

선택 GOLANGFORHIGHERFERFERFORMANDCONDCURRENCY, TILDFORBECTERVICES 및 NNETWORKPRAMPHING; SELECTPYTHONFORRAPIDDEVENTURMENT, DATASCIENCE 및 MACHINEARNINGDUETOITSTINTIVENDEXTENDIVERIRIES.

Golang vs. Python : 주요 차이점과 유사성Golang vs. Python : 주요 차이점과 유사성Apr 17, 2025 am 12:15 AM

Golang과 Python은 각각 고유 한 장점이 있습니다. Golang은 고성능 및 동시 프로그래밍에 적합하지만 Python은 데이터 과학 및 웹 개발에 적합합니다. Golang은 동시성 모델과 효율적인 성능으로 유명하며 Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명합니다.

Golang vs. Python : 사용 편의성 및 학습 곡선Golang vs. Python : 사용 편의성 및 학습 곡선Apr 17, 2025 am 12:12 AM

Golang과 Python은 어떤 측면에서 사용하기 쉽고 부드러운 학습 곡선을 가지고 있습니까? Golang은 높은 동시성과 고성능 요구에 더 적합하며, 학습 곡선은 C 언어 배경을 가진 개발자에게는 비교적 온화합니다. Python은 데이터 과학 및 빠른 프로토 타이핑에 더 적합하며 학습 곡선은 초보자에게 매우 매끄 럽습니다.

공연 경주 : 골랑 대 c공연 경주 : 골랑 대 cApr 16, 2025 am 12:07 AM

Golang과 C는 각각 공연 경쟁에서 고유 한 장점을 가지고 있습니다. 1) Golang은 높은 동시성과 빠른 발전에 적합하며 2) C는 더 높은 성능과 세밀한 제어를 제공합니다. 선택은 프로젝트 요구 사항 및 팀 기술 스택을 기반으로해야합니다.

Golang vs. C : 코드 예제 및 성능 분석Golang vs. C : 코드 예제 및 성능 분석Apr 15, 2025 am 12:03 AM

Golang은 빠른 개발 및 동시 프로그래밍에 적합한 반면 C는 극심한 성능과 기본 제어가 필요한 프로젝트에 더 적합합니다. 1) Golang의 동시성 모델은 Goroutine 및 Channel을 통한 동시성 프로그래밍을 단순화합니다. 2) C의 템플릿 프로그래밍은 일반적인 코드 및 성능 최적화를 제공합니다. 3) Golang의 쓰레기 수집은 편리하지만 성능에 영향을 줄 수 있습니다. C의 메모리 관리는 복잡하지만 제어는 괜찮습니다.

Golang의 영향 : 속도, 효율성 및 단순성Golang의 영향 : 속도, 효율성 및 단순성Apr 14, 2025 am 12:11 AM

goimpactsdevelopmentpositively throughlyspeed, 효율성 및 단순성.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)