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:
Ö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:
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
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.