筆記地址:https://www.cnblogs.com/ghj1976/archive/20...
常量的定義
- 常量的值在編譯時就已經確定
- 常量的定義格式與變數基本相同
- 等號右側必須是常量或者常量表示式
- 常量表示式中的函式必須是內建函式
示例1:
package main
import(
"fmt"
)
const a int = 1
const b = "A"
const (
c = a
d = a + 1
e = 3
)
func main() {
fmt.Println(a)
fmt.Println(d)
}
示例2:
package main
import(
"fmt"
)
const a, b, c = 1,2,'A'
const (
d,e,f = 1,2,3
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
//1
//2
//65 為什麼是65??
示例3:
在定義常量組時,如果不提供初始值,則表示將使用上行的表示式
package main
import(
"fmt"
)
const (
a =1
b
c
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
//1
//1
//1
示例4:
等號右側必須是常量或者常量表示式,不能是執行時才能取得的變數
sss 在編譯時不存在
package main
import(
"fmt"
)
var sss = "123"
const (
a = len(sss)
b
c
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
// const initializer len(sss) is not a constant
//常量的初始值不是一個常量
調整後
package main
import(
"fmt"
)
const (
a = "123"
b = len(a)
c
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
//123
//3
//3
錯誤示範:
const (
a, b = 1, '2'
c
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
//extra expression in const declaration
const宣告中的額外表示式
在定義常量組時,如果不提供初始值,則表示將使用上行的表示式,但是個數必須一致
正確示範:
const (
a, b = 1, '2'
c , d
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
//1
//50
//1
問題:fmt.Println(b)得到的為什麼是50呢?
const (
a, b = 1, "2"
c , d
)
func main() {
fmt.Println(b)
}
//2
在Go中單引號和雙引號的區別
常量的初始化規則與列舉
- 在定義常量組時,如果不提供初始值,則表示將使用上行的表示式
- 使用相同的表示式不代表具有相同的值
- iota是常量的計數器,從0開始,組中每定義1個常量自動遞增1
- 通過初始化規則與iota可以達到列舉的效果
- 每遇到一個const關鍵字,iota就會重置為0
示範1:
iota是常量的計數器,從0開始,組中每定義1個常量自動遞增1
const (
a = "A"
b
c = iota
d = 'A'
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
//A
//A
//2 計數器從0開始,每定義一次變數就加一,這裡是第三次呼叫,是2
//65 單引號和雙引號的區別
示例2:
const (
a = "A"
b
c = iota
d = 'A'
)
const (
e
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
// missing value in const declaration
變數沒有定義,因為沒有上一行
運算子
==Go中的運算子均是從左至右結合==
==優先順序(從高到低)==
^ ! (一元運算子)
* / % << >> & &^
+ - | ^ (二元運算子)
== != < <= >= >
<- (專門用於channel)
&&
||
示範1:
1 << 10
1左移10位, = 1024
0000 0001
與或非等
6 : 0110
10: 1011
& 0010 兩個都為1才是1
| 1111 有一個是1就為1
^ 1101 不同的時候才為1
&^ 0100 如果在第二個數上的一位上面是1,就要把第一個數上的一位強制改為0
示例3:&&
func main() {
a := 0
if a > 0 && (10/a) > 1 {
fmt.Println("ok")
}
}
&&的作用:
a>0 成立才執行後面的,不成立就不執行
作業
請嘗試結合常量的iota與<<運算子實現計算機儲存單位的列舉
package main
import "fmt"
const (
B float64 = 1 << (iota * 10)
KB
MB
GB
)
func main() {
fmt.Println(GB)
}
//1.073741824e+09