Logo

dev-resources.site

for different kinds of informations.

WTF*&n is Pointers in Golang (Bahasa Version)

Published at
12/2/2021
Categories
go
pointers
indonesia
Author
fzn0x
Categories
3 categories in total
go
open
pointers
open
indonesia
open
Author
5 person written this
fzn0x
open
WTF*&n is Pointers in Golang (Bahasa Version)

Pointers adalah lokasi dimana data pada variabel disimpan.

Pada dasarnya semua tipe data pointers adalah berupa long hexadecimal number yang berisi value berupa memory address dimana lokasi data disimpan, yang berarti semua tipe data pada value dari semua pointer itu sama, entah itu berasal dari integer, float, char maupun string, dan lain-lain.

Reference

Reference adalah nilai yang tidak diakses secara langsung di tempat dimana dia dibuat namun menunjukkan lokasi dimana dia dibuat.

Biasanya reference disimpan pada memory ataupun storage device, reference adalah sebuah alias yang menunjuk kepada sebuah pointer, setiap reference memiliki nama yang berbeda, analoginya seperti kita mencari buku berdasarkan nama penulis atau nama penerbit pada sebuah website, kita punya referensi diantara keduanya, namun akan menunjukkan buku yang kita tuju juga.

Contoh sederhananya:

package main

import (
    "fmt"
)

func main() {
  // Membuat Reference bernama names
  names := []string{"Fauzan"}
  // Membuat Reference "publisher"
  publisher := names // Menggunakan Reference "names"
  // menggunakan pointer yang sama
  fmt.Println(&names)
  fmt.Println(&publisher)
}
Enter fullscreen mode Exit fullscreen mode

catatan: untuk menampilkan memory address pada pointer di Golang, Anda bisa menggunakan simbol &

Pengingat

Penggunaan pointers sangat powerful, namun dibalik "sangat powerful" tersebut terdapat ancaman, dimana penggunaan pointers adalah untuk menghindari versi copy dari sebuah variabel, sedangkan menggunakan pointer kita mengubah value yang berada pada memory address. Masalah yang dapat muncul dari penggunaan yang salah adalah memory leaks.

Untuk menghindari memory leaks pada sebuah pointer, anda cukup melakukan assign ulang pada reference lamanya dengan nil

oldReference = nil
Enter fullscreen mode Exit fullscreen mode

Ini mencegah memory leaks sekaligus mencegah dari meninggalkan reference lama. Melakukan assign ulang dengan value baru selain nil pada golang tidak akan membuat reference lama menjadi garbage collection, karena masih menjadi reference dari reference selanjutnya.

Garbage Collector pada Golang berdasarkan algoritma tri-color mark-and-sweep, dimana value pada memori akan dibebaskan jika tidak direferensikan kemanapun, dimana case disini adalah dengan menggunakan nil.

Seperti yang terlampir pada kode https://go.dev/src/container/list/list.go :

// remove removes e from its list, decrements l.len, and returns e.
func (l *List) remove(e *Element) *Element {
    e.prev.next = e.next
    e.next.prev = e.prev
    e.next = nil // avoid memory leaks
    e.prev = nil // avoid memory leaks
    e.list = nil
    l.len--
    return e
}
Enter fullscreen mode Exit fullscreen mode

Beberapa bahasa pemrograman HLLs (High Level Languages) menyembunyikan penggunaan Pointers, salah satu contohnya adalah Javascript, mewajibkan untuk menggunakan reference, dan passing data dilakukan menggunakan copy dari reference.

Contoh Penggunaan Pointers pada Golang

Disini saya akan memberi contoh kasus penggunaan pointers pada Golang, dimana sebuah setter method akan menggunakan , saya biasanya menggunakan contoh dengan Javascript namun karena Javascript tidak bisa menggunakan Pointers secara langsung, saya akan menggunakan Golang sebagai contohnya:

package main

import (
    "fmt"
)

type Person struct {
  fullName string;
}

func (p Person) Name() string {
    return p.fullName
}

// ini tidak akan mempengaruhi reference pada fungsi main()
// karena kita hanya mengubah versi "copy" dari reference
// tersebut (person).
// func (p Person) SetName(fullName string) {
//     p.fullName = fullName
// }

// kita akan menggunakan pointer receiver untuk mempengaruhi
// reference pada fungsi main() karena dia akan menggunakan
// memory address yang sama seperti pada fungsi main()
func (p *Person) SetName(fullName string) {
    p.fullName = fullName
}

func main() {
  person := Person{}

  person.SetName("Fauzan")
  fmt.Println(person.Name())

  person.SetName("Muhammad Fauzan")
  fmt.Println(person.Name())
}
Enter fullscreen mode Exit fullscreen mode

Jadi seperti itulah penjelasan mengenai pointers dan bagaimana contoh penggunaannya di Golang.


Sekian terima kasih telah membaca artikel ini, semoga bermanfaat 😄

References

https://stackoverflow.com/questions/39052967/setting-pointers-to-nil-to-prevent-memory-leak-in-golang
https://www.digitalocean.com/community/conceptual_articles/understanding-pointers-in-go
https://go.dev/tour/moretypes/1

pointers Article's
30 articles in total
Favicon
CS50 - Week 4
Favicon
Pointers in Modern C
Favicon
Go: Pointers & Memory Management
Favicon
Pointers and Arrays
Favicon
Understanding Memory Management, Pointers, and Function Pointers in C
Favicon
Pointers : what are they pointing to?
Favicon
Pointers in Go Programming Language
Favicon
An ode to Stacks and Pointers in Go!
Favicon
The Absolute Minimum Every Software Developer Must Know About Pointers
Favicon
Pointers in C programming.
Favicon
How constant is const in C?
Favicon
Pointers in C Programming: How Hard?🤔
Favicon
In C++, is a free function taking a struct as an argument faster than a class with a member function to do the same thing?
Favicon
How to assign an Address, contained inside a string, to a pointer in C
Favicon
Understanding pointers in Go
Favicon
Reversing a Linked List: A Hallway Analogy
Favicon
Exploring the Power of Pointers in C Programming
Favicon
Learn It Once: “Golang Pointers are Powerful”
Favicon
C++23: std::out_ptr and std::inout_ptr
Favicon
Pointers , Arrays & Strings in C
Favicon
C - Even more pointers, arrays and strings
Favicon
C - Pointers, arrays and strings
Favicon
A common pitfall when using sizeof() with pointers
Favicon
Pointers
Favicon
Storing references of pointers in containers in C++
Favicon
C++ basics: Pointers vs iterators
Favicon
I broke production 3 times in 3 weeks - Part II
Favicon
WTF*&n is Pointers in Golang (Bahasa Version)
Favicon
I broke production 3 times in 3 weeks - Part I
Favicon
Golang 101: İşaretçiler (Pointers)

Featured ones: