new() dan Bila Perlu Menggunakan Penuding
Peruntukan dengan new dan corak penuding umum
new() dan Bila Perlu Menggunakan Penuding ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 4 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.
Fungsi Terbina Dalam new()
new(T) memperuntukkan T yang diisi nilai sifar dan memulangkan *T. Untuk struktur, ia setara dengan &T{}:
package main
import "fmt"
func main() {
p := new(int)
fmt.Println(*p) // 0
*p = 42
fmt.Println(*p) // 42
type Point struct{ X, Y int }
pt := new(Point)
fmt.Println(*pt) // {0 0}
}new berbanding &T{}
Untuk struktur, &T{} lebih idiomatik dan membenarkan pemulaan medan. new jarang digunakan dalam Go moden:
package main
import "fmt"
type Config struct{ Port int; Host string }
func main() {
a := new(Config) // zeroed
b := &Config{Port: 8080} // initialized
fmt.Println(a, b)
}Bila Hendak Memulangkan Penuding
Mulangkan penuding daripada pembina apabila:
- Struktur mempunyai keadaan dan pemanggil mesti berkongsi tika yang sama
- Struktur mempunyai kaedah penerima penuding (diperlukan untuk pemenuhan antara muka)
- Struktur adalah besar dan penyalinan akan menjadi mahal
Bila Hendak Memulangkan Nilai
Mulangkan nilai apabila:
- Jenis itu kecil (beberapa medan)
- Ia ialah konfigurasi yang tidak boleh diubah
- Anda mahu menjelaskan bahawa pemanggil menerima salinan bebas
Contoh: time.Time dipulangkan mengikut nilai walaupun mempunyai banyak kaedah.
Penuding dalam Kepingan dan Peta
Menyimpan penuding dalam koleksi membolehkan pengubahan dikongsi:
package main
import "fmt"
type User struct{ Name string; Score int }
func main() {
users := []*User{{"Alice", 0}, {"Bob", 0}}
users[0].Score = 100
fmt.Println(users[0]) // &{Alice 100}
}Penuding kepada Primitif untuk Pilihan
Medan *int atau *string boleh menjadi nil untuk bermaksud "tidak ditetapkan", yang berguna untuk JSON dengan omitempty atau lajur pangkalan data pilihan:
package main
import "fmt"
type Profile struct {
Name string
Age *int // nil means not provided
}
func main() {
p := Profile{Name: "Alice"}
fmt.Println(p.Age == nil) // true
age := 30
p.Age = &age
fmt.Println(*p.Age) // 30
}Mengelakkan Pertambahan Penuding
Penggunaan penuding yang berlebihan meningkatkan tekanan pada pengutip sampah dan mengurangkan kedekatan data dalam cache. Jalankan tanda aras sebelum menukar jenis nilai kepada penuding semata-mata demi prestasi.
make berbanding new
make memulakan kepingan, peta dan saluran (semuanya memerlukan persediaan dalaman). new memperuntukkan sebarang jenis dengan nilai sifar dan memulangkan penuding. Kedua-duanya mempunyai tujuan yang berbeza:
package main
import "fmt"
func main() {
s := make([]int, 5) // usable slice
m := make(map[string]int) // usable map
p := new(int) // *int pointing to 0
fmt.Println(s, m, *p)
}Corak Penuding Tidak Boleh Diubah
Mulangkan *T tetapi dokumentasikan bahawa ia tidak boleh diubah; pengguna tidak sepatutnya mengubah suainya. Corak ini biasa digunakan pada objek konfigurasi yang dikongsi antara gorutin.
Ringkasan Keselamatan Penuding
Peraturan untuk kekal selamat dengan penuding:
- Sentiasa semak
nilsebelum menyahrujuk - Jangan simpan penuding kepada pemboleh ubah tindanan lebih lama daripada jangka hayat pemboleh ubah itu (analisis pelolosan Go mengendalikannya)
- Jangan sekali-kali menukar jenis
unsafe.Pointermelainkan benar-benar perlu - Biarkan pengkompil mengurus tindanan berbanding timbunan
Semakan Pantas
Apakah yang dipulangkan oleh new(int)?
Ringkasan: new dan Penuding
Perkara utama:
new(T)memulangkan*Tdengan nilai sifar — jarang digunakan; utamakan&T{}- Mulangkan nilai apabila kecil atau tidak boleh diubah; gunakan penuding apabila berkeadaan atau besar
- Medan
*Tmembolehkan semantik nil-sebagai-tiada - Jangan gunakan penuding secara berlebihan — pengutip sampah mempunyai kos
Arahan Latihan
Cipta struktur Settings dengan medan *int untuk MaxConnections. Tulis fungsi yang menerima *Settings dan menetapkan nilai lalai hanya apabila medan itu ialah nil.
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 “new() dan Bila Perlu Menggunakan Penuding” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “new() dan Bila Perlu Menggunakan 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 “new() dan Bila Perlu Menggunakan Penuding”?
Peruntukan dengan new dan corak penuding umum 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 4 daripada 4.
Berapa lamakah pelajaran “new() dan Bila Perlu Menggunakan 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