07. Halo, Dunia
Program pertama yang biasa ditulis dalam bahasa apa pun adalah yang
mencetak Hello, world! lalu berhenti. Kecil, tapi
menulisnya membuktikan bahwa bahasa sudah terinstal, editor sudah siap,
dan terminal bisa menjalankan file. Bab ini menulis program itu, sengaja
membuatnya error, lalu memperbaikinya.
Program lengkapnya
Buka exercises/07/01-hello.go di VS Code. File tersebut
berisi ini:
// Chapter 07 example: the first program.
// Run with: go run exercises/07/01-hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}Di terminal VS Code, jalankan:
go run exercises/07/01-hello.go
Terminal mencetak:
Hello, world!
Itu saja programnya. Sisa bab ini menjelaskan setiap bagiannya.
Tiga bagian yang dibutuhkan setiap program
Dua baris pertama dimulai dengan //. Keduanya adalah
komentar, catatan untuk manusia yang diabaikan Go. Baris-baris
setelahnya adalah programnya, dan setiap program Go di bagian buku ini
punya tiga bagian yang sama:
package mainmenyatakan bahwa file ini adalah program yang bisa dijalankan, bukan pustaka untuk dipakai program lain.import "fmt"memasukkanfmt, bagian dari pustaka standar Go yang mencetak teks. Go hanya mengenal pustaka yang diminta oleh sebuah file.func main() { ... }adalah tempat program dimulai. Go menjalankan baris-baris di antara kurung kurawal{dan}, dari atas ke bawah, lalu program selesai.
Untuk sekarang, anggap ketiga bagian ini sebagai bingkai yang kamu
salin ke setiap file. Kode buatanmu sendiri ditulis di dalam
main. Bab 21 menjelaskan fungsi secara lengkap, dan Bab 25
menjelaskan package dan import.
Baris di dalam main dimulai dengan satu tab. Go tidak
membutuhkannya, tapi semua kode Go ditulis seperti itu, dan VS Code
menambahkannya untukmu saat menyimpan.
Karena bagian-bagian ini tidak pernah berubah, buku ini sering hanya
menampilkan baris yang masuk ke dalam
main, seperti ini:
fmt.Println("Hello, world!")Untuk mencoba baris seperti itu, taruh di dalam main
pada file yang punya bagian-bagian lainnya.
Apa yang dilakukan
go run
Go adalah bahasa yang dikompilasi. Komputer tidak
bisa langsung menjalankan teks di dalam file .go, jadi
sebuah program bernama compiler lebih dulu
menerjemahkan seluruh file ke bentuk yang bisa dijalankan komputer.
go run melakukan kedua langkah dengan satu perintah:
- Mengompilasi file. Kalau compiler menemukan kesalahan di mana pun dalam file, compiler mencetak error dan berhenti. Tidak ada yang dijalankan, bahkan baris di atas kesalahan itu.
- Menjalankan program hasil kompilasi, lalu membuang salinan hasil kompilasi itu.
Itulah sebabnya tidak ada file .exe yang muncul di
foldermu. Itu juga sebabnya go run bisa butuh waktu
sebentar saat pertama kali dipakai.
Apa yang dilakukan
fmt.Println
fmt.Println adalah sebuah fungsi —
sepotong kode yang punya nama dan melakukan pekerjaan tertentu saat
dipanggil. Namanya punya dua bagian: fmt adalah pustaka
tempatnya berada, dan Println (singkatan dari "print line")
adalah fungsinya. Pekerjaannya adalah menulis apa pun yang kamu berikan
ke terminal, diikuti dengan baris baru.
Tanda kurung ( dan ) setelah nama adalah
cara kamu meminta fungsi untuk berjalan. Apa pun di antara keduanya
adalah yang kamu berikan.
fmt.Println("Hello, world!")
// ^^^^^^^^^^^^^^^
// inilah yang kita berikan ke fmt.PrintlnDalam Go, hal-hal yang kamu berikan ke sebuah fungsi disebut
argument. Program di atas memberikan satu argument ke
fmt.Println: string "Hello, world!".
Ganti teks di dalam tanda kutip dengan namamu sendiri. Simpan dan jalankan lagi. Terminal sekarang harusnya mencetak namamu.
String
Teks "Hello, world!" adalah sebuah
string — urutan karakter. Dalam Go, string ditulis di
antara tanda kutip ganda ". Tanda kutip
tunggal tidak menghasilkan string.
fmt.Println('Hello, world!') berhenti dengan error
more than one character in rune literal.
Ada cara kedua untuk menulis string, yaitu di antara
backtick `. Cara ini berguna kalau teksnya
sendiri mengandung tanda kutip ganda:
fmt.Println("Hello, world!")
fmt.Println(`Hello, "world"!`)Tanda kutip bukan bagian dari string. Tanda kutip menandai di mana string dimulai dan di mana string berakhir. Saat string dicetak, hanya yang ada di antara tanda kutip yang muncul. Pada baris kedua di atas, tanda kutip ganda ada di antara backtick, jadi tanda kutip itu ikut dicetak.
Mencetak lebih dari satu hal
fmt.Println bisa menerima lebih dari satu argument.
Pisahkan dengan koma. File
exercises/07/02-multiple-arguments.go dimulai dengan baris
ini di dalam main:
fmt.Println("Hello,", "world!")Terminal mencetak Hello,, spasi, lalu
world!, semua dalam satu baris. fmt.Println
meletakkan spasi di antara setiap argument dan baris baru di akhir.
Untuk mengatur spasi sendiri, buat satu string dengan +,
yang menyambungkan string:
fmt.Println("Hello, " + "world!")Sekarang outputnya adalah Hello, world! dengan satu
spasi di antara kata, karena spasi ada di dalam string pertama.
Bab 09 menampilkan fmt.Printf, cara yang lebih rapi
untuk menggabungkan teks dan nilai.
Buat fmt.Println menampilkan tiga hal
dalam satu baris: kata go, angka 1, dan kata
is_fast. Jalankan. Perhatikan bahwa angka muncul meskipun
tidak ada tanda kutip di sekitarnya.
Komentar
Sebuah komentar adalah teks yang diabaikan Go saat
mengompilasi program. Komentar dibuat untuk manusia yang membaca kode.
Komentar satu baris dimulai dengan //:
// Baris ini adalah komentar. Go tidak menjalankannya.
fmt.Println("Hello, world!") // Komentar juga bisa berada di akhir baris.Untuk menulis blok catatan yang lebih panjang, gunakan beberapa baris
// berturut-turut:
// Apa pun di sini diabaikan.
// Berguna untuk penjelasan panjang
// atau untuk mematikan sementara
// satu blok kode.
fmt.Println("Still runs.")Gunakan komentar untuk menjelaskan mengapa kode melakukan
sesuatu, bukan apa yang dilakukan setiap baris. Kode yang baik sudah
mengatakan apa. File exercises/07/03-comments.go
berisi contoh lainnya, dan Bab 08 membahas komentar secara rinci.
Membuat dan membaca error
Sekarang sengaja rusak programnya. Di 01-hello.go, hapus
tanda kutip terakhir sehingga barisnya menjadi:
fmt.Println("Hello, world!)Simpan dan jalankan. Go menolak menjalankan file dan mencetak error seperti ini:
# command-line-arguments
exercises\07\01-hello.go:9:29: newline in string
exercises\07\01-hello.go:9:29: syntax error: unexpected newline in argument list; possibly missing comma or )
Baris pertama, # command-line-arguments, hanya
menyatakan bahwa Go sedang mengompilasi file yang kamu sebutkan. Kamu
mengetik path dengan garis miring biasa, dan Go mencetaknya dengan
backslash karena begitulah cara Windows menulis path. File-nya tetap
sama.
Baca setiap baris error dalam urutan ini:
- Nama file dan nomor baris
(
01-hello.go:9). Di sinilah masalahnya. Lihat sini dulu. - Kolom (
29). Ini menunjukkan seberapa jauh di baris itu Go menyadari masalahnya, dihitung per karakter dari kiri. Tab dihitung satu. - Pesan (
newline in string). Ini adalah apa yang salah. Artinya Go melihat tanda kutip pembuka dan memulai sebuah string, tapi baris sudah berakhir sebelum penutupnya ditemukan.
Satu kesalahan bisa menghasilkan lebih dari satu baris. Di sini baris kedua adalah akibat dari baris pertama, jadi hanya ada satu hal yang perlu diperbaiki.
Error bukan hukuman. Error memberitahu kamu tepat di baris mana yang harus dilihat dan memberikan petunjuk apa yang salah.
Perbaiki tanda kutip yang hilang supaya program berjalan lagi.
Kemudian coba kesalahan lain: ganti Println menjadi
Prinln dan jalankan. Baca error baru yang muncul. Apa yang
disampaikan oleh pesannya? (Tidak perlu menulis jawabannya.
Perhatikan saja.)
Catatan tentang spasi dan huruf besar-kecil
Go tidak memakai indentasi (spasi dan tab di awal baris) untuk memahami kodemu. Tab tambahan tidak menyebabkan error. Programmer Go tetap memberi indentasi dengan satu cara standar, dan VS Code melakukannya untukmu saat menyimpan.
Go memperhatikan letak pemenggalan beberapa baris.
Tanda { setelah func main() harus tetap di
baris yang sama dengan func main(). Bab 10 menampilkan
error yang muncul kalau tidak.
Go memperhatikan huruf besar dan kecil.
Println adalah kata yang berbeda dari println
dan PRINTLN. Nama di dalam fmt dimulai dengan
huruf besar, dan fmt.println berhenti dengan error
undefined: fmt.println.
PR
File PR ada di exercises/07/homework/. Buka setiap
starter di VS Code, baca komentar di bagian atas, dan selesaikan file
tersebut agar bisa dijalankan dan menghasilkan output yang
diharapkan.
Sebagian besar starter sudah punya ketiga bagian tadi dan satu baris
pengganti, fmt.Println("TODO: replace this line"). File
seperti itu bisa langsung dijalankan dan mencetak baris tersebut. Ganti
baris itu dengan kodemu sendiri. Baris pengganti itu ada karena Go
menolak mengompilasi file yang meng-import fmt tanpa
memakainya. Bab 08 menjelaskan hal ini.
Soal 1 — Sapa dirimu sendiri
Buka exercises/07/homework/01-greet-yourself.go. File
ini berisi sebuah komentar dan baris pengganti. Tulis tiga panggilan
fmt.Println agar saat dijalankan menampilkan, dalam tiga
baris terpisah:
- sapaan (pilih kata-katamu sendiri),
- nama depanmu,
- nama game favoritmu.
Soal 2 — Cetak sebuah kutipan
Buka exercises/07/homework/02-print-quote.go. Cetak
sebuah kutipan terkenal di baris pertama dan nama pengarangnya di baris
kedua dalam format ini:
"The best way to predict the future is to invent it."
— Alan Kay
(Tanda strip sebelum nama pengarang bisa berupa tanda hubung biasa
-. Spasi yang tepat tidak harus persis, asalkan kutipan ada
di satu baris dan pengarang ada di baris berikutnya.)
Soal 3 — Perbaiki error-nya
Buka exercises/07/homework/03-fix-the-error.go. File ini
tidak bisa dijalankan. Baca error yang dicetak Go, perbaiki file-nya,
dan jalankan sampai kamu melihat:
All good now.
Ada lebih dari satu kesalahan dalam file tersebut. Temukan semuanya.
Tantangan — Cerita tiga baris
Buka exercises/07/homework/04-three-line-story.go. Tulis
sebuah cerita mikro tiga baris di mana:
- baris pertama menetapkan latar,
- baris kedua memperkenalkan masalah,
- baris ketiga menyelesaikan masalah.
Setiap baris harus dicetak oleh panggilan
fmt.Println-nya sendiri. Tambahkan blok baris komentar
// di bagian atas yang menjelaskan, dalam bahasa biasa,
tentang apa ceritamu.
Stuck atau sudah selesai? Buka halaman solusi PR untuk penjelasan lengkap.