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

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


咨詢
建站咨詢
