Arayüz Tanımlama ve Uygulama
Örtük uyumluluk ve boş arayüz
Arayüz Tanımlama ve Uygulama, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Arayüz Nedir
Go'da bir arayüz, yöntem imzaları kümesidir. Bu yöntemlerin tümünü uygulayan herhangi bir tür, arayüzü örtük olarak karşılar — implements anahtar sözcüğüne gerek yoktur. Buna yapısal türleme veya ördek türlemesi denir.
Arayüz Tanımlama
type anahtar sözcüğüyle bir arayüz tanımlayın:
package main
import "fmt"
type Shape interface {
Area() float64
Perimeter() float64
}
type Circle struct{ Radius float64 }
func (c Circle) Area() float64 { return 3.14159 * c.Radius * c.Radius }
func (c Circle) Perimeter() float64 { return 2 * 3.14159 * c.Radius }
func main() {
var s Shape = Circle{5}
fmt.Printf("Area: %.2f\n", s.Area())
}Örtük Arayüz Uyumluluğu
Niyet bildirimi gerekmez. Bir tür doğru yöntemlere sahipse arayüzü otomatik olarak karşılar:
package main
import "fmt"
type Greeter interface{ Greet() string }
type English struct{}
func (e English) Greet() string { return "Hello" }
type Spanish struct{}
func (s Spanish) Greet() string { return "Hola" }
func say(g Greeter) { fmt.Println(g.Greet()) }
func main() {
say(English{})
say(Spanish{})
}Boş Arayüz
interface{} (veya Go 1.18 ve sonrasında any), her tür tarafından karşılanır. Tür derleme zamanında bilinmediğinde kullanılır:
package main
import "fmt"
func printAny(v any) { fmt.Printf("%T: %v\n", v, v) }
func main() {
printAny(42)
printAny("hello")
printAny([]int{1,2,3})
}Arayüz Değerleri
Bir arayüz değeri iki şey içerir: somut bir tür ve somut bir değer. Nil arayüzünde ikisi de nil olarak ayarlanmıştır:
package main
import "fmt"
type Animal interface{ Sound() string }
type Dog struct{}
func (d Dog) Sound() string { return "woof" }
func main() {
var a Animal
fmt.Println(a == nil) // true
a = Dog{}
fmt.Println(a == nil) // false
fmt.Println(a.Sound())
}Birden Çok Arayüzle Uyumluluk
Bir tür, aynı anda birden çok arayüzü karşılayabilir:
package main
import "fmt"
type Reader interface{ Read() string }
type Writer interface{ Write(string) }
type ReadWriter interface{ Reader; Writer }
type File struct{ content string }
func (f *File) Read() string { return f.content }
func (f *File) Write(s string) { f.content = s }
func main() {
var rw ReadWriter = &File{}
rw.Write("hello")
fmt.Println(rw.Read())
}Arayüz Ataması
Daha geniş bir arayüz, daha dar bir somut değeri tutabilir. Arayüz türleri arasında atama yapılabilmesi için somut türün her ikisini de karşılaması gerekir:
package main
import "fmt"
type Stringer interface{ String() string }
type Point struct{ X, Y int }
func (p Point) String() string { return fmt.Sprintf("(%d,%d)", p.X, p.Y) }
func main() {
var s Stringer = Point{3, 4}
fmt.Println(s.String())
}Nil Arayüz Tuzağı
Nil somut bir değer tutan nil olmayan bir arayüz, nil'e eşit değildir (NOT):
package main
import "fmt"
type MyErr struct{}
func (e *MyErr) Error() string { return "oops" }
func bad() error {
var e *MyErr // nil pointer
return e // returns non-nil interface!
}
func main() {
err := bad()
fmt.Println(err == nil) // false — common gotcha
}Arayüzler Sınanabilirliği Sağlar
Bağımlılıkları arayüz olarak tanımlamak, sınamalarda gerçek uygulamaların yerine taklitlerin kullanılmasına olanak tanır:
package main
import "fmt"
type EmailSender interface{ Send(to, body string) error }
type MockSender struct{ Sent []string }
func (m *MockSender) Send(to, body string) error {
m.Sent = append(m.Sent, to)
return nil
}
func notify(s EmailSender, addr string) { s.Send(addr, "hello") }
func main() {
mock := &MockSender{}
notify(mock, "a@b.com")
fmt.Println(mock.Sent) // [a@b.com]
}Arayüzleri Kabul Edin, Yapıları Döndürün
Bir Go iyi uygulaması: işlev parametreleri esneklik için arayüz, dönüş türleri ise çağıranların ne aldığını bilmesi için somut tür olmalıdır:
package main
type Logger interface{ Log(string) }
type FileLogger struct{}
func (f *FileLogger) Log(s string) {}
func NewFileLogger() *FileLogger { // returns concrete
return &FileLogger{}
}
func process(l Logger) {} // accepts interface
func main() { process(NewFileLogger()) }Arayüzleri Küçük Tutun
Go standart kitaplığı küçük arayüzleri tercih eder: io.Reader bir yönteme, io.Writer da bir yönteme sahiptir. Küçük arayüzleri birleştirmek ve taklit etmek daha kolaydır.
Kısa Denetim
Bir türün bir arayüzü uyguladığını bildirmesi gerekir mi?
Özet: Arayüzler
Önemli çıkarımlar:
- Arayüzler veriyi değil davranışı tanımlar
- Uyumluluk örtüktür —
implementsanahtar sözcüğü yoktur - Boş arayüz (
any) her türü kabul eder - Nil arayüz tuzağına dikkat edin
- Arayüzleri küçük ve odaklı tutun
Alıştırma İstemi
Save(key, value string) error ve Load(key string) (string, error) yöntemlerine sahip bir Storage arayüzü tanımlayın. Bunu bir eşlemeyle desteklenen MemStorage ile uygulayın ve sınayın.
Sıkça Sorulan Sorular
“Arayüz Tanımlama ve Uygulama” dersi ücretsiz mi?
Evet — “Arayüz Tanımlama ve Uygulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Arayüz Tanımlama ve Uygulama” dersinde ne öğreneceğim?
Örtük uyumluluk ve boş arayüz Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Arayüz Tanımlama ve Uygulama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Arayüz Tanımlama ve Uygulama
- Temel Standart Kitaplık Arayüzleri
- Tür Doğrulamaları ve Tür Switch'leri
- Arayüz Birleştirme ve En İyi Uygulamalar