WTF*&n은 Golang(바하사 버전)의 포인터입니다.

9319 단어 gopointersindonesia
포인터 adalah lokasi dimana data pada variabel disimpan.

Pada dasarnya semua tipe data pointers adalah berupa long 16진수 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- 누워.

참조



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

Biasanya 참조 disimpan pada 메모리 ataupun 저장 장치, 참조 adalah sebuah 별칭 yang menunjuk kepada sebuah 포인터, setiap 참조 memiliki nama yang berbeda, analoginya seperti kita mencari buku berdasarkan nama penulis atau nama penerbit pada sebuah 웹사이트, 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)
}


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



펜징갓



Penggunaan 포인터 sangat powerful, namun dibalik "sangat powerful"tersebut terdapat ancaman, diman penggunaan 포인터 adalah untuk menghindari versi copy dari sebuah variabel, sedangkan menggunakan 포인터 kita mengubah value yang berada pada 메모리 주소. Masalah yang dapat muncul dari penggunaan yang salah adalah memory leaks.

메모리 누수가 세부 정보 포인터 및 메모리 누수를 할당할 때 참고할 내용을 참조하십시오nil.

oldReference = nil


처음에 메모리 누수는 다음과 같습니다. Melakukan assign ulang dengan value baru selainnil pada golang tidak akan membuat 참조 lama menjadi 가비지 컬렉션, karena masih menjadi 참조 dari 참조 selanjutnya.

Garbage Collector는 3색 마크 앤 스윕, Diman Value Pada Memori Akan Dibebaskan Jika Tidak Direferensikan Kemanapun, Diman Case Disini Adalah Dengan Menggunakannil을 포함합니다.

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
}


HLLs(High Level Languages)는 포인터, 포인터, 자바스크립트, 참조, 전달 데이터 참조, 참조에 대한 참조를 포함합니다.

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())
}


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


Sekian terima kasih telah membaca artikel ini, semoga bermanfaat 😄

참조

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

좋은 웹페이지 즐겨찾기