Boş Arayüz
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 16 / 68.
Şimdiye kadar belirli metotlar gerektiren arayüzlerle çalıştın, ancak Go'nun inanılmaz derecede esnek özel bir arayüzü vardır: interface{} olarak yazılan boş arayüz. Go 1.18'den beri bunu, tam olarak interface{} anlamına gelen yerleşik bir takma ad olan any şeklinde de yazabilirsin.
Boş arayüzün hiçbir yöntem gereksinimi yoktur; bu da Go'daki her türün onu otomatik olarak karşıladığı anlamına gelir. Her tür (en azından) sıfır yöntem uyguladığından, her tür bir interface{} değişkenine atanabilir:
var anything interface{}
anything = 42 // int
anything = "hello" // string
anything = true // bool
anything = []int{1, 2, 3} // sliceBu, bilinmeyen veya değişken türlerdeki verilerle çalışmanız gerektiğinde interface{} yapısını son derece kullanışlı kılar. Yapılandırma dosyalarını okurken, kullanıcı girdilerini işlerken veya duruma bağlı olarak farklı veri türleri döndüren API'lerle çalışırken böyle bir durumla karşılaşabilirsiniz.
Ancak boş arayüz her türü tutabildiğinden, değeri anlamlı bir şekilde kullanabilmek için çoğu zaman içinde gerçekte hangi türün saklandığını belirlemeniz gerekir. İşte tür dönüşümleri ve tür anahtarları (bunları bir sonraki bölümde öğreneceksiniz), interface{} değerleriyle güvenli bir şekilde çalışmak için vazgeçilmez araçlar hâline gelir.
Görev
KolayBu görevde, farklı türde değerleri işleyebilen bir veri işleyici oluşturarak boş arayüzle çalışmayı alıştırma yapacaksın. interface{} parametresi alan ve çeşitli veri türlerini işleyen bir fonksiyon oluşturacaksın.
İki girdi alacaksın:
- Veri türünü temsil eden bir dize (ör.
"int","string","bool"veya"slice") - Gerçek değeri temsil eden bir dize (ör.
"42","hello","true"veya"1,2,3")
Görevin:
interface{}parametresi alan ve değer hakkında bilgi yazdıran,processDataadlı bir fonksiyon oluşturmak- Veri türü girdisine göre değer dizesini uygun Go türüne dönüştürmek:
"int"için: tam sayıya dönüştür"string"için: dize olarak kullan"bool"için: boolean değerine dönüştür"slice"için: virgülle ayrılmış değerleri bir tam sayı dilimine dönüştür
- Dönüştürülen değerle
processDatafonksiyonunu çağırmak processDataiçinde, değeri ve türünü şu biçimde yazdırmak:"Value: [value], Type: [type]"
Dilim girdisi için "1,2,3" gibi virgülle ayrılmış dize, []int{1, 2, 3} biçimine dönüştürülmelidir. Fonksiyon, interface{} kabul ettiği için her türdeki değerle çalışmalıdır; böylece boş arayüzün her türdeki değerleri tutabileceği gösterilir. Değeri ve türü sırasıyla görüntülemek için %v ve %T biçim belirteçleriyle fmt.Printf kullan.
Kendin dene
package main
import (
"fmt"
)
func main() {
// Girdiyi oku
var dataType string
var valueStr string
fmt.Scanln(&dataType)
fmt.Scanln(&valueStr)
// TODO: Kodunu aşağıya yaz
// 1. interface{} kabul eden processData fonksiyonunu oluştur
// 2. valueStr değerini dataType değerine göre uygun türe dönüştür
// 3. Dönüştürülen değerle processData fonksiyonunu çağır
}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