CodeBlanks Logo Icon CodeBlanks

unsafe paketi

unsafe paketinin risklerini ve kullanımını öğrenirsin.

unsafe paketi

unsafe paketi Go'nun tür güvenliğini bilerek aşmanı sağlar: işaretçileri türler arasında dönüştürebilir, bir türün bellekteki boyutunu ve hizalamasını öğrenebilirsin.

var n int64
fmt.Println(unsafe.Sizeof(n))  // 8

Adı bir uyarıdır: bu paketi kullanan kod Go sürümleri ve mimariler arasında taşınabilir olmayabilir.

Ne zaman kullanılır?

Gerçek kullanım alanları dardır: sıfır kopyalı dönüşümler (ör. []byte ↔ string), sistem çağrıları, C ile veri paylaşımı ve çok sıcak kod yollarında optimizasyon. Standart kütüphanede runtime, reflect ve syscall paketleri unsafe kullanır; uygulama kodunda ise neredeyse hiç gerekmez.

Uygulama Boyutları yazdır

unsafe.Sizeof ile bir int8, bir int64 ve bir float32 değerinin boyutlarını tek fmt.Println ile yazdır.

Başlangıç kodu

main.go
package main

import (
    "fmt"
    "unsafe"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "fmt"
    "unsafe"
)

func main() {
    var a int8
    var b int64
    var c float32
    fmt.Println(unsafe.Sizeof(a), unsafe.Sizeof(b), unsafe.Sizeof(c))
}

Beklenen çıktı

1 8 4

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 unsafe kullanan kod için hangisi doğrudur?

  • Her zaman daha güvenlidir
  • Çöp toplayıcıyı kapatır
  • Yalnızca Windows'ta çalışır
  • Go uyumluluk sözünün dışında kalabilir Doğru cevap

Açıklama: Go 1 uyumluluk sözü unsafe kullanan programları kapsamaz; derleyici veya çalışma zamanı değişince bozulabilirler.

2 Boyutu öğren

Soru
var x int32
fmt.Println(unsafe.____(x))  // 4
Cevap
var x int32
fmt.Println(unsafe.Sizeof(x))  // 4

Açıklama: unsafe.Sizeof bir değerin bayt cinsinden boyutunu verir; int32 için 4.

3 unsafe araçları

Kavram Anlamı
unsafe.Pointer Her işaretçiye dönüşebilir
unsafe.Sizeof Bayt boyutu
unsafe.Alignof Hizalama
unsafe.Offsetof Alanın konumu

İleri seviye bölümündeki tüm dersler