Penerima Nilai
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 7 dari 68.
Saat kamu mendefinisikan method dengan receiver nilai, method tersebut beroperasi pada salinan instance struct, bukan pada struct asli. Artinya, perubahan apa pun pada receiver di dalam method tidak akan memengaruhi variabel struct asli.
type Counter struct {
Value int
}
func (c Counter) increment() {
c.Value++ // Ini mengubah salinannya, bukan yang asli
}Dalam contoh ini, method increment memiliki penerima nilai (c Counter). Saat kamu memanggil method ini pada instance Counter, Go membuat salinan struct dan meneruskannya ke method. Perubahan apa pun pada c.Value di dalam method hanya memengaruhi salinan ini.
Value receiver berguna saat method-mu hanya perlu membaca data dari struct tanpa mengubahnya. Value receiver aman digunakan karena menjamin data asli tetap tidak berubah, sehingga kodemu lebih mudah diprediksi dan efek samping yang tidak diinginkan dapat dicegah.
Tantangan
MudahDalam tantangan ini, kamu akan berlatih menggunakan penerima nilai dengan membuat sistem pemantauan suhu sederhana. Kamu akan membuat struct Sensor dan mendefinisikan method yang menunjukkan cara kerja penerima nilai dengan salinan struct.
Kamu akan menerima tiga input:
- String yang mewakili ID sensor (misalnya,
"TEMP001") - String yang mewakili pembacaan suhu saat ini (misalnya,
"23.5") - String yang mewakili nilai penyesuaian suhu (misalnya,
"2.0")
Tugasmu adalah:
- Definisikan struct
Sensordengan dua field:ID(string) danTemperature(float64) - Buat method bernama
displayReadingdengan penerima nilai yang mencetak informasi sensor dalam format:"Sensor [ID]: [temperature]°C" - Buat method bernama
adjustTemperaturedengan penerima nilai yang menambahkan nilai penyesuaian ke suhu dan mencetak:"Adjusted reading: [new_temperature]°C" - Parse input untuk membuat instance
Sensor - Panggil method
displayReadinguntuk menampilkan suhu awal - Panggil method
adjustTemperaturedengan nilai penyesuaian - Panggil method
displayReadinglagi untuk menunjukkan bahwa struct asli tetap tidak berubah
Tantangan ini akan menunjukkan bahwa method dengan penerima nilai bekerja pada salinan struct, sehingga nilai suhu pada struct asli tetap tidak berubah bahkan setelah method adjustTemperature dipanggil. Nilai suhu harus ditampilkan dengan presisi satu angka di belakang koma.
Coba sendiri
package main
import (
"fmt"
"strconv"
)
// TODO: Definisikan struct Sensor-mu di sini
// TODO: Definisikan method displayReading dengan penerima nilai di sini
// TODO: Definisikan method adjustTemperature dengan penerima nilai di sini
func main() {
// Baca input
var sensorID string
var tempStr string
var adjustStr string
fmt.Scanln(&sensorID)
fmt.Scanln(&tempStr)
fmt.Scanln(&adjustStr)
// Uraikan nilai suhu dan penyesuaian
temperature, _ := strconv.ParseFloat(tempStr, 64)
adjustment, _ := strconv.ParseFloat(adjustStr, 64)
// TODO: Buat instance Sensor dan panggil method yang diperlukan
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online