Rumah > Artikel > pembangunan bahagian belakang > Jenis data rujukan dan jenis data nilai dalam bahasa Go
Bahasa Go ialah bahasa yang ditaip kuat, di mana jenis data boleh dibahagikan kepada dua jenis: jenis data rujukan dan jenis data nilai. Jenis data rujukan dan jenis data nilai sedikit berbeza dalam penggunaan. Mari kita lihat dengan lebih dekat kedua-dua jenis data ini.
1. Jenis data rujukan
Jenis data rujukan dalam bahasa Go termasuk kepingan, peta, saluran, antara muka dan penunjuk. Untuk jenis data rujukan, nilai pembolehubah bukan sahaja nilainya sendiri, tetapi penunjuk kepada alamat memori. Oleh itu, apabila kita mengisytiharkan pembolehubah jenis rujukan, alamat memori diperuntukkan kepadanya dan disimpan pada timbunan, dan ruang yang ditunjukkan oleh alamat memori disimpan dalam timbunan.
Slice ialah tatasusunan dinamik yang boleh membesar atau mengecut secara automatik mengikut keperluan. Mengambil kepingan rentetan sebagai contoh, pengisytiharan dan permulaan adalah seperti berikut:
var s1 []rentetan // Isytiharkan hirisan
s1 = make([]string, 3) // Gunakan make berfungsi untuk memulakan hirisan
s2 := []rentetan{"foo", "bar", "baz"} // Istiharkan hirisan secara langsung dan mulakannya
Dalam bahasa Go, hirisan ialah penunjuk kepada data asas dan mengandungi Panjang dan kapasiti kepingan, yang merupakan nilai yang dikembalikan oleh fungsi len dan cap. Apabila bilangan elemen dalam kepingan melebihi kapasiti, bahasa Go akan mengagihkan semula ruang memori yang lebih besar dan kemudian menyalin elemen asal ke ruang memori baharu.
Pemetaan ialah koleksi pasangan nilai kunci yang tidak tersusun, ditakrifkan menggunakan kata kunci peta dalam bahasa Go. Mengambil peta rentetan sebagai contoh, pengisytiharan dan permulaan adalah seperti berikut:
m1 := make(map[string]int) // Gunakan fungsi make untuk memulakan pemetaan
m2 := map [string]int{" foo": 1, "bar": 2, "baz": 3} // Istiharkan secara langsung pemetaan dan mulakan
Dalam bahasa Go, pemetaan juga merupakan penunjuk kepada data asas, dan juga mengandungi kuantiti elemen pemetaan. Apabila bilangan elemen dalam peta melebihi kapasiti memori asas, bahasa Go akan memperuntukkan semula ruang memori yang lebih besar.
Saluran ialah cara untuk memindahkan data antara berbilang Ctrip Gunakan fungsi make dan <-operator untuk mengisytiharkan saluran dalam bahasa Go. Mengambil saluran rentetan sebagai contoh, pengisytiharan dan permulaan adalah seperti berikut:
var ch1 chan string // Isytihar saluran
ch1 = make(chan string) // Gunakan fungsi make untuk memulakan saluran
ch2 := make(chan string, 3) // Gunakan fungsi make untuk memulakan saluran penimbal
ch1 <- "foo" // Hantar data ke saluran
data := <-ch1 // Baca daripada saluran Dapatkan data
Dalam bahasa Go, saluran juga merupakan penunjuk kepada data asas, yang turut mengandungi kapasiti saluran dan bilangan elemen semasa. Apabila bilangan elemen dalam saluran melebihi kapasiti, bahasa Go akan menyekat Ctrip semasa dan menunggu Ctrips lain mengambil elemen tersebut.
Antara muka ialah jenis data yang mentakrifkan satu set kaedah antara muka. Mengambil antara muka mudah sebagai contoh, pengisytiharan adalah seperti berikut:
taip antara muka Pemanggil {
Call() bool
}
Dalam bahasa Go, antara muka juga penunjuk kepada data asas, menunjuk kepada struktur apabila melaksanakan antara muka. Antara muka adalah lebih pantas daripada jenis nilai kerana kaedah antara muka tidak disalin oleh operasi pelaksanaan.
Penunjuk ialah pembolehubah yang mengandungi alamat memori & dan * operator digunakan untuk mengisytiharkan dan menggunakan penunjuk dalam bahasa Go. Ambil penuding kepada pembolehubah jenis rentetan sebagai contoh Pengisytiharan dan penggunaannya adalah seperti berikut:
var p1 *rentetan // Isytiharkan penunjuk
s1 := "foo"
p1 = &s1. // Tukar penuding Titik kepada alamat memori pembolehubah rentetan
fmt.Println("s1:", s1, "p1:", *p1) // Dapatkan nilai pembolehubah rentetan melalui penuding
Dalam bahasa Go, Pembolehubah yang ditunjuk oleh penuding perlu diisytiharkan terlebih dahulu. Tiada pengendali penunjuk dalam bahasa Go yang serupa dengan bahasa C.
2. Jenis data nilai
Jenis data nilai dalam bahasa Go termasuk boolean, integer, titik terapung, nombor kompleks, aksara, rentetan dan tatasusunan. Untuk pembolehubah jenis nilai, nilai pembolehubah dan pembolehubah itu sendiri disimpan pada tindanan.
Jenis Boolean hanya mempunyai dua nilai dalam bahasa Go: benar dan palsu. Oleh kerana jenis Boolean hanya mempunyai satu bait, ia boleh mengurangkan jejak memori dengan berkesan apabila digunakan dalam kuantiti yang banyak.
Jenis integer bagi bahasa Go dibahagikan kepada jenis integer bertanda dan jenis integer tidak bertanda dibahagikan kepada int8, int16, int32 dan int64 , jenis integer tidak bertanda dibahagikan kepada uint8, uint16, uint32 dan uint64. Apabila menggunakan, adalah disyorkan untuk menggunakan jenis int dan uint sebanyak mungkin, kerana lebar bait kedua-dua jenis ini adalah sama pada platform yang berbeza.
Jenis titik terapung dalam bahasa Go dibahagikan kepada dua jenis: float32 dan float64. lalai ialah jenis float64. Apabila menggunakannya, adalah disyorkan untuk menggunakan jenis float64 apabila boleh, kerana kelajuan pengiraan dan ketepatan jenis ini adalah lebih tinggi daripada jenis float32.
Jenis nombor kompleks menggunakan jenis complex64 dan complex128 dalam bahasa Go untuk mewakili nombor nyata dan nombor khayalan. Sebagai contoh, jenis complex64 menunjukkan bahawa kedua-dua bahagian nyata dan bahagian khayalan ialah nombor kompleks jenis float32.
Jenis aksara diwakili oleh rune dalam bahasa Go Julat jenis rune dan pengenalan jenis int32 adalah sama. Dalam bahasa Go, anda boleh menggunakan petikan tunggal untuk mewakili aksara.
String ialah jujukan aksara baca sahaja dalam bahasa Go. Petikan berganda digunakan untuk mewakili rentetan dalam bahasa Go. Rentetan dalam bahasa Go dikodkan UTF-8.
Array ialah jenis data tetap dengan jenis elemen yang sama dalam bahasa Go. Apabila menggunakannya, anda perlu mengisytiharkan panjang dan jenis elemen tatasusunan terlebih dahulu.
Kesimpulan
Jenis data rujukan dan jenis data nilai sedikit berbeza dalam penggunaan dalam bahasa Go Melalui perbandingan, didapati bahawa jenis data nilai disimpan pada tindanan dan lokasi pembolehubah dalam ingatan tidak berubah dari semasa ke semasa (jika operasi penunjuk tidak digunakan), dan nilai pembolehubah jenis data rujukan ialah penunjuk yang menunjuk ke alamat memori yang diperuntukkan dalam timbunan. Dalam penggunaan sebenar, jenis data rujukan dan jenis data nilai harus digunakan secara rasional untuk mencapai prestasi dan kesan yang optimum.
Atas ialah kandungan terperinci Jenis data rujukan dan jenis data nilai dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!