yoklateknik mülakat

Backend Go Errors Mülakat Soruları

75 doğrulanmış Backend Go Errors mülakat sorusu — cevaplarıyla çöz, açıklamalarıyla öğren, gerçek simülasyonda kendini test et.

Gerçek simülasyonu dene →

Örnek sorular

Go ErrorsZorluk 1
Go'da error tipi nedir?
  • aRuntime tarafından otomatik fırlatılan yerleşik bir exception sınıfı
  • bTek metodu Error() string olan bir interface
  • cerrors paketinde tanımlı Code ve Message alanlarına sahip bir struct
  • dYalnızca panic ifadeleri içinde kullanılan ayrılmış bir anahtar kelime
Açıklama:error, type error interface { Error() string } şeklinde tanımlıdır. Bu metodu uygulayan her tip interface'i sağlar. Go'da olağan hata yönetimi için yerleşik bir exception mekanizması yoktur; hatalar sıradan değerlerdir.
Go ErrorsZorluk 1
n, err := strconv.Atoi("abc")
fmt.Println(n * 2)
if err != nil {
    fmt.Println("error:", err)
}

Bu program ne yazdırır?
  • a"0", ardından bir hata mesajı
  • bProgram herhangi bir şey yazdırmadan çöker
  • cDerlenmez
  • dHiçbir şey yazdırılmaz
Açıklama:strconv.Atoi başarısız olduğunda (0, err) döner, yani n değeri 0'dır. n*2 panic etmeden 0 yazdırır, ardından err kontrolü hatayı da yazdırır. n'yi err kontrolünden önce kullanmak burada derleme hatası ya da çökme sebebi değildir — err != nil olduğunda n'nin anlamsız olması bir mantık hatasıdır.
Go ErrorsZorluk 1
errors.New("msg") ile fmt.Errorf("msg") arasındaki temel pratik fark nedir?
  • aerrors.New artık kullanımdan kaldırılmıştır, kullanılmamalı
  • bfmt.Errorf yalnızca fmt paketinin içinden çağrılabilir
  • cerrors.New heap'te ayrılır, fmt.Errorf hiçbir zaman ayrılmaz
  • dfmt.Errorf, %w ile sarmalamayı destekler; errors.New desteklemez
Açıklama:fmt.Errorf, Printf gibi formatlar; %w verb'üyle bir error argümanı verilirse o hata sarmalanan hedef olarak ayarlanır, böylece errors.Is/errors.As sonradan onu bulabilir. errors.New ise formatlama veya sarmalama yeteneği olmayan sabit bir metin üretir.
Go ErrorsZorluk 2
var ErrNotFound = errors.New("not found")

func find() error {
    return fmt.Errorf("lookup failed: %v", ErrNotFound)
}

func main() {
    fmt.Println(errors.Is(find(), ErrNotFound))
}

Bu ne yazdırır?
  • atrue
  • bfalse
  • cDerlenmez
  • d"not found"
Açıklama:%v, ErrNotFound'un metnini yeni hatanın mesajına yalnızca biçimlendirerek gömer; bir Unwrap zinciri kurmaz — bunu yalnızca %w yapar. Dönen hatanın sarmalanmış bir hedefi olmadığından errors.Is, ErrNotFound'u zincirde bulamaz ve false döner.
Go ErrorsZorluk 2
var ErrClosed = errors.New("connection closed")

func send() error {
    return fmt.Errorf("send failed: %w", ErrClosed)
}

func main() {
    fmt.Println(errors.Is(send(), ErrClosed))
}

Bu ne yazdırır?
  • atrue
  • bfalse
  • cDerlenmez
  • d"connection closed"
Açıklama:%w, send()'in döndürdüğü hatanın ErrClosed'ı sarmasını sağlar; böylece errors.Is zinciri gezerek ErrClosed'ı bulur ve true döner.
Go ErrorsZorluk 2
type ValidationError struct {
    Field string
}

func (e *ValidationError) Error() string {
    return "invalid field: " + e.Field
}

func validate() error {
    return fmt.Errorf("request rejected: %w", &ValidationError{Field: "email"})
}

func main() {
    var ve *ValidationError
    if errors.As(validate(), &ve) {
        fmt.Println(ve.Field)
    }
}

Bu ne yazdırır?
  • aDerlenmez
  • bHiçbir şey yazdırılmaz
  • c"email"
  • d"invalid field: email"
Açıklama:errors.As zinciri gezer, *ValidationError'ı bulur ve ve'ye atar. ve.Field ise yalnızca struct alanı olan "email"dir, Error() string'inin tamamı değildir.

3300 soruluk Backend bankasında kendini sına.

Mülakata başla