Go Schnittstellen Tutorial

GolangGolangBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Labor behandelt Schnittstellen in Golang. Schnittstellen sind benannte Sammlungen von Methodensignaturen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) go/ObjectOrientedProgrammingGroup -.-> go/interfaces("Interfaces") subgraph Lab Skills go/interfaces -.-> lab-15484{{"Go Schnittstellen Tutorial"}} end

Schnittstellen

Das Problem besteht darin, eine Schnittstelle in Go zu implementieren. Dazu müssen wir einfach alle Methoden in der Schnittstelle implementieren. Hier implementieren wir geometry für rects und circles.

  • Implementieren Sie eine Schnittstelle in Go.
  • Implementieren Sie alle Methoden in der Schnittstelle.
  • Verwenden Sie eine generische measure-Funktion, um mit jeder geometry zu arbeiten.
  • Verwenden Sie Instanzen von circle- und rect-Strukturen als Argumente für measure.
$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793

## Um mehr über Go's Schnittstellen zu erfahren, schauen Sie sich diesen
## [tollen Blogbeitrag](https://jordanorelli.tumblr.com/post/32665860244/how-to-use-interfaces-in-go) an.

Hier ist der vollständige Code:

// _Schnittstellen_ sind benannte Sammlungen von Methodensignaturen.

package main

import (
	"fmt"
	"math"
)

// Hier ist eine einfache Schnittstelle für geometrische Formen.
type geometry interface {
	area() float64
	perim() float64
}

// Für unser Beispiel implementieren wir diese Schnittstelle für
// `rect`- und `circle`-Typen.
type rect struct {
	width, height float64
}
type circle struct {
	radius float64
}

// Um eine Schnittstelle in Go zu implementieren, müssen wir einfach
// alle Methoden in der Schnittstelle implementieren. Hier implementieren
// wir `geometry` für `rect`s.
func (r rect) area() float64 {
	return r.width * r.height
}
func (r rect) perim() float64 {
	return 2*r.width + 2*r.height
}

// Die Implementierung für `circle`s.
func (c circle) area() float64 {
	return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
	return 2 * math.Pi * c.radius
}

// Wenn eine Variable einen Schnittstellentyp hat, können wir dann
// Methoden aufrufen, die in der benannten Schnittstelle vorhanden sind.
// Hier ist eine generische `measure`-Funktion, die dies nutzt, um mit
// jeder `geometry` zu arbeiten.
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}

	// Die `circle`- und `rect`-Strukturtypen implementieren beide
	// die `geometry`-Schnittstelle, sodass wir Instanzen
	// dieser Strukturen als Argumente für `measure` verwenden können.
	measure(r)
	measure(c)
}

Zusammenfassung

Dieses Labor geht um die Implementierung einer Schnittstelle in Go. Wir haben die geometry-Schnittstelle für rects und circles implementiert und eine generische measure-Funktion verwendet, um mit jeder geometry zu arbeiten.