DEV Community

Muhammad Al Farizzi
Muhammad Al Farizzi

Posted on

#1 Belajar Go-Pointer

#go

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

Alt Text

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")

}
Enter fullscreen mode Exit fullscreen mode

Hasil
Alt Text

Merubah Nilai Dengan Pointer

Alt Text

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")
}
Enter fullscreen mode Exit fullscreen mode

Hasil
Alt Text

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.

Diagram
Alt Text

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)

}
Enter fullscreen mode Exit fullscreen mode

Hasil
Alt Text

Top comments (0)