Pembolehubah bahasa Go
Pembolehubah berasal daripada matematik dan merupakan konsep abstrak dalam bahasa komputer yang boleh menyimpan hasil pengiraan atau mewakili nilai. Pembolehubah boleh diakses dengan nama pembolehubah.
Nama pembolehubah bahasa Go terdiri daripada huruf, nombor dan garis bawah, dan huruf pertama tidak boleh menjadi nombor.
Bentuk umum pengisytiharan pembolehubah adalah menggunakan kata kunci var:
var identifier type
Pengisytiharan pembolehubah
Cara pertama ialah dengan menentukan jenis pembolehubah Jika tiada nilai ditetapkan selepas pengisytiharan, nilai lalai akan digunakan.
var v_name v_type v_name = value
Kaedah kedua ialah menentukan jenis pembolehubah berdasarkan nilai.
var v_name = value
Kaedah ketiga, omit var, note: = Pembolehubah di sebelah kiri sepatutnya tidak diisytiharkan, jika tidak, ia akan menyebabkan ralat penyusunan. Contoh
v_name := value // 例如 var a int = 10 var b = 10 c : = 10
adalah seperti berikut:
package main var a = "w3cschoolphp中文网" var b string = "w3cschool.cc" var c bool func main(){ println(a, b, c) }
Hasil pelaksanaan contoh di atas ialah:
w3cschoolphp中文网 w3cschool.cc false
Pengisytiharan berbilang pembolehubah
//类型相同多个变量, 非全局变量 var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3 var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要显示声明类型,自动推断 vname1, vname2, vname3 := v1, v2, v3 //出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误 // 这种因式分解关键字的写法一般用于声明全局变量 var ( vname1 v_type1 vname2 v_type2 )
Contohnya adalah seperti berikut:
package main var x, y int var ( // 这种因式分解关键字的写法一般用于声明全局变量 a int b bool ) var c, d int = 1, 2 var e, f = 123, "hello" //这种不带声明格式的只能在函数体中出现 //g, h := 123, "hello" func main(){ g, h := 123, "hello" println(x, y, a, b, c, d, e, f, g, h) }
Hasil pelaksanaan contoh di atas ialah:
0 0 0 false 1 2 123 hello 123 hello
Jenis nilai dan jenis rujukan
Semua jenis asas seperti int, float, bool dan rentetan ialah jenis nilai, dan pembolehubah jenis ini boleh digunakan terus Menunjukkan kepada nilai yang disimpan dalam ingatan:
Apabila menggunakan tanda sama =
untuk menetapkan nilai satu pembolehubah kepada yang lain pembolehubah, seperti: j = i
, i sebenarnya disimpan dalam ingatan Nilai disalin:
Anda boleh menggunakan &i untuk mendapatkan alamat memori pembolehubah i, contohnya: 0xf840000040 (alamat mungkin berbeza setiap kali). Nilai pembolehubah jenis nilai disimpan pada timbunan.
Alamat memori akan berbeza-beza bergantung pada mesin malah program yang sama akan mempunyai alamat memori yang berbeza selepas dilaksanakan pada mesin yang berbeza. Kerana setiap mesin mungkin mempunyai susun atur memori yang berbeza, dan peruntukan lokasi juga mungkin berbeza.
Data yang lebih kompleks biasanya memerlukan penggunaan berbilang perkataan, dan data ini biasanya disimpan menggunakan jenis rujukan.
Pembolehubah jenis rujukan r1 menyimpan alamat memori (nombor) di mana nilai r1 terletak, atau lokasi perkataan pertama dalam alamat memori.
Alamat memori ini dipanggil penunjuk, dan penunjuk ini sebenarnya disimpan dalam perkataan lain.
Berbilang perkataan yang ditunjuk dengan penunjuk jenis rujukan yang sama boleh berada dalam alamat memori berturut-turut (susun atur memori adalah berterusan), yang juga merupakan bentuk storan yang paling cekap dari segi pengiraan perkataan ini juga boleh tersebar Disimpan dalam ingatan , setiap perkataan menunjukkan alamat memori perkataan seterusnya.
Apabila menggunakan pernyataan tugasan r2 = r1, hanya rujukan (alamat) disalin.
Jika nilai r1 ditukar, maka semua rujukan kepada nilai ini akan menunjuk kepada kandungan yang diubah suai Dalam contoh ini, r2 juga akan terjejas.
Borang pendek, gunakan := pengendali tugasan
Kami tahu bahawa jenis pembolehubah boleh diabaikan apabila memulakan pembolehubah dan sistem akan membuat kesimpulan secara automatik. Ia sebenarnya kelihatan agak mengelirukan tulis kata kunci var dalam pernyataan pengisytiharan Ia berlebihan, jadi kita boleh menyingkatnya sebagai := 50 atau b := false.
Jenis a dan b (int dan bool) akan disimpulkan secara automatik oleh pengkompil.
Ini ialah bentuk pilihan penggunaan pembolehubah, tetapi ia hanya boleh digunakan dalam badan fungsi dan tidak boleh digunakan untuk pengisytiharan dan penetapan pembolehubah global. Gunakan operator := untuk mencipta pembolehubah baharu dengan cekap, dipanggil pengisytiharan permulaan.
Nota
Jika kita tidak boleh menggunakan pengisytiharan permulaan untuk pembolehubah dengan nama yang sama sekali lagi dalam blok kod yang sama, contohnya: a := 20 tidak dibenarkan, dan pengkompil akan The ralat tiada pembolehubah baharu di sebelah kiri := digesa, tetapi a = 20 adalah OK kerana ini memberikan nilai baharu kepada pembolehubah yang sama.
Jika anda menggunakan pembolehubah a sebelum mentakrifkannya, anda akan mendapat ralat kompil yang tidak ditentukan: a.
Jika anda mengisytiharkan pembolehubah setempat tetapi tidak menggunakannya dalam blok kod yang sama, anda juga akan mendapat ralat penyusunan, seperti pembolehubah a dalam contoh berikut:
func main() { var a string = "abc" fmt.Println("hello, world") }
Cuba susun ini Kod akan mendapat ralat diisytiharkan dan tidak digunakan.
Selain itu, hanya memberikan nilai kepada a tidak mencukupi, nilai itu mesti digunakan, jadi menggunakan
fmt.Println("hello, world", a)
akan mengalih keluar ralat.
Tetapi pembolehubah global dibenarkan untuk diisytiharkan tetapi tidak digunakan.
>Berbilang pembolehubah jenis yang sama boleh diisytiharkan pada baris yang sama, seperti:
var a, b, c int
Berbilang pembolehubah boleh ditetapkan pada baris yang sama, seperti:
a, b, c = 5, 7, "abc"
Baris di atas Diandaikan bahawa pembolehubah a, b dan c telah diisytiharkan, jika tidak, ia harus digunakan seperti ini:
a, b, c := 5, 7, "abc"
Nilai di sebelah kanan diberikan kepada pembolehubah di sebelah kiri dalam susunan yang sama, jadi nilai a ialah 5 dan nilai b ialah 7, dan nilai c ialah "abc".
Ini dipanggil tugasan selari atau serentak.
Jika anda ingin menukar nilai dua pembolehubah, anda boleh menggunakan a, b = b, a.
Pengecam ruang putih _ juga digunakan untuk membuang nilai, cth. nilai 5 dibuang dalam: _, b = 5, 7.
_ sebenarnya pembolehubah tulis sahaja, anda tidak boleh mendapatkan nilainya. Ini dilakukan kerana dalam Go anda perlu menggunakan semua pembolehubah yang diisytiharkan, tetapi kadangkala anda tidak perlu menggunakan semua nilai pulangan daripada fungsi.
Tugasan selari juga digunakan apabila fungsi mengembalikan berbilang nilai pulangan Sebagai contoh, val dan ralat err di sini diperoleh secara serentak dengan memanggil fungsi Func1: val, err = Func1(var1).