Pada bagian ini, kita akan mengubah kode supaya tidak hanya mengembalikan satu bentuk salam saja, tetapi mengembalikan satu dari beberapa pesan salam yang telah ditentukan.
Note
|
Topik ini adalah bagian dari seri tutorial yang dimulai dengan Membuat sebuah Go modul. |
Untuk melakukan hal ini, kita akan menggunakan sebuah slice. Sebuah slice yaitu seperti sebuah array, namun ukurannya dapat berubah secara dinamis saat kita menambah atau menghapus item dalam slice. Slice adalah salah satu dari tipe yang sangat berguna pada Go.
Kita akan membuat slice berukuran kecil yang berisi tiga pesan salam, kemudian kita kembalikan salah satu dari pesan tersebut secara acak. Untuk informasi lebih lanjut tentang slice, lihat Go slice.
-
Dalam "greetings/greetings.go", ubah kode kita supaya seperti di bawah.
package greetings import ( "errors" "fmt" "math/rand" "time" ) // Hello returns a greeting for the named person. func Hello(name string) (string, error) { // If no name was given, return an error with a message. if name == "" { return name, errors.New("empty name") } // Create a message using a random format. message := fmt.Sprintf(randomFormat(), name) return message, nil } // init sets initial values for variables used in the function. func init() { rand.Seed(time.Now().UnixNano()) } // randomFormat returns one of a set of greeting messages. The returned // message is selected at random. func randomFormat() string { // A slice of message formats. formats := []string{ "Hi, %v. Welcome!", "Great to see you, %v!", "Hail, %v! Well met!", } // Return a randomly selected message format by specifying // a random index for the slice of formats. return formats[rand.Intn(len(formats))] }
Dalam kode tersebut, kita:
-
Menambahkan fungsi
randomFormat
yang mengembalikan format untuk pesan salam secara acak. Ingatlah bahwarandomFormat
diawali dengan huruf kecil, membuatnya hanya dapat diakses oleh kode di dalam paketnya sendiri (dengan kata lain, tidak dieskpor). -
Dalam
randomFormat
, kita mengisi sebuah slice string dengan tiga format pesan. Saat mendeklarasikan sebuah slice, kita tidak mengisi ukuran dalam tanda kurung siku, seperti ini:[]string
. Perintah ini mengatakan ukuran dari array di balik slice dapat diubah secara dinamis. -
Menggunakan paket
math/rand
untuk membangkitkan angka acak untuk memilih sebuah item di dalam slice. -
Menambahkan fungsi
init
untuk menanam paketrand
dengan waktu sekarang. Go mengeksekusi fungsiinit
secara otomatis pada saat program berjalan, setelah semua global variabel diinisiasi. Untuk informasi lebih lanjut tentang fungsiinit
, lihat Efektif Go. -
Dalam fungsi
Hello
, panggil fungsirandomFormat
untuk mendapatkan format dari pesan yang akan dikembalikan, kemudian gunakan format tersebut beserta value dariname
untuk membuat pesan. -
Kembalikan pesan tersebut (atau sebuah eror) seperti sebelumnya.
-
-
Dalam "hello/hello.go", ubah kode kita supaya seperti di bawah.
Kirim string "Glady" (atau nama apa pun yang Anda sukai) sebagai argumen dari fungsi
Hello
dalam hello.go.package main import ( "fmt" "log" "example.com/greetings" ) func main() { // Set properti dari Logger, termasuk prefiks dan flag untuk // menon-aktifkan pencetakan waktu, sumber berkas, dan nomor baris. log.SetPrefix("greetings: ") log.SetFlags(0) // Ambil pesan salam. message, err := greetings.Hello("Gladys") // Jika ada eror, cetak ke layar dan keluar dari program. if err != nil { log.Fatal(err) } // Jika tidak ada eror, cetak pesan yang dikembalikan ke layar. fmt.Println(message) }
-
Pada terminal, di dalam direktori "hello", jalankan "hello.go" untuk memastikan program berjalan. Jalankan beberapa kali, untuk melihat perubahan pada pesan salam yang dihasilkan.
$ go run . Great to see you, Gladys! $ go run . Hi, Gladys. Welcome! $ go run . Hail, Gladys! Well met!
Selanjutnya, kita akan menggunakan slice untuk membuat pesan salam untuk beberapa orang.
Balik: Mengembalikan dan menangani eror.