Rangkuman: Buku Kontak
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 18 dari 107.
Tantangan
MudahMari kita bangun sistem buku kontak yang menggabungkan tipe khusus, struct bersarang, tag struct, dan nilai nol: semua konsep yang sudah kamu kuasai dalam bab ini.
Kamu akan mengatur kodemu dalam dua file:
contact.go: Definisikan model data buku kontakmu dengan tipe khusus yang bermakna dan pemformatan JSON yang tepat:- Buat tipe khusus
PhonedanEmailberdasarkanstringagar kodemu dapat menjelaskan dirinya sendiri - Definisikan struct
Addressdengan fieldStreet,City, danCountry, masing-masing dengan tag JSON yang sesuai - Definisikan struct
Contactyang berisiName(string),Phone(tipe Phone-mu),Email(tipe Email-mu), danAddress(struct bersarang). Gunakan tag JSON agarphonedanemaildihilangkan jika kosong
- Buat tipe khusus
main.go: Baca informasi kontak dari input, buat instance Contact, dan tampilkan sebagai JSON berformat. Sebagian kontak mungkin memiliki informasi yang tidak lengkap: biarkan nilai nol danomitemptymenanganinya dengan baik.
Input berikut akan diberikan:
- Baris 1: Nama kontak
- Baris 2: Nomor telepon (mungkin kosong)
- Baris 3: Alamat email (mungkin kosong)
- Baris 4: Alamat jalan
- Baris 5: Kota
- Baris 6: Negara
Gunakan json.MarshalIndent dengan dua spasi untuk indentasi. Cetak string JSON yang dihasilkan.
Contohnya, jika diberikan kontak dengan nama Alice Smith, tanpa nomor telepon, email alice@example.com, alamat jalan 123 Main St, kota Boston, dan negara USA, outputmu akan terlihat seperti:
{
"name": "Alice Smith",
"email": "alice@example.com",
"address": {
"street": "123 Main St",
"city": "Boston",
"country": "USA"
}
}Perhatikan bahwa field phone tidak muncul sama sekali karena kosong: itulah tag omitempty yang bekerja!
Coba sendiri
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// Baca name
scanner.Scan()
name := scanner.Text()
// Baca phone (boleh kosong)
scanner.Scan()
phone := scanner.Text()
// Baca email (boleh kosong)
scanner.Scan()
email := scanner.Text()
// Baca street
scanner.Scan()
street := scanner.Text()
// Baca city
scanner.Scan()
city := scanner.Text()
// Baca country
scanner.Scan()
country := scanner.Text()
// TODO: Buat instance Contact menggunakan nilai input
// Gunakan tipe khusus Phone dan Email milikmu untuk field masing-masing
// Buat struct Address bertingkat dengan street, city, dan country
// TODO: Gunakan json.MarshalIndent untuk mengubah contact menjadi JSON
// Gunakan "" sebagai prefiks dan " " (dua spasi) sebagai indentasi
// TODO: Cetak string JSON
_ = name
_ = phone
_ = email
_ = street
_ = city
_ = country
}
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