Go語言基礎——數據類型和運算符
基礎數據類型
- 在GO語言中,還有很多其它的類型,如下:
布爾類型
- 布爾類型的變量取值要麼是真(true),要麼是假(false),用bool關鍵字來進行定義。
例:
package main
import "fmt"
func main() {
/* var a bool
//bool類型一般用於條件判斷
a = true
fmt.Println(a) */
//自動推導類型創建bool類型變量
a := true
//fmt.Println(a)
fmt.Printf("%T\n", a)
b := 10
fmt.Printf("%T\n", b)
}
- %t是一個佔位符,表示輸出一個變量對應的數據類型
整型
var a int = 10
b := 10
- int類型會根據操作系統位數不同在內存中佔的字節也不同
- 在64位操作系統下定義整型變量:int64 64(單位:位)
浮點型
- 浮點型數據分爲:單精度浮點型 float32(小數位數爲7位),雙精度浮點型 float64(小數位數爲15位)
- float64比float32更精確
- 通過自動推導類型創建的浮點型變量,默認類型我float64
例:
func main() {
var a float64 = 1234.456
//保留六位小數數據更精準
fmt.Printf("%f\n", a)
}
字符類型
- byte字符類型,同時也是uint8的別名
func main() {
var a byte = 'a'
//所以的字符都對應ASCII中的整型數據
//fmt.Println(a)
fmt.Printf("%c",a)
}
- %c是一個佔位符,表示打印輸出一個字符
- 計算機不能直接存儲字符類型,只能轉成數字存儲。
- 計算機是根據’ASCII’碼來存儲。
將小寫字母轉換成大寫字母輸出
func main() {
var a byte = 'a'
fmt.Printf("%c",a-32)
}
轉義字符
\n
換行\"
表示一個英文半角的雙引號\0
對應ASCII值爲0,用於字符串的結束標準\t
表示一個tab鍵的空格,一次跳8個空格
字符串類型
- 用單引號括起來的單個字符是字符類型,用雙引號括起來的字符是字符串類型。
例:
func main() {
var a string = "blank"
fmt.Printf("%s", a)
}
- len函數:用來計算字符串字符個數,不包括\0,返回值爲int類型
例:
func main() {
a := "hello world"
count := len(a)
fmt.Println(count)
}
注:在go語言中,一個漢字佔3個字節,爲了和linux進行統一處理
- 字符串連接
例:
func main() {
str1 := "CSDN:"
str2 := "DTRblank"
str3 := str1 + str2
fmt.Println(str3)
}
fmt輸出輸入
- go語言中的格式化輸入輸出:
- 二進制不能在go語言中直接表示
- 八進制數據是以0開頭,最大值爲7
- 十六進制數據是以0x開頭
常量
- 常量存儲一直不會發生變化的數據
- 常量可以參與程序的計算
func main() {
//常量的定義
const a int = 10
b := a + 10
fmt.Println(a)
}
- 常量不允許左值賦值
a = a + 10 //err
a = 100 //err
- go語言中常量的地址不允許訪問
- 常量必須定義
例:
package main
import "fmt"
func main() {
//計算圓的面積和周長
// PI 3.14
const PI float64 = 3.14
var r float64
fmt.Scan(&r)
s := PI * r * r
l := 2 * PI * r
fmt.Printf("面積:%.2f\n", s)
fmt.Printf("面積:%.2f\n", l)
}
iota枚舉
- 常量聲明可以使用iota常量生成器初始化,它用於生成一組以相似規則初始化的常量,但是不用每行都寫一遍初始化表達式。
- 在定義iota枚舉時,可以自定義賦值
func main() {
//iota枚舉
const(
a = iota //0
)
fmt.Printf("a=%d\n",a)
}
注:在一個const聲明語句中,在第一個聲明的常量所在的行,iota將會被置爲0,然後在每一個有常量聲明的行加一。
運算符
算術運算符
例:
func main() {
a := 10
a++ //11
fmt.Println(a)
}
- a++ = a + 1
注:
1.取餘運算符除數不能爲0
2.取餘運算符不能對浮點型使用
3.GO語言中沒有前自增,這是與其它編程語言不同的地方。
4.自增自減可以對浮點型進行運算,但是不能對常量進行自增自減運算
5.自增自減不能出現在表達式中。二義性,在不同操作系統中運算方式不同,結果可能會產生偏差。
例:
a = a ++ + a-- //err
類型轉換
數據類型(變量)
數據類型(表達式)
例:
func main() {
a, b, c := 0, 0, 0
fmt.Scan(&a, &b, &c)
sum := a + b + c
fmt.Println(sum)
fmt.Printf("%.2f", float64(sum)/3)
}
- int8 --> int16 --> int32 -->int64
- float32–> float64
- 在類型轉換時建議低類型轉成高類型,保證數據精度
- 高類型轉換低類型,可能會丟失精度,數據溢出,符號發生變化
注:Go語言中不允許隱式轉換,所有類型轉換必須顯式聲明(強制轉換),而且轉換隻能發生在兩種相互兼容的類型之間
例:
func main() {
var ch byte = 79
//var a int = ch //err
var a int = int(ch)
}
賦值運算符
- 賦值運算符
=
=
號是賦值運算符,不是數學義意上的相等
關係運算符
- 關係運算的結果是布爾類型的。
- bool值只有兩個。真:true,假:false
- GO語言中常見的關係運算符如下:
邏輯運算符
- 有邏輯運算符連接的表達式叫做邏輯表達式
- 邏輯表達式的結果同樣也是bool類型
- 常見的邏輯運算符如下:
- 邏輯與 && (表達式1&&表達式2) 同真爲真,其餘爲假
- 邏輯或 ||(表達式1&&表達式2) 同假爲假,其餘爲真
- 邏輯非 ! (表達式1&&表達式2) 非真爲假,非假爲真
注:邏輯與的優先級高於邏輯或
其他運算符
運算符優先級
- 一元運算符(一些只需要一個操作數的運算符稱爲一元運算符(或單目運算符)。)擁有最高的優先級,二元運算符的運算方向均是從左至右。
- 下表列出了所有運算符以及它們的優先級,由上至下代表優先級由高到低: