Ana içeriğe geç
Modül 1 · Ders 2 ders 5Kurstaki 2/50~10 min
Modül dersleri (2/5)

Sıfır değer ve tür dönüşümleri

Go'da açık bir değer olmadan bildirilen her değişken bir sıfır değer: türünün "nötr değeri". Bu çok büyük bir fark let x;'nin undefined ürettiği JavaScript'ten veya bitirdiğiniz C'den çöp hafızasıyla dolu. undefined yok, UB yok: yalnızca sıfır.

Sıfır değer tablosu

KategoriTürSıfır değer
Sayısalint, int64, float32, float64, uint, ...0
Booleanboolfalse
Dizestring"" (boş dize)
İşaretçi*Tnil
Dilim / Harita / Kanal[]T, map[K]V, chan Tnil
Fonksiyon / Arayüzfunc(...), interface{...}nil
YapıT struct{...}tüm alanlar sıfır değerinde
Go
var i int        // 0
var f float64    // 0
var s string     // ""
var b bool       // false
var p *int       // nil
var nums []int   // nil  (NB: una slice nil ha len 0 e si può iterare!)

Dönüşümler HER ZAMAN açıktır

C, Python veya JS'den farklı olarak Go, birini otomatik olarak tanıtmaz sayısal türü diğerine: type(value) yazmalısınız.

Go
i := 42
var f float64 = float64(i)
var u uint = uint(i)

Bu, int ve int64 gibi "uyumlu" türler için bile geçerlidir: açık dönüşüm her zaman gereklidir.

Go
var a int = 10
var b int64 = int64(a)  // obbligatorio

Sayılar arasında dönüştürme: kesilmelere dikkat edin

float64'den int'ye gidildiğinde sıfıra doğru kesilir, yuvarlak:

Go
f := 3.9
i := int(f)   // 3, non 4
n := int(-3.9) // -3, non -4

Dize ↔ sayı dönüşümü

string(65) "65" VERMEZ: "A" verir (kodlu rune) nokta 65). Dize → sayı için ve tam tersi için strconv'ye ihtiyacınız vardır. paket:

Go
import "strconv"

s := strconv.Itoa(42)        // "42"
n, err := strconv.Atoi("42") // 42, nil

Bunu Stdlib modülünde derinlemesine ele alacağız.

Sıra sende

Egzersiz#go.m1.l2.e1
Denemeler: 0Yükleniyor…

İnt türünde değişken bir sayacı başlatmadan bildirin ve yazdırın. Beklenen: 0.

Düzenleyici yükleniyor…
İpucu göster

Başlatıcı olmadan değişken türün sıfır değerini alır.

3 denemeden sonra çözüm mevcut

Egzersiz#go.m1.l2.e2
Denemeler: 0Yükleniyor…

n=10 tamsayısını verildiğinde, n'yi float64'e dönüştürün ve 4'e bölün. Sonucu yazdırın (beklenen 2,5).

Düzenleyici yükleniyor…
İpucu göster

Açık dönüştürme olmadan, 'n / 4' 2'yi veren bir tamsayı bölümüdür.

3 denemeden sonra çözüm mevcut

Quiz#go.m1.l2.e3
Hazır

Bu kod ne yazdırıyor?

Go
f := 3.7
fmt.Println(int(f))
Cevap seçenekleri

Özet

  • Her türün tutarlı bir sıfır değeri vardır: undefined yok, UB yok.
  • Dilim/harita/kanal/işlev/arabirim/işaretçinin değeri sıfırdır nil.
  • Sayısal dönüşümler type(value) ile her zaman açıktır.
  • int(float) sıfıra doğru kısalır; yuvarlamak için math.Round kullanın.
  • String ↔ number için strconv paketini kullanın (doğrudan dönüşüm DEĞİLDİR).