Nama yang Diekspor dan Tidak Diekspor
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 4 dari 107.
Di Go, huruf pertama sebuah nama menentukan visibilitasnya. Nama yang diawali dengan huruf kapital bersifat exported (dapat diakses dari package lain). Nama yang diawali dengan huruf kecil bersifat unexported (hanya dapat diakses dalam package tersebut).
Nama yang diekspor: terlihat di luar package
type User struct {
Name string // Field yang diekspor
Email string // Field yang diekspor
}
func CreateUser(name string) User { // Fungsi yang diekspor
return User{Name: name}
}Nama yang tidak diekspor: hanya terlihat di dalam paket
type secret struct { // struct yang tidak diekspor
password string // field yang tidak diekspor
}
func validate() bool { // fungsi yang tidak diekspor
return true
}Campuran: struct yang diekspor dengan beberapa field yang tidak diekspor
type Account struct {
Username string // Diekspor, bisa diakses dari mana saja
Email string // Diekspor, bisa diakses dari mana saja
password string // Tidak diekspor, hanya bisa diakses di dalam package
}Konvensi penamaan ini menggantikan modifier akses seperti public dan private yang ditemukan dalam bahasa lain.
// Huruf kapital = Diekspor (publik)
// Huruf kecil = Tidak diekspor (privat)
func SaveData() {} // Diekspor
func loadData() {} // Tidak dieksporMengikuti konvensi ini sangat penting di Go. Saat package lain mengimpor kodemu, package tersebut hanya dapat mengakses nama yang diawali dengan huruf kapital.
Tantangan
SedangPerbaiki semua nama di product.go agar mengikuti konvensi penamaan exported Go. Gunakan huruf kapital pada huruf pertama dari:
- Nama struct:
product→Product - Semua nama field:
name,price,stock - Semua nama fungsi:
totalValue,displayInfo - Semua referensi field di dalam fungsi
Coba sendiri
package main
import "fmt"
func main() {
var name string
var price float64
var stock int
fmt.Scan(&name, &price, &stock)
p := Product{
Name: name,
Price: price,
Stock: stock,
}
fmt.Println(DisplayInfo(p))
fmt.Printf("Total Value: %.2f\n", TotalValue(p))
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP di Go
File EksternalWorkspace Go dan modulePaket dan ImporNama yang Diekspor dan Tidak DieksporPengantar OOP di Gostruct sebagai classMendefinisikan method pada structPointer receiver vs value receiverInisialisasi structFungsi KonstruktorUlasan: Kalkulator Sederhana4Interface
Pengenalan InterfaceImplementasi ImplisitInterface sebagai KontrakInterface Kosong (any)Type AssertionType SwitchKomposisi InterfaceInterface Stringer & ErrorUlasan: Kalkulator Bentuk7Enkapsulasi
Field yang Diekspor vs Tidak DieksporEnkapsulasi Tingkat PackageMethod Getter dan SetterPenyembunyian Informasi di GoRingkasan: Data Siswa10Generics (Go 1.18+)
Pengantar GenericsParameter TipeBatasan TipeStruct GenerikCara Alternatif untuk Method GenerikRingkasan Koleksi Generik2Mendalami Tipe dan Struct
Tipe Dasar dan KompositDefinisi Tipe KustomTag StructStruct AnonimStruct BersarangNilai Nol dan Nilai BawaanRangkuman: Buku Kontak5Komposisi daripada Pewarisan
Mengapa Go Tidak Memiliki PewarisanDasar Penyematan StructPromosi methodMenyematkan Beberapa StructPenyematan vs AgregasiMembayangi method yang DisematkanRangkuman: Hierarki Karyawan8Penanganan Error & OOP
Interface errorTipe Error KustomPembungkusan Error (fmt.Errorf)Error Sentinelerrors.Is() dan errors.As()Panic, Defer, dan RecoverRangkuman: Parser File3Pointer dan Memori
Dasar-Dasar Pointer di GoPointer ke StructPass by Value vs ReferenceFungsi new()Garbage Collection di GoRekap: Pembuat Linked List6Polimorfisme di Go
Polimorfisme melalui InterfaceDuck Typing di GoAturan Pemenuhan InterfaceKoleksi PolimorfikInjeksi DependensiRangkuman: Pemroses Pembayaran9Konkruensi & OOP
Dasar-dasar GoroutineChannel & KomunikasiChannel Ber-buffer vs Tanpa BufferPernyataan selectsync.Mutex & sync.RWMutexsync.WaitGroupDesain Struct yang Aman untuk ThreadRingkasan: Worker PoolLatihan sendiri: Compiler Go online