Menu

Golang Veri Tipleri: int, float64, string, bool, byte, rune

Go'nun yerleşik tipleri: tam sayı boyutları ve aralıkları, float32 ve float64, bool, string, byte ve rune, karmaşık sayılar, sıfır değerler ve bir değerin tipini %T ile yazdırmak.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

Go'nun temel tipleri sayılar, boolean'lar ve string'lerdir. Her değişkenin derleme zamanında belirlenen tam olarak bir tipi vardır ve Go sizin yerinize tipler arasında asla dönüşüm yapmaz. %T herhangi bir değerin tipini yazdırır:

'G''nin int32 tipiyle 71 olarak yazdırıldığına dikkat edin: tek tırnaklı bir karakter bir rune'dur ve rune bir sayıdır (Unicode kod noktası). rune, int32 için bir takma addır (ikinci bir adla aynı tip), bu yüzden %T int32 raporlar. Aynı şekilde byte da uint8 raporlar.

Tam Sayılar

TipBoyutAralık
int88 bit-128 ile 127 arası
int1616 bit-32.768 ile 32.767 arası
int3232 bityaklaşık -2,1 milyar ile 2,1 milyar arası
int6464 bityaklaşık -9,2 kentilyon ile 9,2 kentilyon arası
uint8 (byte)8 bit0 ile 255 arası
uint1616 bit0 ile 65.535 arası
uint3232 bit0 ile yaklaşık 4,3 milyar arası
uint6464 bit0 ile yaklaşık 18,4 kentilyon arası
int, uint32 ya da 64 bitplatformun word boyutu
uintptrplatform boyutualt seviye kod için bir pointer değeri tutar

Varsayılan olarak int kullanın. len() bir int döndürür, slice indeksleri int'tir ve döngü sayaçları int'tir. Her 64 bit platformda int 64 bittir. Boyut bir sözleşmenin parçası olduğunda boyutlu tiplere başvurun: ikili bir dosya formatında int32, ham baytlar için uint8, nanosaniye cinsinden bir Unix zaman damgası için int64.

Sayılar gibi "negatif olamayan" miktarlar için işaretsiz tiplerden kaçının. Sıfırın altına düşen bir çıkarma, yakalayabileceğiniz negatif bir sayı üretmek yerine çok büyük bir sayıya sarar.

Sınırlar ve taşma

math paketinde her sınır için bir sabit vardır. Çalışma zamanında taşan tam sayı aritmetiği sessizce başa sarar:

Panic yok, hata yok: 127 + 1, -128 olur. Yalnızca sabit ifadeler derleme zamanında kontrol edilir (var b int8 = 128 derlenmez). Verinizde taşma olasılığı varsa işlemden önce kontrol edin ya da math/big kullanın.

Tam sayı literal'leri

million := 1_000_000   // underscores for readability (Go 1.13+)
mask := 0xFF           // hexadecimal
perm := 0o755          // octal (also the older form 0755)
flags := 0b1010        // binary

Ondalıklı Sayılar

TipBoyutHassasiyet
float3232 bityaklaşık 6 ila 9 anlamlı basamak
float6464 bityaklaşık 15 ila 17 anlamlı basamak

Ondalık noktası ya da üssü olan bir literal (2.5, 1e6) varsayılan olarak float64'tür ve math paketi float64 alıp döndürür. Büyük bir dizide bellek önemli değilse bunu kullanın.

Float'lar ikili tabanda tutulur, bu yüzden çoğu ondalık kesir yaklaşık değerdir:

Buradan iki kural çıkar. Aritmetikten sonra float'ları asla == ile karşılaştırmayın. Ve parayı asla bir float'ta saklamayın: kuruş cinsinden bir tam sayı ya da bir decimal kütüphanesi kullanın.

Bir float'ı sıfıra bölmek panic yerine +Inf, -Inf ya da NaN verir. Bir tam sayıyı sıfıra bölmek çalışma zamanında panic'e yol açar (runtime error: integer divide by zero), sabit bir sıfır bölen ise derleme hatasıdır.

Boolean'lar

bool, true ya da false tutar ve sıfır değeri false'tur. Go sayıları, boş string'leri ya da nil'i boolean olarak görmez. if count {} derleme hatasıdır; if count > 0 {} yazın. Operatörler &&, || ve !'dir; && ve || kısa devre yapar.

String'ler

Bir string, genellikle UTF-8 metin olan değiştirilemez bir bayt dizisidir. len(s) karakterleri değil baytları sayar:

é UTF-8'de iki bayt tutar, bu yüzden len beş karakter için 6 raporlar. Çift tırnaklı string'ler \n gibi kaçış dizilerini işler; ters tırnaklı ham string'ler işlemez ve birden fazla satıra yayılabilir. strings sayfası strings paketini, runes and bytes sayfası da UTF-8'i derinlemesine anlatıyor.

byte ve rune

Takma adKarşılığıTuttuğu
byteuint8bir baytlık ham veri
runeint32bir Unicode kod noktası

Bunlar yeni tipler değil, takma adlardır: bir byte ile bir uint8 dönüşüm olmadan birbirinin yerine kullanılabilir. Adlar, sayının ne anlama geldiğini söyler.

Karmaşık Sayılar

Go'nun complex64 ve complex128 adında yerleşik karmaşık sayı tipleri vardır; real, imag ve math/cmplx paketiyle birlikte gelirler:

Az sayıda program bunlara ihtiyaç duyar, ama sinyal işleme ve bazı sayısal kodlar duyar.

Bileşik ve Referans Tipleri

Temel tipler bileşik tiplere dönüşür. Her birinin kendi sayfası var:

TipÖrnekSıfır değer
dizi[3]intüç sıfır
slice[]intnil
mapmap[string]intnil
structstruct{ X, Y int }her alan sıfırlanmış
pointer*intnil
fonksiyonfunc(int) intnil
channelchan intnil
interfaceerror, anynil

any, interface{} için bir takma addır (Go 1.18'den beri) ve her tipten bir değer tutabilir.

Adlandırılmış Tipler

Var olan bir tipten yeni bir tip tanımlayabilirsiniz. Aynı temsile sahiptir ama ayrı bir tiptir ve metotları olabilir:

type Celsius float64
type UserID int64

var t Celsius = 21.5
var f float64 = t // compile error: cannot use t (variable of float64 type Celsius) as float64 value in variable declaration

Bu katılığın amacı şudur: bir UserID, OrderID beklenen bir yere yanlışlıkla verilemez. Bunu kastettiğinizde açıkça dönüştürün: float64(t). Kurallar için tip dönüşümü sayfasına, sayılar ile string'ler arasında geçiş için strconv fonksiyonlarına bakın.

Sıfır Değerler

Her tipin bir sıfır değeri vardır; bu, bir şey atamadan önce değişkenin tuttuğu değerdir: sayılar için 0, bool için false, string'ler için "" ve pointer'lar, slice'lar, map'ler, channel'lar, fonksiyonlar ve interface'ler için nil. Go'da ilk değeri verilmemiş değişken yoktur.

Sıkça Sorulan Sorular

Go'da int ne kadar büyüktür?

int ve uint, 64 bit platformlarda (amd64, arm64) 64 bit, 32 bit platformlarda 32 bittir. Bir dosya formatı ya da ağ protokolü için sabit bir boyuta ihtiyacınız varsa int32, int64, uint8 gibi tipleri kullanın. Sıradan sayaçlar, indeksler ve uzunluklar için int kullanın.

Go'da bir değişkenin tipi nasıl yazdırılır?

%T verb'ünü kullanın: fmt.Printf("%T\n", x); int, float64, []string, main.User gibi değerler yazdırır. Kod içinde reflect.TypeOf(x) aynı bilgiyi inceleyebileceğiniz bir değer olarak döndürür.

Go'da byte ile rune arasındaki fark nedir?

byte, uint8 için bir takma addır ve bir baytlık ham veri tutar. rune, int32 için bir takma addır ve bir Unicode kod noktası tutar. Bir string bayt dizisidir; üzerinde for range ile dolaşmak onu rune'lara çözer.

Go'da float32 mi yoksa float64 mü kullanmalıyım?

Bir nedeniniz yoksa float64 kullanın. Ondalıklı literal'lerin varsayılan tipidir, math paketinin çalıştığı tiptir ve float32'nin yaklaşık 6 ila 9 anlamlı basamağına karşılık yaklaşık 15 ila 17 anlamlı ondalık basamak hassasiyeti vardır. float32'yi yalnızca büyük dizilerde belleği yarıya indirmek ya da harici bir formata uymak için seçin.

Go'da int'in maksimum değeri nedir?

math paketindeki sabitleri kullanın: math.MaxInt (64 bit platformlarda 9223372036854775807), math.MinInt, math.MaxInt64, math.MaxUint32 ve diğerleri. Sınırı aşan aritmetik çalışma zamanında sessizce başa sarar; panic oluşmaz.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA