Menu
Coddy logo textTech

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

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

challenge icon

Görev

Kolay

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

  1. Bir interface{} parametresi alan ve değer hakkında bilgi yazdıran processData adlı bir işlev oluşturun
  2. 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
  3. processData işlevini dönüştürülmüş değerle çağırın
  4. processData iç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
	
}
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