Rumah > Artikel > pembangunan bahagian belakang > Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?
Artikel ini diperkenalkan oleh ruangan tutorial go language untuk memperkenalkan 11 mata pengetahuan Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai? Pointer Saya harap ia akan membantu rakan yang memerlukan.
Penunjuk ialah salah satu bahagian terpenting dalam menulis kod yang baik. Dalam artikel ini, kami akan meneroka apakah petunjuk itu dan cara menggunakannya dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?.
Penunjuk ialah pembolehubah yang menyimpan alamat yang ditunjukkannya. Penunjuk jenis tertentu hanya boleh menunjuk kepada jenis itu (jenis data tidak boleh diubah).
Sintaks penunjuk adalah sangat mudah. Berikut ialah sintaks untuk pengisytiharan penunjuk dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?. Nilai sifar bagi penuding
var ptr *typevar ptrint *int // 指向 int 的指针
ialah nihil.
penunjuk dimulakan menggunakan &
:
package mainimport ( "fmt")func main() { var q int = 42 var p *int // declare the pointer p = &q // initialize the pointer fmt.Println(p) // 0x40e020}
Nilai penunjuk bermaksud mendapatkan nilai dalam alamat yang disimpan oleh penuding. Berikut ialah contoh menggunakan operator *
untuk melaksanakan operasi nilai penunjuk:
package mainimport ( "fmt")func main() { var q int = 42 var p *int p = &q fmt.Println(p) // 0x40e020 fmt.Println(*p) // 42}
ialah nilai angka , nilai ini juga boleh diberikan kepada pembolehubah lain. Oleh itu, kita boleh mencipta tahap tidak arah. Tahap kelalaian ini kadangkala boleh menimbulkan kekeliruan yang tidak perlu, jadi gunakannya dengan berhati-hati.
package mainimport ( "fmt")func main() { i := 64 j := &i // j 是 int 类型的指针 k := &j // k 是存放指针地址的指针,也是 int 类型 fmt.Println(i) // 64 fmt.Println(j) // 0x40e020 fmt.Println(*j) // 64 (value inside that address) fmt.Println(k) // 0x40c138 fmt.Println(*k) // 0x40e020 (address of j)}
Penunjuk boleh menunjuk kepada apa sahaja, malah kepada antara muka. Apabila menggunakan antara muka kosong, nilai yang dikembalikan ialah nil.
package mainimport ( "fmt")func main() { var a interface{} b := &a fmt.Println(b) // 0x40c138 fmt.Println(*b) // <nil>}</nil>
Berikut ialah contoh penggunaan antara muka dengan penunjuk.
package mainimport ( "fmt")// 定义接口type Bird interface{ fly()}type B struct{ name string}// 实现它func (b B)fly() { fmt.Println("Flying...")}func main() { var a Bird = B{"Peacock"} b := &a fmt.Println(b) // 0x40c138 fmt.Println(*b) // {Peacock}}
Di sini "a" ialah struct jenis Burung yang kemudiannya digunakan untuk jenis antara muka seperti yang anda lihat. Ini adalah penggunaan polimorfisme. Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai? membolehkan polimorfisme menggunakan antara muka Jadi anda boleh melihat bahawa penunjuk kepada struktur atau antara muka ialah alat penting dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?.
Penunjuk boleh digunakan sebagai parameter dalam fungsi. Ia mempunyai beberapa kelebihan berbanding menggunakan nilai secara langsung. Menggunakan penunjuk sebagai hujah ialah cara yang sangat berkesan untuk menghantar objek besar kepada fungsi. Jadi menggunakannya adalah pengoptimuman yang besar.
Menggunakan objek besar boleh melambatkan masa pelaksanaan, ini adalah contoh menghantar penunjuk kepada struktur. Ini adalah cara yang cekap untuk mengendalikan objek besar.package mainimport ( "fmt")//声明指针参数func f(a *int) { fmt.Println(*a)}func main() { var a int = 42 // 传递地址 f(&a) // 42}Berhati-hati apabila menafikan struktur. Jika anda menggunakannya seperti
package mainimport ( "fmt")type Human struct { name string age int place string}func f(h *Human) { fmt.Println("The user", (*h).name, "is", (*h).age, "years old and he is from", (*h).place)}func main() { john := Human{"John", 36, "Las Vegas"} f(&john) // The user John is 36 years old and he is from Las Vegas}maka ia akan menimbulkan ralat.
Kaedah *structname.field1
yang betul ialah . (*structname).field1
Menggunakan penunjuk di dalam fungsi menjadikan nilai "
" melainkan parameternya adalah const, jadi apabila kita ingin menukar nilai, kita harus menggunakan penunjuk ke penunjuk nilai itu sebagai fungsi parameter, dan kemudian buat pengubahsuaian yang diperlukan.
dalam Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai? mengembalikan penunjuk kepada jenis.
package mainimport ( "fmt")func main() { ptri := new(int) *ptri = 67 fmt.Println(ptri) // 0x40e020 fmt.Println(*ptri) // 67}
package mainimport ( "fmt")func p() *int { // 将返回类型指定为指针 v := 101 // 返回地址 return &v}func main() { n := p() fmt.Println(n) // 0x40e020 fmt.Println(*n) // 101}
package mainimport ( "fmt")func main() { f := func() { fmt.Println("a function") } pf := f pf() // 一个函数}
Alamat terjemahan: https://learnku.com/go/t/60880
Atas ialah kandungan terperinci Apakah itu Penunjuk Pergi? Apakah mata ilmu yang perlu dikuasai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!