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

9303 단어 goindonesiapointers
포인터 adalah lokasi dimana data pada variabel disimpan.

Pada dasarnya semua tipe 데이터 포인터 adalah berupa 긴 16진수 yang berisi 값 berupa 메모리 주소 dimana lokasi 데이터 disimpan, yang berarti semua tipe 데이터 pada 값 dari semua 포인터 itu sama, entah itu berasal string, dan mauplain, float, 눕다

참조



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

Biasanya 참조 disimpan pada 메모리 아타우푼 저장 장치, 참조 adalah sebuah alias yang menunjuk kepada sebuah 포인터, setiap 참조 memiliki nama yang berbeda, analoginya seperti kita mencari buku berdasarkan nama penulis atau nama punerbit padensa sebuah 웹사이트 참조, 부쿠양 키타 투주 쥬가.

콘토 세데르하난야:

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 강력한, namun dibalik "sangat 강력한"tersebut terdapat ancaman, dimana penggunaan 포인터 adalah untuk menghindari versi copy dari sebuah variabel, 세단칸 menggunakan 포인터 키타 멩구바 값 양 베라다 파다 메모리 주소. Masalah yang dapat muncul dari penggunaan yang salah adalah 메모리 누수.

Untuk menghindari 메모리 누수 pada sebuah 포인터, anda cukup melakukan 할당 ulang pada 참조 lamanya dengan nil
oldReference = nil


Ini mencegah 메모리 누수 sekaligus mencegah dari meninggalkan 참조 라마. 멜라쿠칸 어사인 울랑 뎅간 밸류 바루 셀린 nil pada golang tidak akan membuat 참조 라마 멘자디 가비지 수집, 카레나 마시 멘자디 참조 다리 참조 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 코드 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
}


Beberapa bahasa pemrograman HLL(고급 언어) menyembunyikan penggunaan 포인터, salah satu contohnya adalah Javascript, mewajibkan untuk menggunakan 참조, dan 전달 데이터 dilakukan menggunakan 복사 다리 참조.

Contoh Penggunaan 포인터 파다 골랑



Disini saya akan memberi contoh kasus penggunaan 포인터 pada Golang, dimana sebuah setter 메소드 akan menggunakan , saya biasanya menggunakan contoh dengan Javascript namun karena Javascript tidak bisa menggunakan 포인터 secara langsung, sayah akan menggunakan golang:sebag

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 dan 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

좋은 웹페이지 즐겨찾기