diff options
| author | Shulhan <m.shulhan@gmail.com> | 2019-09-16 22:25:28 +0700 |
|---|---|---|
| committer | Shulhan <m.shulhan@gmail.com> | 2019-09-16 22:25:28 +0700 |
| commit | 55a41b4893b2637c50ca2f0915edbf97bda04c5f (patch) | |
| tree | 1b80c7c4ad9a4f77a511c1d6bdb546d01a5a20f8 | |
| parent | 66434b2bb22ba14f645ef2f18886ee5c36403a33 (diff) | |
| download | golang-id-web-55a41b4893b2637c50ca2f0915edbf97bda04c5f.tar.xz | |
blog: tambah terjemahan "Mengorganisasi kode Go"
Terjemahan diambil dari artikel bahasa Inggris:
https://blog.golang.org/organizing-go-code
| -rw-r--r-- | CHANGELOG.adoc | 7 | ||||
| -rw-r--r-- | content/blog/index.adoc | 2 | ||||
| -rw-r--r-- | content/blog/organizing-go-code/index.adoc | 138 |
3 files changed, 147 insertions, 0 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 9940d94..89d59b4 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -2,6 +2,13 @@ Dokumen ini mencatat perubahan dari hasil pengembangan situs golang-id.org. +== 2019.09 + +Daftar terjemahan yang telah dilakukan, + +* https://golang-id.org/blog/organizing-go-code[Mengorganisasi kode Go] + + == 2019.08 Daftar terjemahan yang telah dilakukan, diff --git a/content/blog/index.adoc b/content/blog/index.adoc index b4fb5f9..906787d 100644 --- a/content/blog/index.adoc +++ b/content/blog/index.adoc @@ -13,6 +13,8 @@ * link:/blog/gif-decoder-exercise-in-go-interfaces[Dekoder GIF: latihan interface pada Go] * link:/blog/error-handling-and-go/[Penanganan error dan Go] +* link:/blog/organizing-go-code/[Mengorganisasi kode Go] + == Paket diff --git a/content/blog/organizing-go-code/index.adoc b/content/blog/organizing-go-code/index.adoc new file mode 100644 index 0000000..f419302 --- /dev/null +++ b/content/blog/organizing-go-code/index.adoc @@ -0,0 +1,138 @@ += Mengorganisasi Kode Go +:author: Andrew Gerrand +:date: 16 Agustus 2012 +:stylesheet: /assets/style.css + +==== Pendahuluan + +Kode Go diorganisasi secara berbeda dengan bahasa pemrograman lainnya. +Artikel ini mendiskusikan bagaimana cara menamakan dan membuat paket dari +elemen-elemen program Go untuk melayani pengguna. + + +==== Pilih nama yang bagus + +Nama yang kita pilih memengaruhi bagaimana cara kita berpikir tentang kode +kita, jadi perhatikanlah penamaan paket dan pengidentifikasi yang diekspor. + +Nama dari paket menyediakan konteks bagi isinya. +Misalnya, +https://golang.org/pkg/bytes/[paket bytes] +pada pustaka standar mengekspor tipe `Buffer`. +Tanpa ada nama paket, nama `Buffer` itu sendiri tidak begitu deskriptif, namun +saat digabungkan dengan nama paket maknanya menjadi jelas: `bytes.Buffer`. +Jika sebuah paket memiliki nama yang kurang deskriptif, seperti `util`, maka +_buffer_ akan memperoleh nama yang lebih panjang dan canggung +`util.BytesBuffer`. + +Jangan segan untuk mengganti nama saat bekerja. +Saat kita menghabiskan waktu dengan membuat program, kita akan memahami +bagaimana bagian-bagian tersebut saling terhubung dan, oleh karena itu, +bagaimana nama mereka seharusnya. +Tidak perlu membatasi diri kita sendiri pada saat awal-awal. +(https://golang.org/cmd/gofmt/[Perintah `gofmt`] memiliki opsi `-r` yang +menyediakan pencarian dan penggantian secara sintaksis, membuat perubahan +dalam skala besar menjadi mudah.) + +Nama yang bagus adalah bagian paling penting dari sebuah antarmuka perangkat +lunak: nama adalah hal pertama yang dilihat oleh setiap klien dari kode kita. +Nama yang dipilih dengan bagus merupakan titik awal untuk dokumentasi yang +bagus. +Banyak praktis berikut dihasilkan secara alami dari penamaan yang bagus. + + +==== Pilih path impor yang bagus (buat paket supaya bisa di "go get") + +Sebuah path impor yaitu string untuk user mengimpor sebuah paket. +Ia menentukan direktori (relatif terhadap `$GOROOT/src/pkg` atau +`$GOPATH/src`) tempat sumber kode paket disimpan. + +Path dari impor secara global harus unik, jadi gunakan path dari sumber +repositori sebagai dasarnya. +Misalnya, paket `websocket` dari sub-repositori `go.net` memiliki path impor +"golang.org/x/net/websocket". +Proyek Go menguasai path "github.com/golang", sehingga path tersebut tidak +bisa digunakan oleh pengembang lain untuk paket yang berbeda. +Secara URL repositori dan path impor adalah satu dan sama, maka perintah +`go get` dapat mengambil dan memasang paket secara otomatis. + +Jika kita tidak menggunakan repositori sumber yang disimpan diinternet, +pilihlah prefiks yang unik seperti nama domain, perusahaan, atau proyek. +Sebagai contohnya, path impor dari semua kode Go internal di Google dimulai +dengan string "google". + +Elemen terakhir dari path impor biasanya sama dengan nama paket. +Misalnya, path impor "net/http" berisi paket `http`. +Hal ini bukanlah keharusan - kita bisa membuatnya berbeda jika ingin - +namun sebaiknya kita harus mengikuti konvensi demi kemudahan diprediksi: +pengguna akan terkejut bila impor "foo/bar" ternyata memiliki nama paket +`quux`. + +Terkadang orang menset `GOPATH` ke akar dari repositori sumber dan menaruh +paket-paket mereka dalam direktori relatif terhadap repositori akar, seperti +"src/my/package". +Di satu sisi, hal ini membuat path impor singkat ("my/package" bukan +"github.com/me/project/my/package"), namun bagi orang lain hal ini akan +merusak `go get` dan memaksa pengguna untuk menset ulang `GOPATH` mereka +supaya dapat menggunakan paket tersebut. +Jangan lakukan hal seperti ini. + + +==== Kurangi mengekspor interface + +Kode kita kemungkinan terdiri dari bagian-bagian kecil kode yang berguna, dan +sangat menggoda untuk mengekspos hampir semua fungsionalitas dalam interface +paket yang diekspor. +Tahan godaan tersebut! + +Semakin besar interface yang kita sediakan, semakin banyak yang harus kita +dukung. +Pengguna akan semakin bergantung pada setiap tipe, fungsi, variabel, dan +konstanta yang kita ekspor, membuat kontrak implisit yang harus dipatuhi demi +keberlangsungan atau risiko mengganggu pengguna program kita. +Dalam menyiapkan Go 1 kami secara berhati-hati mengkaji interface yang +diekspor pada pustaka standar dan menghapus bagian yang kita tidak siap untuk +didukung. +Kita juga harus memperhatikan hal yang sama saat mendistribusikan +pustaka-pustaka kita sendiri. + +Jika ragu, tinggalkan seperti sedianya! + + +==== Apa yang ditaruh dalam sebuah paket + +Sangat mudah menaruh semua hal dalam paket "util", namun hal ini mengaburkan +makna dari nama paket (karena ia harus menampung banyak fungsionalitas) dan +memaksa pengguna yang memakai sebagian kecil dari paket untuk mengompilasi +dan _link_ banyak kode yang tidak berhubungan. + +Di sisi lain, juga sangat mudah memecah kode menjadi paket-paket kecil, +sehingga kita menghabiskan waktu dalam merancang interface, bukannya +menyelesaikan pekerjaan dengan cepat. + +Lihatlah pustaka standar Go sebagai panduan. +Beberapa dari paketnya sangat besar dan beberapa sangat kecil. +Misalnya, +https://golang.org/pkg/net/http/[paket http] +terdiri dari 17 berkas Go (tidak termasuk tes) dan mengekspor 109 +pengidentifikasi, dan +https://golang.org/pkg/hash/[paket hash] +terdiri dari satu berkas yang mengekspor hanya tiga deklarasi. +Tidak ada aturan yang cepat dan baku, kedua pendekatan tersebut sesuai dengan +konteksnya. + +Maka dari itu, paket `main` terkadang lebih besar dari paket-paket lainnya. +Perintah-perintah yang kompleks mengandung banyak kode yang sedikit gunanya +di luar konteks dari _executable_, dan terkadang lebih simpel menyimpan +semuanya di satu tempat. +Misalnya, perkakas go lebih dari 12000 baris yang tersebar dalam +https://golang.org/src/cmd/go/[34 berkas]. + + +==== Dokumentasikan kode kita + +Dokumentasi yang bagus adalah kualitas yang penting untuk kode yang berguna +dan mudah dipelihara. +Bacalah artikel +link:/blog/godoc_documenting_go_code[Godoc: mendokumentasikan kode Go] +untuk belajar bagaimana menulis dokumentasi kode yang bagus. |
