Soalan:
Adakah Golang menyokong menggerakkan semantik, seperti yang ditakrifkan dalam C 11 oleh Bjarne Stroustrup , untuk mengelakkan perkara yang tidak perlu menyalin?
Jawapan:
Tidak seperti C , Go tidak secara jelas menyokong semantik pergerakan melalui kata kunci tertentu seperti "move constructor" atau "move assignment." Walau bagaimanapun, ia memanfaatkan konsep semantik rujukan untuk jenis terbina dalam tertentu, mencapai faedah pengoptimuman yang serupa.
Semantik Rujukan dalam Go:
Semua dalam Go diluluskan mengikut nilai, termasuk penunjuk. Walau bagaimanapun, beberapa jenis terbina dalam, yang dikenali sebagai "jenis rujukan," memegang rujukan kepada struktur data luaran:
Bila nilai jenis rujukan disalin, rujukan kepada struktur data asas disalin, bukan struktur data itu sendiri. Ini mengoptimumkan penggunaan memori dan mengurangkan overhed penyalinan.
Contoh dengan Slices:
Pertimbangkan tatasusunan dan kepingan:
type Array [5]int type Slice []int
Suatu tatasusunan ialah jenis nilai, manakala kepingan ialah jenis rujukan. Jika kita menetapkan tatasusunan kepada tatasusunan lain:
arr1 := Array{1, 2, 3, 4, 5} arr2 := arr1
arr2 ialah salinan bebas arr1. Walau bagaimanapun, jika kita menetapkan kepingan kepada kepingan lain:
slice1 := Slice{1, 2, 3, 4, 5} slice2 := slice1
slice2 berkongsi struktur data asas dengan slice1.
Faedah:
Rujukan semantik dalam Go menyediakan:
Atas ialah kandungan terperinci Adakah Golang Mencapai Pengoptimuman Bergerak seperti Semantik Melalui Semantik Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!