Bir Arayüzü Uygulama
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 14 / 68.
Artık bir arayüzü nasıl tanımlayacağınızı bildiğinize göre, Go türlerinin bunları gerçekte nasıl uyguladığını öğrenelim. Anlamanız gereken en önemli şey, Go'nun örtük uygulama kullanmasıdır; özel bir anahtar sözcüğe veya bildirime gerek yoktur.
Eğer bir tür, bir arayüzün gerektirdiği tüm metotlara sahipse, o arayüzü otomatik olarak karşılar. Türünüzün arayüzü uyguladığını açıkça belirtmenize gerek yoktur - Go bunu sizin yerinize halleder.
Önceki dersteki Shaper arayüzü ile nasıl çalıştığı aşağıda açıklanmıştır:
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14159 * c.Radius * c.Radius
}Circle tipi, float64 döndüren bir Area() metoduna sahip olduğu için, Shaper arayüzünü otomatik olarak uygular. Bu ilişkiyi açıkça belirtmeye gerek yoktur; Go, bunu metod imzası eşleşmesine dayanarak tanır.
Bu örtük yaklaşım, Go arayüzlerini inanılmaz derecede esnek kılar. Mevcut herhangi bir tür, arayüz tür yazıldıktan sonra oluşturulmuş olsa bile, gerekli metotlara sahip olduğu sürece yeni bir arayüzü karşılayabilir.
Görev
KolayBu meydan okumada, basit bir araç sistemi oluşturarak bir arayüz uygulama pratiği yapacaksın. Go'nun örtük uygulaması sayesinde Vehicle arayüzünü otomatik olarak uygulayan bir Car yapısı oluşturacaksın.
İki girdi alacaksın:
- Aracın markasını temsil eden bir dize (ör.
"Toyota") - Aracın km/sa cinsinden hızını temsil eden bir dize (ör.
"120")
Görevin şunları yapmaktır:
- Bir metot imzası içeren bir
Vehiclearayüzü tanımla: dize döndürenGetInfo() - İki alana sahip bir
Caryapısı tanımla:Brand(string) veSpeed(int) Caryapısı için, şu biçimde bir dize döndürenGetInfo()metodunu uygula:"Brand: [brand], Speed: [speed] km/h"- Bir
Carörneği oluşturmak için girdileri ayrıştır GetInfo()metodunu çağır ve sonucu yazdır
Go'da, gerekli doğru imzaya sahip GetInfo() metoduna sahip olduğu için Car yapısının Vehicle arayüzünü otomatik olarak uygulayacağını unutma. Car'ın Vehicle'ı uyguladığını açıkça belirtmeye gerek yoktur; Go bu ilişkiyi örtük olarak tanır.
Kendin dene
package main
import (
"fmt"
"strconv"
)
// TODO: 1. GetInfo() string metoduna sahip Vehicle arayüzünü (interface) tanımlayın
// TODO: 2. Brand (string) ve Speed (int) alanlarına sahip Car yapısını (struct) tanımlayın
// TODO: 3. Car için GetInfo() metodunu uygulayın
func main() {
// Girdiyi oku
var brand string
var speedStr string
fmt.Scanln(&brand)
fmt.Scanln(&speedStr)
// Hız dizesini tam sayıya dönüştür
speed, _ := strconv.Atoi(speedStr)
// TODO: 4. Brand ve speed kullanarak bir Car örneği oluşturun, ardından GetInfo() metodunu çağırın
result := "" // bu satırı kendi uygulamanızla değiştirin
_ = brand
_ = speed
// Sonucu yazdır
fmt.Println(result)
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve DavranışlarKendi başına pratik yap: Online Go derleyicisi