一、特殊常量iota
1、iota是特殊常量,可以理解為是一個可被編譯器修改的常量。
2、iota中有一個計數(shù)器,會自動加1,自增類型默認是int類型。
3、如果中斷了iota則必須顯示恢復。參考示例二。
4、iota簡化了const類型的定義。
5、每次出現(xiàn)const的時候,iota歸零。
示例一:
const (
err1 = iota
err2 = iota
err3 = iota
err99 = iota
)
const (
err1 = iota
err2
err3
err99
)
運行結果:
0 1 2 3
0 1 2 3
兩個const打印出來的結果都是相同的,當err2及其之后的err常量未定義時,會沿用err1的常量值iota,iota會自動遞增。
示例二:
const (
err1 = iota+1
err2
err3 = "haha"
err99
err100 = iota
)
運行結果:
1 2 haha haha 4
為什么會出現(xiàn)這種結果呢?
答:因為當iota經(jīng)過err3和err99時,雖然這兩個都是"haha",但是實際上iota經(jīng)過它們時也是會繼續(xù)增加計數(shù)器的。所以整個err1到err100的iota計數(shù)是0、1、2、3、4,只是err1和err2都是iota+1所以展現(xiàn)出來的值是1、2。就算將err3的"haha"替換成整數(shù)50,結果也是不變的,并不會影響iota計數(shù)。
二、匿名函數(shù)
package main
import (
"fmt"
)
func a() (int, bool) {
return 0, false
}
func main() {
// 匿名變量的定義
var _ int
// 正常使用
r, ok := a()
if ok {
fmt.Println(r)
}
// 匿名變量的使用
_, ok = a()
if ok {
return
}
}
注意上面這段代碼,第一段r, ok := a()中,r變量使用了Println打印了,即視為定義后已使用。而第二段_, ok = a()中,代替了原來r變量的位置,因為在后續(xù)中,我們不需要使用這個_變量,所以使用匿名變量,否則r定義后未使用在Go中是會報錯的。
可以理解匿名函數(shù)_其實是一個占位符。
三、變量的作用域
全局變量在任何一個函數(shù)中都能使用。
局部變量只能在自己所屬的函數(shù)中使用。
if a == "aa" {
b := "11"
}
fmt.Println(b)
請注意,Println是無法成功打印b變量的,因為b只是if a == “aa” {}中的局部變量。
外部訪問需要這樣做:文章來源:http://www.zghlxwxcb.cn/news/detail-752982.html
package main
import (
"fmt"
)
var my string
var a string
func main() {
if a == "aa" {
my = "dsfds"
} else {
my = "2313431"
}
fmt.Println(my)
}
在局部作用域外定義變量,然后在局部作用域內(nèi)賦值,這樣處理就能成功打印my的值了~文章來源地址http://www.zghlxwxcb.cn/news/detail-752982.html
到了這里,關于一、Go基礎知識2、iota、匿名變量與變量作用域的小細節(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!