Menu
CoddyTech

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}  // slice

Bu, 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.

challenge icon

Görev

Kolay

Bu 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:

  1. interface{} parametresi alan ve değer hakkında bilgi yazdıran, processData adlı bir fonksiyon oluşturmak
  2. 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
  3. Dönüştürülen değerle processData fonksiyonunu çağırmak
  4. processData iç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
	
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Go derleyicisi