Menu
CoddyTech

Rangkuman: Buku Kontak

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 18 dari 107.

challenge icon

Tantangan

Mudah

Mari 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 Phone dan Email berdasarkan string agar kodemu dapat menjelaskan dirinya sendiri
    • Definisikan struct Address dengan field Street, City, dan Country, masing-masing dengan tag JSON yang sesuai
    • Definisikan struct Contact yang berisi Name (string), Phone (tipe Phone-mu), Email (tipe Email-mu), dan Address (struct bersarang). Gunakan tag JSON agar phone dan email dihilangkan jika kosong
  • 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 dan omitempty menanganinya 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

Latihan sendiri: Compiler Go online