Mastering Golang
  • Tentang Go
  • Instalasi Go
  • Membuat Project Go
  • Go Run & Go Build
  • Apa itu Package pada Go
  • Imports dan Exports
  • Variabel
  • Tipe Data
  • Konstanta dan Komentar
  • Operator
  • Type Conversion
  • Kondisional - IF
  • Kondisional - Switch Case
  • Looping
  • Array
  • Array - Looping
  • Slices
  • Pointer
  • Map
  • Fungsi
  • Struct
  • Method
  • Interface
  • Interface Kosong
  • Concurrency
  • Concurrency - Goroutines
  • Channel
  • Buffered Channel
  • Channel - Close and Range
  • Channel - Direction
  • Channel - Select
  • Concurrency - WaitGroup
  • Concurrency - Mutex
  • JSON Data
  • SQL
  • URL Parsing
  • GO Vendor
  • Unit Testing
  • Go Basic for Web Development
    • Aplikasi Web pada Go - Hello World
    • Root Routing
    • Query String
    • Web Service API Server
    • HTTP Basic Auth
    • RESTFul API dengan Gin dan Gorm
Powered by GitBook
On this page
  • Mengubah nilai dari variabel yang mengakses suatu memori
  • Menggunakan pointer dengan keyword var
  • Penerapan Pointer

Was this helpful?

Pointer

Pada sesi ini akan di bahas apa itu Pointer pada Go

PreviousSlicesNextMap

Last updated 4 years ago

Was this helpful?

Pointer adalah suatu variabel yang berisi alamat memori dari suatu nilai atau data.

Perhatikan kode di bawah ini:

Kita bisa lihat bahwa terdapat variabel age yang berisi nilai 26 . Lalu sebuah variabel x yang berisi alamat memori dari nilai variabel age ditandai dengan expression & di depan nama variabel.

age berisi nilai 26

x berisi alamat memori tempat nilai age yaitu 26 tersimpan

Lalu bagaimana jika kita ingin mendapatkan nilai age dari variabel x atau biasa disebut dereferrencing? Kita dapat melakukannya dengan cara menggunakan expression * di depan variabel x seperti di bawah ini:

Mengubah nilai dari variabel yang mengakses suatu memori

Masih menggunakan contoh di atas, bagaimana jika kita meng-assign variabel baru pada variabel x ?

Variabel x telah memiliki keterikatan dengan variabel age yaitu variabel x berisi alamat memori dari nilai age . Jadi jika kita mengubah atau meng-assign nilai baru ke dalam variabel x maka akan mengubah juga nilai dari variabel age karena berada di memori yang sama.

Pada kode di atas jika kita ingin meng-assign nilai baru pada variable Pointer, maka harus menambahkan expression * di depan variabel sehingga menjadi *x = 30 .

Menggunakan pointer dengan keyword var

Jika kita mendeklarasikan pointer dengan menggunakan keyword var ada perbedaan sedikit di penulisan sintaks:

Untuk hasil kode di atas akan sama dengan hasil program sebelumnya. Yang perlu diperhatikan adalah saat mendeklarasikan variabel untuk di jadikan sebagai Pointer harus di tambahkan expression * di depan tipe data.

Penerapan Pointer

Salah satu contoh penerapan Pointer adalah ingin mengakses data yang ada di dalam function. Pada kode di bawah ini terdapat sebuah function change yang mengembalikan nilai baru new ke nilai yang lama old .

package main

import (
	"fmt"
)

func main() {
	// Inisialisasi variabel number
	number := 20
	fmt.Println("Nilai variabel number sebelum memanggil function: ", number)
	fmt.Println("Alamat memori number sebelum memanggil function: ", &number)
	fmt.Println("----")

	change(number, 40)

	fmt.Println("Nilai variabel number setelah pemanggilan function", number)
	fmt.Println("Alamat memori number setelah pemanggilan function", &number)
	fmt.Println("----")
}

func change(old int, new int) {
	old = new
	fmt.Println("Nilai variabel di dalam function: ", old)
	fmt.Println("Alamat memori di dalam function: ", &old)
	fmt.Println("----")
}

Untuk bisa mengakses nilai yang sama dengan yang ada di dalam function change , maka kita bisa menggunakan Pointer seperti berikut ini:

package main

import (
	"fmt"
)

func main() {
	number := 20
	fmt.Println("Nilai variabel number sebelum memanggil function: ", number)
	fmt.Println("Alamat memori number sebelum memanggil function: ", &number)
	fmt.Println("----")
	
	// Argumen yang dikirim adalah alamat memori dari number
	change(&number, 40)

	fmt.Println("Nilai variabel number setelah pemanggilan function", number)
	fmt.Println("Alamat memori number setelah pemanggilan function", &number)
	fmt.Println("----")
}

// Untuk menampung alamat memori, harus menggunakan * pada parameter old
func change(old *int, new int) {
	*old = new
	fmt.Println("Nilai variabel di dalam function: ", *old)
	fmt.Println("Alamat memori di dalam function: ", old)
	fmt.Println("----")
}

Penggunaan pointer pada variabel x
Output menampilkan nilai dan alamat memori tempat nilai tersimpan
Mengakses nilai age melalui variabel x
Output program menampilkan nilai dari variabel age
Melakukan perubahan nilai pada variabel x yang berpengaruh pada variabel age
Nilai variabel x dan age menjadi 30
Deklarasi variabel pointer menggunakan keyword var
Output program menampilkan nilai variabel dari function main dan function change
Output program mengacu pada alamat memori yang sama