Ringkasan, Model REST API
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 78 dari 107.
Tantangan
MudahMari kita bangun sistem model REST API untuk platform blog! Kamu akan membuat tipe yang terstruktur dengan baik, yang diserialisasi menjadi JSON dan menyediakan representasi string yang mudah dibaca, persis seperti yang kamu perlukan saat membuat respons API sungguhan.
Kamu akan mengatur kodemu dalam dua file:
models.go: Definisikan model data API-mu dengan tag JSON dan representasi string yang sesuai.Buat struct
Authordengan fieldID(int),Name(string), danEmail(string). Petakan field-field ini ke kunci JSON"id","name", dan"email". ImplementasikanString()agar mengembalikan format[Name] <[Email]>.Buat struct
Postdengan fieldID(int),Title(string),Content(string),Author(struct Author bersarang), danPublished(bool). Petakan field-field ini ke"id","title","content","author", dan"published". FieldContentharus menggunakanomitemptyagar konten kosong tidak muncul di JSON. ImplementasikanString()agar mengembalikan"[Title]" by [Author's String representation].Buat struct
APIResponsedengan fieldSuccess(bool),Message(string), danData(Post). Petakan field-field ini ke"success","message", dan"data". FieldMessageharus menggunakanomitempty.main.go: Buat respons API dan tunjukkan output JSON serta representasi string.Baca tipe operasi (
jsonataudisplay), lalu baca detail post: ID post, judul, konten, ID penulis, nama penulis, email penulis, dan status publikasi (trueataufalse).Untuk
json: Buat APIResponse denganSuccess: truedan Post sebagai data (biarkan Message kosong). Ubah menjadi JSON dan cetak.Untuk
display: Buat Post dan cetak menggunakan method String-nya, lalu cetak Author secara terpisah pada baris baru.
Input berikut akan diberikan:
- Baris 1: Tipe operasi (
jsonataudisplay) - Baris 2: ID Post
- Baris 3: Judul
- Baris 4: Konten (boleh kosong)
- Baris 5: ID Author
- Baris 6: Nama Author
- Baris 7: Email Author
- Baris 8: Status publikasi (
trueataufalse)
Contohnya, jika diberikan:
json
1
Getting Started with Go
Learn the basics of Go programming
101
Jane Smith
jane@example.com
trueOutput-mu seharusnya:
{"success":true,"data":{"id":1,"title":"Getting Started with Go","content":"Learn the basics of Go programming","author":{"id":101,"name":"Jane Smith","email":"jane@example.com"},"published":true}}Dan jika diberikan:
json
2
Draft Post
102
John Doe
john@example.com
falseOutput-mu seharusnya:
{"success":true,"data":{"id":2,"title":"Draft Post","author":{"id":102,"name":"John Doe","email":"john@example.com"},"published":false}}Perhatikan bahwa field konten yang kosong dihilangkan dari output JSON.
Dan jika diberikan:
display
3
Advanced Interfaces
Deep dive into Go interfaces
103
Alice Chen
alice@example.com
trueOutput-mu seharusnya:
"Advanced Interfaces" by Alice Chen <alice@example.com>
Alice Chen <alice@example.com>Coba sendiri
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
// Baca jenis operasi
operation, _ := reader.ReadString('\n')
operation = strings.TrimSpace(operation)
// Baca ID postingan
postIDStr, _ := reader.ReadString('\n')
postID, _ := strconv.Atoi(strings.TrimSpace(postIDStr))
// Baca judul
title, _ := reader.ReadString('\n')
title = strings.TrimSpace(title)
// Baca konten
content, _ := reader.ReadString('\n')
content = strings.TrimSpace(content)
// Baca ID penulis
authorIDStr, _ := reader.ReadString('\n')
authorID, _ := strconv.Atoi(strings.TrimSpace(authorIDStr))
// Baca nama penulis
authorName, _ := reader.ReadString('\n')
authorName = strings.TrimSpace(authorName)
// Baca email penulis
authorEmail, _ := reader.ReadString('\n')
authorEmail = strings.TrimSpace(authorEmail)
// Baca status publikasi
publishedStr, _ := reader.ReadString('\n')
published := strings.TrimSpace(publishedStr) == "true"
// TODO: Buat struct Author dengan nilai yang telah dibaca
// TODO: Buat struct Post dengan nilai yang telah dibaca dan Author
// TODO: Tangani jenis operasi
// Jika operation bernilai "json":
// - Buat APIResponse dengan Success: true dan Post sebagai Data
// - Ubah ke JSON menggunakan json.Marshal
// - Tampilkan string JSON
// Jika operation bernilai "display":
// - Tampilkan Post menggunakan method String miliknya
// - Tampilkan Author pada baris baru
// Penampung sementara untuk menggunakan variabel (hapus saat kamu mengimplementasikannya)
_ = postID
_ = title
_ = content
_ = authorID
_ = authorName
_ = authorEmail
_ = published
_ = operation
_ = json.Marshal
fmt.Println("TODO: Implement the solution")
}
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 File11Pustaka Standar & OOP
io.Reader & io.Writersort.InterfaceAntarmuka fmt.Stringerencoding/json dengan StructAntarmuka http.HandlerRingkasan, Model REST API3Pointer 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