[TOC]
## **1:基本介紹**
一、布爾類型也叫bool類型,boll類型一般只容許取True,False
一、布爾類型只占一個字節
二、bool類型用于流程控制
## **2:案例演示:**
注意:bool類型只占用一個字節,bool類型只能取true/false
```
package main
import (
"fmt"
)
func main(){
sum := true
res := false
fmt.Println("sum=",sum,"res=",res)
}
```
**運行結果:**
```
sum= true res= false
```
一個布爾類型的值只有兩種:true 或 false。if 和 for 語句的條件部分都是布爾類型的值,并且`==`和`<`等比較操作也會產生布爾型的值。
一元操作符`!`對應邏輯非操作,因此`!true`的值為 false,更復雜一些的寫法是`(!true==false) ==true`,實際開發中我們應盡量采用比較簡潔的布爾表達式,就像用 x 來表示`x==true`。
~~~
var aVar = 10aVar == 5 // falseaVar == 10 // trueaVar != 5 // trueaVar != 10 // false
~~~
Go語言對于值之間的比較有非常嚴格的限制,只有兩個相同類型的值才可以進行比較,如果值的類型是接口(interface),那么它們也必須都實現了相同的接口。如果其中一個值是常量,那么另外一個值可以不是常量,但是類型必須和該常量類型相同。如果以上條件都不滿足,則必須將其中一個值的類型轉換為和另外一個值的類型相同之后才可以進行比較。
布爾值可以和 &&(AND)和 ||(OR)操作符結合,并且有短路行為,如果運算符左邊的值已經可以確定整個布爾表達式的值,那么運算符右邊的值將不再被求值,因此下面的表達式總是安全的:
~~~
s != "" && s[0] == 'x'
~~~
其中 s\[0\] 操作如果應用于空字符串將會導致 panic 異常。
因為`&&`的優先級比`||`高(&& 對應邏輯乘法,|| 對應邏輯加法,乘法比加法優先級要高),所以下面的布爾表達式可以不加小括號:
~~~
if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' { // ...ASCII字母或數字...}
~~~
布爾值并不會隱式轉換為數字值 0 或 1,反之亦然,必須使用?if 語句顯式的進行轉換:
~~~
i := 0if b { i = 1}
~~~
如果需要經常做類似的轉換,可以將轉換的代碼封裝成一個函數,如下所示:
~~~
// 如果b為真,btoi返回1;如果為假,btoi返回0func btoi(b bool) int { if b { return 1 } return 0}
~~~
數字到布爾型的逆轉換非常簡單,不過為了保持對稱,我們也可以封裝一個函數:
~~~
// itob報告是否為非零。func itob(i int) bool { return i != 0 }
~~~
Go語言中不允許將整型強制轉換為布爾型,代碼如下:
~~~
var n boolfmt.Println(int(n) * 2)
~~~
編譯錯誤,輸出如下:
cannot convert n (type bool) to type int
布爾型無法參與數值運算,也無法與其他類型進行轉換。
- Golang語言之旅
- 第一章:初始小節以及安裝
- 一:Golang語言特性
- 二:Windows上安裝Go語言開發包
- 三:在Mac OS上安裝Go語言開發包
- 第二章:GO語言注意事項
- 一:Dos的常用指令
- 第三章:Go初識小菜
- 一:Go語言之變量與常量
- 二:Go內置值-引用類型
- 三:基本的數據類型
- 四:字符串(char)
- 五:布爾類型(bool)
- 六:字符串類型(string)
- 七:基本數據類型的默認值
- 八:基本數據類型的互相轉換
- 九:基本數據類型和string類型的相互轉換
- 十:Golang指針
- 十一:值類型和引用類型
- 十二:標識符和命名規范
- 十三:系統保留關鍵字and預定義標識符
- 十四:fmt常用方法解析
- 第四章:Go運算符
- 一:運算符的基本介紹
- 二:算術運算符
- 2.1:算數運算符細節
- 三:關系運算符
- 3.1:關系運算符細節
- 四:邏輯運算符
- 4.1:邏輯運算符細節及案例
- 五:Go賦值運算符
- 5.1:案例演示賦值運算符的基本使用
- 5.2:賦值運算符的特點
- 六:Go位運算符
- 七:其他運算符
- 八:運算符的優先級
- 九:控制臺輸入語句
- 十:進制
- 十一:位運算
- 第五章:流程控制大綱
- 一:if語句
- 二:switch語句
- 三:for循環
- 第六章:函數-包-錯誤處理
- 一:Go函數
- 二:Go包
- 三:匿名函數
- 四:閉包
- 五:函數defer
- 六:函數參數的傳遞方式
- 七:變量的作用域
- 八:時間和日期相關函數
- 九:new和recover異常
- 十:數組(Array)切片(Section)
- 十一:切片(slice)
- 十二:3 數組的排序和查找
- 第七章:Map
- 第一節:Map基礎認識
- 第二節:Map初始化和make
- 第三節:Map增刪改查
- 第四節:Map的切片
- 第五節:Map的注意事項
- 第八章:面向對象(上)
- 第一節:結構體(值類型)
- 第二節:方法
- 第三節:面向對象編程應用實例
- 第九章:面向對象(下)
- 第一節:面向對象之抽象
- 第二節:面向對象之繼承
- 第三節:面向對象之多態
- 第四節:接口
- 第十章:文件操作
- 第一節:文件基本介紹
- 第二季:寫文件實例操作
- 第三節:JSON
- 第十一章:單元測試
- 第一節:單元測試介紹
- 第二節:單元測試案例
- 第三節:單元測試總結
- 第四節:單元測試案例
- 第十二章:goroutine和channel
- 第一節:goroutine基本介紹
- 第二節:goroutine入門案例
- 第三節:goroutione調度模型
- 第四節:Golang設置運行的CPU數量
- 第十二章:channel
- 第一節:channel基本介紹
- 第二節:channel基本使用
- 第三節:channel案例演示
- 第四節:channel 使用的注意事項
- 第五節:channel練習題
- 第六節:channel的遍歷和關閉
- 第七節:goroutione和channel結合
- 第八節:channel細節處理
- 第十二章:并發模式
- 第十三章:反射reflect
- 第一節:反射基本介紹
- 第二節:反射重要的函數和概念
- 第三節:反射快速入門案例
- 第四節:反射注意事項
- 第五節:反射練習題
- 第六節:反射最佳實踐