Apakah Penuding?
Operator alamat, penyahrujukan dan penuding nil
Apakah Penuding? ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Alamat Memori
Setiap pemboleh ubah berada pada alamat memori. Penuding menyimpan alamat tersebut. Dalam Go, penuding mempunyai jenis: *int menyimpan alamat int.
Operator Mendapatkan Alamat &
Gunakan & untuk mendapatkan alamat pemboleh ubah:
package main
import "fmt"
func main() {
x := 42
p := &x
fmt.Println(p) // 0xc000... (address)
fmt.Println(*p) // 42 (value at address)
}Penyahrujukan *
Gunakan * untuk membaca atau menulis nilai pada alamat penuding:
package main
import "fmt"
func main() {
n := 10
p := &n
*p = 99
fmt.Println(n) // 99
}Penuding nil
Nilai sifar penuding ialah nil. Menyahrujuk penuding nil menyebabkan panik:
package main
import "fmt"
func main() {
var p *int
fmt.Println(p) // <nil>
fmt.Println(p == nil) // true
// *p = 1 — PANIC
}Jenis Penuding
Setiap jenis penuding adalah khusus kepada perkara yang ditudingnya:
package main
import "fmt"
func main() {
i := 1
s := "hello"
pi := &i // *int
ps := &s // *string
fmt.Printf("%T %T\n", pi, ps) // *int *string
}Semakan nil Sebelum Penggunaan
Sentiasa semak nil sebelum menyahrujuk penuding yang diterima dari luar kod anda:
package main
import "fmt"
func printInt(p *int) {
if p == nil {
fmt.Println("nil pointer")
return
}
fmt.Println(*p)
}
func main() {
v := 7
printInt(&v)
printInt(nil)
}Penuding kepada Struktur
Mengakses medan struktur melalui penuding menggunakan tatatanda titik yang sama — Go menyahrujuk secara automatik:
package main
import "fmt"
type Point struct{ X, Y int }
func main() {
p := &Point{1, 2}
p.X = 10 // same as (*p).X = 10
fmt.Println(*p) // {10 2}
}Perbandingan Penuding
Dua penuding adalah sama apabila kedua-duanya menunjuk kepada pemboleh ubah yang sama (alamat yang sama) atau kedua-duanya nil:
package main
import "fmt"
func main() {
a := 1
p1 := &a
p2 := &a
p3 := new(int)
*p3 = 1
fmt.Println(p1 == p2) // true — same address
fmt.Println(p1 == p3) // false — different address
}Timbunan berbanding Longgokan
Penyusun Go menentukan sama ada pemboleh ubah berada pada timbunan atau longgokan melalui analisis pelepasan. Apabila anda mengambil alamat pemboleh ubah setempat dan mengembalikannya, Go memindahkannya ke longgokan secara automatik — anda tidak perlu menguruskannya secara manual.
Bila TIDAK Perlu Menggunakan Penuding
Tidak semua perkara memerlukan penuding:
- Jenis nilai kecil (int, bool, struktur kecil) lebih murah untuk disalin daripada dinyahrujuk
- Data tidak berubah yang dikongsi antara goroutine adalah selamat sebagai nilai
- Gunakan penuding terutamanya untuk mutasi atau struktur besar
Semakan Pantas
Apakah yang dikembalikan oleh operator &?
Imbas Kembali: Penuding
Perkara penting:
&vmendapatkan alamat;*pmenyahrujuknya- Nilai sifar ialah nil — sentiasa semak sebelum menyahrujuk
- Go menyahrujuk akses medan penuding struktur secara automatik
- Analisis pelepasan mengurus timbunan dan longgokan secara automatik
Arahan Latihan
Tulis fungsi swap(a, b *int) yang menukar nilai dua integer menggunakan penuding. Panggil fungsi itu daripada main dan cetak keadaan sebelum serta selepas.
Pelajari Go dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Apakah Penuding?” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Apakah Penuding?”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Apakah Penuding?”?
Operator alamat, penyahrujukan dan penuding nil Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Go Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Apakah Penuding?” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Apakah Penuding?
- Penuding dan Fungsi
- Penerima Penuding pada Kaedah
- new() dan Bila Perlu Menggunakan Penuding