10. Membaca pesan error — Solusi PR

File solusi .go ada di exercises/10/homework/solutions/. Soal-soal ini melatih loop: jalankan, baca error pertama, perbaiki satu hal, jalankan lagi.

Soal 1 — Namai error-nya

Soal. Identifikasi error-nya, lalu perbaiki.

Cara berpikir. Jalankan file, baca pesannya, dan cocokkan dengan salah satu dari empat error: newline in string, undefined, not used, atau error kurung kurawal.

Solusi yang dikerjakan. Starter-nya adalah:

package main

import "fmt"

func main() {
    fmt.Println("Hello,", Keiko)
}

Saat dijalankan, hasilnya:

# command-line-arguments
exercises\10\homework\01-name-the-error.go:10:24: undefined: Keiko

Tanpa tanda kutip, Keiko adalah sebuah nama, dan tidak ada yang bernama itu. Maksudnya adalah teks. Sebuah perbaikan:

package main

import "fmt"

func main() {
    fmt.Println("Hello,", "Keiko")
}

// error: undefined: Keiko

Soal 2 — Perbaiki tanda kutipnya

Soal. Perbaiki string yang tidak ditutup. Go melaporkan:

# command-line-arguments
exercises\10\homework\02-fix-the-quote.go:8:39: newline in string
exercises\10\homework\02-fix-the-quote.go:8:39: syntax error: unexpected newline in argument list; possibly missing comma or )

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    fmt.Println("A wizard is never late.")
}

Satu-satunya perubahan adalah penutup " yang hilang sebelum ).

Kesalahan umum.

  • Menambahkan tanda kutip setelah ). Tanda kutip penutup ada di akhir teks, sebelum tanda kurung penutup. Kalau tidak, ) menjadi bagian dari string, dan Go melaporkan syntax error: unexpected newline in argument list; possibly missing comma or ).

Soal 3 — Perbaiki typo-nya

Soal. Nama fungsi yang salah eja menyebabkan error undefined:.

Solusi yang dikerjakan. Starter-nya punya fmt.Prinln("Fixed!"). Pesannya menyebut pelakunya:

# command-line-arguments
exercises\10\homework\03-fix-the-typo.go:8:6: undefined: fmt.Prinln

Perbaiki ejaannya:

package main

import "fmt"

func main() {
    fmt.Println("Fixed!")
}

Kesalahan umum.

  • "Memperbaiki" dengan menciptakan nama lain. fmt hanya punya nama-nama yang dimilikinya. Ketika pesannya mengatakan fmt.Prinln, perbaikannya hampir selalu fungsi yang sebenarnya dieja dengan benar — fmt.Println.

Tantangan — Tiga sekaligus

Soal. Tiga kesalahan, masing-masing satu jenis, diperbaiki satu per satu.

Cara berpikir. Jalankan, perbaiki error pertama, dan jalankan lagi. Starter-nya adalah:

package main

import "fmt"

func main()
{
    fmt.Println("Starting up)
    fmt.Prinln("Working")
    fmt.Println("done")
}

Saat pertama dijalankan, dua dari tiga kesalahan terlihat:

# command-line-arguments
exercises\10\homework\04-three-in-a-row.go:10:1: syntax error: unexpected semicolon or newline before {
exercises\10\homework\04-three-in-a-row.go:11:27: newline in string

Pindahkan { ke atas dan jalankan lagi. File sekarang lebih pendek satu baris, jadi nomor barisnya berubah:

# command-line-arguments
exercises\10\homework\04-three-in-a-row.go:10:27: newline in string
exercises\10\homework\04-three-in-a-row.go:10:27: syntax error: unexpected newline in argument list; possibly missing comma or )

Tambahkan penutup " dan jalankan lagi. Baru sekarang Go bisa memeriksa nama:

# command-line-arguments
exercises\10\homework\04-three-in-a-row.go:11:6: undefined: fmt.Prinln

Perbaiki ejaannya untuk langkah terakhir. Siklusnya bekerja sebagaimana mestinya.

Solusi yang dikerjakan.

package main

import "fmt"

func main() {
    fmt.Println("Starting up")
    fmt.Println("Working")
    fmt.Println("done")
}

Program mencetak:

Starting up
Working
done

Kesalahan umum.

  • Memperbaiki ketiganya sekaligus dan kehilangan jejak perubahan mana yang berhasil. Satu error, satu perbaikan, jalankan lagi — bahkan ketika kamu pikir kamu melihat semuanya.

Selesai?

Itulah akhir dari Bagian 2. Kamu bisa menginstal Go dan menjalankan program, mencetak tepat apa yang kamu inginkan, memberi komentar pada kode, dan membaca error Go. Mini-proyek Bagian 2 — Banner Nama — memanfaatkan kemampuan fmt.Println-mu untuk membangun gambar dari teks. Lalu Bagian 3 menggali lebih dalam tentang variabel, string, angka, dan input.