Rumah pembangunan bahagian belakang Golang Jenis data rujukan dan jenis data nilai dalam bahasa Go

Jenis data rujukan dan jenis data nilai dalam bahasa Go

Jun 01, 2023 am 09:12 AM
pergi bahasa jenis rujukan jenis nilai

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.

  1. Slice

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.

  1. Pemetaan

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.

  1. Saluran

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.

  1. Antaramuka

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.

  1. Penunjuk

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.

  1. Jenis Boolean

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.

  1. Jenis integer

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.

  1. Jenis titik terapung

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.

  1. Jenis nombor kompleks

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.

  1. Jenis aksara

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.

  1. String

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.

  1. Array

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Kenapa perlu lulus petunjuk apabila menggunakan perpustakaan Go dan Viper? Apr 02, 2025 pm 04:00 PM

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...

Kenapa semua nilai menjadi elemen terakhir apabila menggunakan bahasa dalam bahasa Go untuk melintasi kepingan dan menyimpan peta? Kenapa semua nilai menjadi elemen terakhir apabila menggunakan bahasa dalam bahasa Go untuk melintasi kepingan dan menyimpan peta? Apr 02, 2025 pm 04:09 PM

Mengapa lelaran peta di GO menyebabkan semua nilai menjadi elemen terakhir? Dalam bahasa Go, ketika berhadapan dengan beberapa soalan wawancara, anda sering menemui peta ...

See all articles