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 yöntemler 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.
Boş arayüzün hiçbir yöntem gereksinimi yoktur; bu da Go'daki herhangi bir türün onu otomatik olarak karşılayabileceği anlamına gelir. Her tür en azından sıfır yöntem uyguladığı için, 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{} ifadesini son derece kullanışlı hâle getirir. Bununla 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 karşılaşabilirsiniz.
Ancak boş arayüz herhangi bir türü tutabildiğinden, değeri anlamlı bir şekilde kullanabilmenizden önce genellikle içinde gerçekte hangi türün depolandığını belirlemeniz gerekir. İşte tür iddialarının ve tür anahtarlarının (bunları bir sonraki bölümde öğreneceksiniz) interface{} değerleriyle güvenli bir şekilde çalışmak için temel araçlar hâline geldiği nokta burasıdır.
Görev
KolayBu meydan okumada, farklı değer türlerini işleyebilen bir veri işlemcisi oluşturarak boş arayüzle çalışmayı uygulayacaksınız. Bir interface{} parametresi kabul eden ve çeşitli veri türlerini işleyen bir işlev oluşturacaksınız.
İki girdi alacaksınız:
- Veri türünü temsil eden bir dize (örneğin,
"int","string","bool"veya"slice") - Gerçek değeri temsil eden bir dize (örneğin,
"42","hello","true"veya"1,2,3")
Göreviniz:
- Bir
interface{}parametresi alan ve değer hakkında bilgi yazdıranprocessDataadlı bir işlev oluşturun - Veri türü girdisine göre değer dizesini uygun Go türüne dönüştürün:
"int"için: tamsayıya dönüştürün"string"için: dize olarak kullanın"bool"için: boolean'a dönüştürün"slice"için: virgülle ayrılmış değerleri bir tamsayı dilimine dönüştürün
processDataişlevini dönüştürülmüş değerle çağırınprocessDataiçinde değeri ve türünü şu biçimde yazdırın:"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. İşlev, interface{} kabul ettiği için her türle çalışmalı ve boş arayüzün herhangi bir türdeki değerleri tutabileceğini göstermelidir. Değeri ve türü sırasıyla görüntülemek için %v ve %T biçim belirteçleriyle fmt.Printf kullanın.
Kendin dene
package main
import (
"fmt"
)
func main() {
// Girişi oku
var dataType string
var valueStr string
fmt.Scanln(&dataType)
fmt.Scanln(&valueStr)
// TODO: Kodunuzu aşağıya yazın
// 1. interface{} kabul eden processData fonksiyonunu oluştur
// 2. valueStr'yi dataType'a göre uygun türe dönüştür
// 3. Dönüştürülmüş değerle processData'yı ç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