2.3 常量
對變數、常量、函式、自定義型別進行命名,通常優先選用有實際含義,易於閱讀和理解的字母或單詞組合。
命名建議:
package main
func
main()
println
(c)}
符號名字首字母大寫決定了其作用域。首字母大寫的為匯出成員,可被包外引用,而小寫則僅能在包內使用。
空識別符號
「_」通常作為忽略佔位符使用,可以作為表示式左值,無法讀取內容。
package main
import
("strconv"
)func
main()
//空識別符號可用來臨時規避編譯器對未使用變數和匯入包的錯誤檢查。但請注意,它是預置成員,不能重新定義。
常量:表示執行時恆定不可改變的值,通常是一些字面量。使用常量就可用乙個易於閱讀理解的識別符號號來代替「魔法數字」,也使得在調整常量值時,無須修改所有引用**。常量值必須是編譯期可確定的字元、字串、數字或布林值。可指定常量型別,或由編譯器通過初始化值推斷其型別。
const x,y int
=123
,0x22
const s =
"hello ,world"
const c =
'我'//rune (unicode code point)
const
( i,f =1,
0.12
// int, float64(預設)
b =
false
)
可在函式**塊中定義常量,不曾使用的常量不會引發編譯錯誤。
package main
func
main()
}// 輸出
// 123
// anc
如果顯示指定型別,必須確保常量左右值型別一致,需要時可做顯示轉換。右值不能超出常量型別取值範圍,否則會引發溢位錯誤。
const
( x,y int=99
,-999 b byte
=byte
(x)// x 被指定為int 型別,須顯示轉換為byte型別
n =
uint8
(y)// 錯誤: constant -999 overflows uint8
)
常量值也可以是某些編譯器能計算出結果的表示式,如unsafe.sizeof``、len
、cap
等
package main
import
("unsafe"
)const
( ptrsize =unsafe.
sizeof
(uintptr(0
))strsize =
len(
"hello, world"
))
在常量組中如不指定型別和初始化值,則與上一行非空常量右值(表示式文字)相同。
package main
import
("fmt"
)func
main()
// 輸出
// uint16 ,120
// string ,abc
列舉
go並沒有明確意義上的enum
定義,不過可以借助iota
識別符號實現一組自增常量值來實現列舉型別。
const
( x =
iota
// 0
y // 1
z // 2
)const(_
=iota
//0 kb =
1<<(10
*iota
)// 1<<(10*1)
mb // 1<<(10*2)
gb // 1<<(10*3)
)
自增作用範圍為常量組。可在多常量定義中使用多個iota
,它們各自單獨計數,只須確保組中每行常量的列數量相同即可。
const(_
,_=iota
,iota*10
a,b // 1,1*10
c,d // 2,2*10
)
如中斷iota
自增,則必須顯示恢復。且後續自增值按行序遞增。
const
( a =
iota
// 0
b // 1
c =
100// 100
d // 100(與上一行常量右值表示式相同)
e =
iota
// 4(恢復iota自增,計數包括c,d)
f //5
)
在實際編碼中,建議用自定義型別實現用途明確的列舉型別。但這並不能將取值範圍限定在預定義的列舉值內。
type color byte
// 自定義型別
const
( black color =
iota
//指定常量型別
redblue
)func
test
(c color)
func
main()
面試題:
常量除「唯讀」外,和變數究竟有什麼不同?
var x=
0x100
const y=
0x200
func
main()
不同於變數在執行期分配儲存記憶體(非優化狀態),常量通常會被編譯器在預處理階段直接展開,作為指令資料使用。
數字常量不會分配儲存空間,無須像變數那樣通過記憶體定址來取值,因此無法獲取位址。
Go語言學習筆記 常量
常量是程式執行時,不會改變的量 go中常量的宣告方式和變數類似,有組合宣告,並行宣告,普通宣告 定義常量 const pi 3.14 這裡並沒有宣告變數型別,編譯器會自行判斷 dateformat string yyyy mm dd hh mm ss format 不提供資料型別和初始化值得常量視作...
Go語言學習筆記三 常量
常量就是在宣告後不能再修改的量。const x int 100 const y string abc const z abc 看上去與變數的定義差不多,就是把var變成了const關鍵字。const yellow 1 red 2 blue 3 這個iota非常奇葩,從0開始,每次使用一次就自動增加一...
go語言學習筆記2 變數 常量
一 變數 1 變數定義 var var 變數名 資料型別 example var a int 2 變數初始化 var a int 10 或者 a 10 自動推到型別 3 變數賦值 var a int a 10 多重賦值 i,j j,i 4 匿名變數 使用 func test a,b,c int re...