ProgramlamaOrta/Lider Go Geliştiricisi

Go'da paketlerle (packages) ve görünürlük (visibility) ile çalışma özelliklerini anlatın. Ne zaman ve nasıl dışa aktarılmış ve dışa aktarılmamış nesneler kullanılmalıdır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Go'da değişkenlerin, fonksiyonların, yapıların ve metodların görünürlük alanı, ilk harfin büyük harf olma durumu ile yakından ilişkilidir:

  • Adı büyük harfle başlıyorsa — nesne paket dışına aktarılır.
  • Adı küçük harfle başlıyorsa — nesne yalnızca kendi paketinde erişilebilir.

Örnek dosya example.go:

package mypkg var ExportedVar int // diğer paketlerde erişilebilir var unexportedVar int // sadece mypkg içinde

Paket içe aktarılırken sadece dışa aktarılmış nesnelere erişilebilir.

En iyi uygulama:

  • Uygulama ayrıntılarını gizlemek, yalnızca gerekli tür ve fonksiyonları dışa aktarmak.
  • Özel sabitler/fonksiyonlar için küçük harfli adlar kullanmak.

Kandırmacalı Soru

Soru: "Dışa aktarılmamış alanlara sahip bir yapıyı dışa aktarabilir miyiz? Başka bir pakette bu alanları kullanmaya çalışırsak ne olur?"

Cevap: Sadece büyük harfle başlayan yapı dışa aktarılır. Küçük harfle başlayan tüm yapı alanları paket dışından erişilemez. Bu tür alanlara dışarıdan erişmeye çalışmak bir hata ile sonuçlanır.

Örnek:

// package user type User struct { Name string // Dışa aktarılmış alan age int // user paketi dışında erişilemez }

Başka bir pakette:

u := user.User{Name: "Ivan"} u.age = 42 // Derleme hatası: age erişilemez

Gerçek Hatalara Örnekler


Hikaye

JSON serileştirmede veri kaybı: REST API'de yapıyı dışa aktardılar ama alanlarını dışa aktarılmamış hale getirdiler (küçük harfle). Sonuç olarak, JSON'a serileştirme bu alanları dahil etmedi ve API kullanıcıları ihtiyaç duydukları bilgileri almadı.


Hikaye

Gerekli fonksiyonlara erişim çalışmıyor: Takım yararlı yardımcıları ayrı bir pakete çıkardı ama isimlerini büyük harfle yapmayı unuttular. Fonksiyonlar erişilemez kaldı, arayüzleri tekrar yapmak zorunda kaldılar.


Hikaye

Otomatik kod üretiminde ad çakışması: Bir pakette aynı isimlere sahip değişkenler kullanıldı, sadece harflerin büyük/küçük oluşlarıyla farklılık gösteriyordu. Scriptlerden biri dışa aktarılmış sabiti küçük harfli isme rastgele yeniden adlandırdı. Sonuç olarak uygulama bu sabite global erişimini kaybetti ve bazı fonksiyonlar erişilemez hale geldi.