Go, çeşitli programlama senaryolarında sıkça karşılaşılan bir işlem olan, string’leri integer’lara dönüştürmek için birkaç verimli yöntem sunar. Bu makale, üç temel yaklaşımı inceleyerek, belirli ihtiyaçlarınız için en iyi yöntemi seçmenize yardımcı olmak amacıyla güçlü ve zayıf yönlerini vurgular.
İçindekiler
1. strconv.Atoi()
strconv.Atoi()
fonksiyonu, 10 tabanlı bir string’i integer’a dönüştürmek için özlü bir yol sağlar. Basitliği, basit dönüşümler için idealdir.
package main
import (
"fmt"
"strconv"
)
func main() {
str := "12345"
num, err := strconv.Atoi(str)
if err != nil {
fmt.Println("Hata:", err)
} else {
fmt.Println("Integer:", num)
}
}
Fonksiyon, dönüştürülen integer ve bir hata değerini döndürür. Giriş stringinin geçerli bir integer olmadığı durumları işlemek için her zaman hataları kontrol edin.
2. strconv.ParseInt()
Daha esnek integer dönüşümleri için strconv.ParseInt()
, tabanı (radix) ve istenen integer boyutunu (örneğin, int32, int64) belirtmenize olanak tanır.
package main
import (
"fmt"
"strconv"
)
func main() {
str := "1A"
num, err := strconv.ParseInt(str, 16, 64) // 16 taban, 64-bit integer
if err != nil {
fmt.Println("Hata:", err)
} else {
fmt.Println("Integer:", num)
}
str2 := "101101"
num2, err := strconv.ParseInt(str2, 2, 64) // 2 taban, 64-bit integer
if err != nil {
fmt.Println("Hata:", err)
} else {
fmt.Println("Integer:", num2)
}
}
Bu örnek, onaltılık ve ikili string’lerin dönüştürülmesini göstermektedir. İkinci argüman tabanı, üçüncü argüman ise sonuç integer’ın bit boyutunu belirtir. Hata işleme çok önemlidir.
3. fmt.Sscanf()
fmt.Sscanf()
, karmaşık string formatlarıyla uğraşırken kullanışlı olan, string ayrıştırmaya daha genel bir yaklaşım sunar. Bununla birlikte, basit integer dönüşümleri için, strconv
fonksiyonlarından genellikle daha az verimlidir.
package main
import (
"fmt"
)
func main() {
str := "Değer: 12345"
var num int
_, err := fmt.Sscanf(str, "Değer: %d", &num)
if err != nil {
fmt.Println("Hata:", err)
} else {
fmt.Println("Integer:", num)
}
}
“Değer: %d” format string’i, string’in nasıl ayrıştırılacağını belirtir. %d
, num
değişkeninde saklanacak bir integer’ı gösterir. Bu yöntem, yapılandırılmış verileri ayrıştırmak için güçlüdür, ancak basit integer dönüşümleri için karmaşıklık ekler.
4. Yöntemlerin Karşılaştırılması
Doğru yöntemi seçmek, belirli ihtiyaçlarınıza bağlıdır:
Yöntem | Taban Desteği | Bit Boyutu Kontrolü | Hata İşleme | Basitlik | Kullanım Alanı |
---|---|---|---|---|---|
strconv.Atoi() |
Yalnızca 10 Taban | Hayır | Evet | Yüksek | Basit 10 tabanlı dönüşümler |
strconv.ParseInt() |
Değişken | Evet | Evet | Orta | Esnek taban ve bit boyutu |
fmt.Sscanf() |
Değişken | Evet | Evet | Düşük | Karmaşık string ayrıştırma |
Temel 10 tabanlı dönüşümler için strconv.Atoi()
en basit ve en verimli yöntemdir. strconv.ParseInt()
, farklı tabanlar ve integer boyutları için daha fazla esneklik sağlar. fmt.Sscanf()
, daha karmaşık string yapılarından integer’ları çıkarmak için en iyisidir.