新聞中心
一個布爾類型的值只有兩種:true 或 false。if 和 for 語句的條件部分都是布爾類型的值,并且
==和
<等比較操作也會產(chǎn)生布爾型的值。

一元操作符
!對應(yīng)邏輯非操作,因此
!true的值為 false,更復(fù)雜一些的寫法是
(!true==false) ==true,實際開發(fā)中我們應(yīng)盡量采用比較簡潔的布爾表達式,就像用 x 來表示
x==true。
var aVar = 10 aVar == 5 // false aVar == 10 // true aVar != 5 // true aVar != 10 // false
Go語言對于值之間的比較有非常嚴(yán)格的限制,只有兩個相同類型的值才可以進行比較,如果值的類型是接口(interface),那么它們也必須都實現(xiàn)了相同的接口。如果其中一個值是常量,那么另外一個值可以不是常量,但是類型必須和該常量類型相同。如果以上條件都不滿足,則必須將其中一個值的類型轉(zhuǎn)換為和另外一個值的類型相同之后才可以進行比較。
布爾值可以和 &&(AND)和 ||(OR)操作符結(jié)合,并且有短路行為,如果運算符左邊的值已經(jīng)可以確定整個布爾表達式的值,那么運算符右邊的值將不再被求值,因此下面的表達式總是安全的:
s != "" && s[0] == 'x'
其中 s[0] 操作如果應(yīng)用于空字符串將會導(dǎo)致 panic 異常。
因為
&&的優(yōu)先級比
||高(&& 對應(yīng)邏輯乘法,|| 對應(yīng)邏輯加法,乘法比加法優(yōu)先級要高),所以下面的布爾表達式可以不加小括號:
if 'a' <= c && c <= 'z' ||
'A' <= c && c <= 'Z' ||
'0' <= c && c <= '9' {
// ...ASCII字母或數(shù)字...
}
布爾值并不會隱式轉(zhuǎn)換為數(shù)字值 0 或 1,反之亦然,必須使用 if 語句顯式的進行轉(zhuǎn)換:
i := 0
if b {
i = 1
}
如果需要經(jīng)常做類似的轉(zhuǎn)換,可以將轉(zhuǎn)換的代碼封裝成一個函數(shù),如下所示:
// 如果b為真,btoi返回1;如果為假,btoi返回0
func btoi(b bool) int {
if b {
return 1
}
return 0
}
數(shù)字到布爾型的逆轉(zhuǎn)換非常簡單,不過為了保持對稱,我們也可以封裝一個函數(shù):
// itob報告是否為非零。
func itob(i int) bool { return i != 0 }
Go語言中不允許將整型強制轉(zhuǎn)換為布爾型,代碼如下:
var n bool fmt.Println(int(n) * 2)
編譯錯誤,輸出如下:
cannot convert n (type bool) to type int
布爾型無法參與數(shù)值運算,也無法與其他類型進行轉(zhuǎn)換。
網(wǎng)站名稱:創(chuàng)新互聯(lián)GO教程:Go語言bool類型(布爾類型)
URL網(wǎng)址:http://m.5511xx.com/article/cccooce.html


咨詢
建站咨詢
