Variabel Go
Variabel adalah lokasi penyimpanan untuk menyimpan sebuah nilai memungkinkan nilai yang disimpan berubah secara dinamis saat runtime. Setiap mendeklarasikan variabel akan mengalokasikan sepotong memori untuk menyimpan nilai tipe yang sesuai pergi ke Referensi Manual-Variabel untuk melihat lebih banyak detail.
Deklarasi
Di Go deklarasi tipe adalah后置 deklarasi variabel akan menggunakan kata kunci var formatnya adalah var namaVariabel namaTipe aturan penamaan nama variabel harus mematuhi aturan penamaan identifier.
var intNum int
var str string
var char byteSaat ingin mendeklarasikan beberapa variabel dengan tipe yang sama hanya perlu menulis tipe sekali
var numA, numB, numC intSaat ingin mendeklarasikan beberapa variabel dengan tipe berbeda dapat menggunakan () untuk membungkus dapat ada beberapa ().
var (
name string
age int
address string
)
var (
school string
class int
)Sebuah variabel jika hanya dideklarasikan tanpa diberikan nilai maka nilai yang disimpan variabel adalah nilai nol dari tipe yang sesuai.
Penugasan
Penugasan akan menggunakan operator = misalnya
var name string
name = "jack"Juga dapat langsung memberikan nilai saat mendeklarasikan
var name string = "jack"Atau seperti ini juga dapat
var name string
var age int
name, age = "jack", 1Cara kedua setiap kali harus menentukan tipe dapat menggunakan sugar sintaks yang disediakan resmi inisialisasi variabel pendek dapat menghilangkan kata kunci var dan tipe后置 apa tipenya diserahkan kepada kompiler untuk menyimpulkan secara otomatis.
name := "jack" // Variabel tipe string.Meskipun dapat tidak menentukan tipe tetapi saat penugasan selanjutnya tipe harus tetap konsisten kode seperti di bawah ini tidak dapat dikompilasi.
a := 1
a = "1"Perlu juga diperhatikan inisialisasi variabel pendek tidak dapat menggunakan nil karena nil tidak termasuk tipe apa pun kompiler tidak dapat menyimpulkan tipenya.
name := nil // Tidak dapat dikompilasiDeklarasi variabel pendek dapat inisialisasi massal
name, age := "jack", 1Cara deklarasi variabel pendek tidak dapat digunakan untuk variabel yang sudah ada misalnya
// Contoh salah
var a int
a := 1
// Contoh salah
a := 1
a := 2Tetapi ada satu situasi kecuali yaitu saat memberikan nilai variabel lama sekaligus mendeklarasikan variabel baru misalnya
a := 1
a, b := 2, 2Kode seperti ini dapat dikompilasi variabel a diberikan nilai kembali sedangkan b adalah variabel yang baru dideklarasikan.
Dalam bahasa Go ada satu aturan yaitu semua variabel dalam fungsi harus digunakan misalnya kode di bawah ini hanya mendeklarasikan variabel tetapi tidak menggunakannya
func main() {
a := 1
}Maka saat dikompilasi akan error memberitahu Anda variabel ini dideklarasikan tetapi tidak digunakan
a declared and not usedAturan ini hanya berlaku untuk variabel dalam fungsi untuk variabel tingkat paket di luar fungsi tidak ada batasan ini kode di bawah ini dapat dikompilasi.
var a = 1
func main() {
}Anonim
Menggunakan garis bawah dapat表示 tidak memerlukan suatu variabel
Open(name string) (*File, error)Misalnya fungsi os.Open memiliki dua nilai pengembalian kita hanya ingin yang pertama tidak ingin yang kedua dapat menulis seperti di bawah ini
file, _ := os.Open("readme.txt")Variabel yang tidak digunakan tidak dapat dikompilasi saat Anda tidak memerlukan suatu variabel dapat menggunakan garis bawah _ untuk menggantikan.
Pertukaran
Di Go jika ingin menukar nilai dua variabel tidak perlu menggunakan pointer dapat menggunakan operator penugasan langsung melakukan pertukaran secara sintaksis terlihat sangat intuitif contohnya sebagai berikut
num1, num2 := 25, 36
num1, num2 = num2, num1Tiga variabel juga sama seperti ini
num1, num2, num3 := 25, 36, 49
num1, num2, num3 = num3, num2, num1Pikirkan kode di bawah ini ini adalah sepotong kode untuk menghitung deret Fibonacci nilai tiga variabel setelah perhitungan masing-masing adalah berapa
a, b, c := 0, 1, 1
a, b, c = b, c, a+bJawabannya adalah
1 1 1Anda mungkin bingung mengapa bukan
1 1 2Jelas a sudah diberikan nilai b mengapa hasil a+b masih 1? Go saat melakukan operasi penugasan beberapa variabel urutannya adalah menghitung nilai terlebih dahulu lalu memberikan nilai bukan menghitung dari kiri ke kanan.
a, b, c = b, c, a+bAnda mungkin mengira akan diuraikan menjadi kode di bawah ini
a = b
b = c
c = a + bTetapi sebenarnya akan menghitung nilai tiga angka a, b, c terlebih dahulu lalu memberikannya kepada mereka sama dengan kode di bawah ini
a, b, c = 1, 1, 0+1Saat melibatkan pemanggilan fungsi efek ini lebih jelas kita memiliki fungsi sum dapat menghitung nilai pengembalian dua angka
func sum(a, b int) int {
return a + b
}Melalui fungsi untuk melakukan penjumlahan dua angka
a, b, c := 0, 1, 1
a, b, c = b, c, sum(a, b)Hasil tidak berubah saat menghitung nilai pengembalian fungsi sum parameter masuknya tetap 0 dan 1
1 1 1Jadi kode seharusnya ditulis terpisah seperti ini.
a, b = b, c
c = a + bPerbandingan
Perbandingan antar variabel memiliki satu prasyarat yaitu tipe di antara mereka harus sama bahasa Go tidak ada konversi tipe implisit kode seperti di bawah ini tidak dapat dikompilasi
func main() {
var a uint64
var b int64
fmt.Println(a == b)
}Kompiler akan memberitahu Anda keduanya tipe tidak sama
invalid operation: a == b (mismatched types uint64 and int64)Jadi harus menggunakan konversi tipe paksa
func main() {
var a uint64
var b int64
fmt.Println(int64(a) == b)
}Sebelum ada generik fungsi built-in min max yang disediakan Go awal hanya mendukung floating point hingga versi 1.21 Go baru saja menulis ulang kedua fungsi built-in ini dengan generik sekarang dapat menggunakan fungsi min untuk membandingkan nilai minimum
minVal := min(1, 2, -1, 1.2)Menggunakan fungsi max untuk membandingkan nilai maksimum
maxVal := max(100, 22, -1, 1.12)Parameter mereka mendukung semua tipe yang dapat dibandingkan tipe yang dapat dibandingkan di Go adalah
- Boolean
- Angka
- String
- Pointer
- Channel (hanya mendukung判断 apakah sama)
- Array yang elemennya adalah tipe yang dapat dibandingkan (slice tidak dapat dibandingkan) (hanya mendukung判断 apakah sama) (hanya mendukung perbandingan antar array dengan panjang yang sama karena panjang array juga merupakan bagian dari tipe dan tipe berbeda tidak dapat dibandingkan)
- Struct yang field tipenya adalah tipe yang dapat dibandingkan (hanya mendukung判断 apakah sama)
Selain itu juga dapat melalui mengimpor pustaka standar cmp untuk判断 tetapi hanya mendukung parameter tipe terurut di Go tipe terurut built-in hanya angka dan string.
import "cmp"
func main() {
cmp.Compare(1, 2)
cmp.Less(1, 2)
}Blok Kode
Di dalam fungsi dapat melalui kurung kurawal membuat blok kode ruang lingkup variabel antar blok kode saling independen. Misalnya kode di bawah ini
func main() {
a := 1
{
a := 2
fmt.Println(a)
}
{
a := 3
fmt.Println(a)
}
fmt.Println(a)
}Outputnya adalah
2
3
1Variabel antar blok saling independen tidak terganggu tidak dapat diakses tetapi akan dipengaruhi oleh blok induk.
func main() {
a := 1
{
a := 2
fmt.Println(a)
}
{
fmt.Println(a)
}
fmt.Println(a)
}Outputnya adalah
2
1
1