Pass By Value
Secara default pada Go-Lang variable dipassing dengan cara pass by value, bukan pass by reference, apa itu pass by value ?. saat kita memindahkan variable ke method, function ,variable, dll. yang sebenarnya terjadi bukanlah memindahkan nilai sebenarnya ke tujuan ( method, function, variable, dll ), tapi yang sebenarnya terjadi adalah nilai sebenarnya diduplikasi ke tujuan.
Pass By Reference
nilai variable yang dipindahkan merujuk pada pointer / alamat memori nilai tersebut, bukan melakukan duplikasi dari nilai tersebut dan membuat alamat memori baru.
Pointer
Pointer adalah kemampuan untuk membuat reference ke nilai yang sudah ada tanpa melakukan dupllikasi nilai yang dipindahkan.
Operator &
Operator & digunakan untuk mengambil pointer dari suatu nilai.
Operator *
Operator * jika digunakan pada value yang akan disimpan maka akan mengembalikan pointer dari value tersebut, jika digunakan pada type variable maka menandakan bahwa variable tersebut meyimpan nilai pointer.
Praktek
Merubah Nilai Variable Tanpa Pointer
Code (ditulis dalam Go-Lang)
package main
import "fmt"
type address struct {
city, province, country string
}
func main() {
// merubah nilai tanpa pointer
address1 := address{"Padang", "Sumbar", "Indonesia"}
address2 := address1
address2.city = "Jakarta"
fmt.Println(address1, " ", "ini address1")
fmt.Println(address2, " ", "ini address2")
}
Merubah Nilai Dengan Pointer
Kode (ditulis dalam Go-Lang)
package main
import "fmt"
type student struct {
nama string
grade int
}
func main() {
student1 := student{"fariz", 10}
var student2 *student = &student1 // menyimpan nilai pointer dari student1
student2.grade = 12 // merubah nilai dari grade student2, ini juga akan merubah grade pada student1
fmt.Println(student1, " ", "ini student1")
fmt.Println(student2, " ", "ini student2")
}
Merubah Nilai Variable Pointer
jika merubah nilai dari variable pointer, maka hanya nilai variable itu saja yang berubah, nilai variable lain yang merujuk pada pointer variable yang sama tidak akan ikut berubah, tapi jika ingin merubah seluruh nilai variable yang merujuk pada pointer variable yang sama itu bisa dilakukan, mari lihat diagram, kode, hasil running kode dibawah ini.
Kode (ditulis dalam Go-Lang)
package main
import "fmt"
type product struct {
name string
price int
}
func main() {
product1 := product{"Sepeda", 1000}
var product2 *product = &product1
var product3 *product = &product1
product2 = &product{"Motor", 5000}
fmt.Println(product1, " ", "Nilai Masih Sama Dengan nilai product1 sebelumnya")
fmt.Println(product2, " ", "Sudah Berubah menjadi {\"Motor\", 5000}")
fmt.Println(product3, " ", "Nilai Masih Sama Dengan nilai product3 sebelumnya")
println("======================================================================")
*product2 = product{"Mobil", 10000}
fmt.Println(product1, " ", "Sudah Berubah menjadi ", *&product1)
fmt.Println(product2, " ", "Sudah Berubah menjadi ", *product2)
fmt.Println(product3, " ", "Sudah Berubah menjadi", *product3)
}
Top comments (0)