日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go 常量定义

發布時間:2024/8/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 常量定义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義常量在各個語言中都是不可或缺的語法了. 而有些語言在常量的基礎上, 增加了枚舉類型, 比如C.

enum Weekday {SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY };

上面的枚舉, 對應的值依次為0到6.

而在Go中, 是沒有提供枚舉類型的. 如果實現上面相同的功能, 難道要寫成這樣么?

const (SUNDAY = 0MONDAY = 1TUESDAY = 2WEDNESDAY = 3THURSDAY = 4FRIDAY = 5SATURDAY = 6 )

不過仔細想象, Go的開發者之一就是開發C語言的前輩, 怎么能不繼承這么漂亮的語法呢?

Go在常量定義上實現了兩個特殊的特性:

  • 若一個常量沒有賦值, 則默認為重復上一行
  • iota 神器
  • 分別介紹一下這兩個家伙.

    常量的默認值

    當一個常量沒有明確給出值的時候, 則常量默認重復上一行賦值的行為. 比如:

    const (a = 1b // 1c = 2d // 2e, f = 3, 4g, h // 3,4i // 報錯, 因為前一行賦值為 3,4. 無法重復 )

    包括如果上一個指定了類型, 下面的也會跟著指定.

    iota

    為當前常量塊的索引值(行號), 從0開始. 對常量塊的定義, 表示包在 const() 中的常量定義. 比如:

    const s = iota // 0 const o = iota // 0 const (a = iota // 0b // 1c // 2d, e = iota, iota // 3, 3f, g // 4, 4 )

    在常量定義中, iota 是可以參與運算的哦.

    使用

    一下舉幾個我想到的例子, 通過組合上面的特性, 通常還是能夠有不錯的效果的.

    1. 定義二進制標識位

    const (isA = 1 << iota // 0b1isB // 0b10isC // 0b100isD // 0b1000 )

    2.丟棄及重復使用 iota

    當需要索引從1開始時, 可以將第一行丟掉.

    const (_ = iota // 丟棄0a // 1b // 2_ // 丟棄3c,d = iota,iota // 4,4 重復使用 )

    3.數值型運算

    上面都比較簡單, 想了幾個玩的比較花的. 來瞅瞅.

    const (P = 3.1415926 // 定義πP_2 = P / (2 * iota) // P/2P_4 // P/4P_6 // P/6P_8 // P/8 ) const (P = 3.1415926 // πP_2 = P / (1 << iota) // P/2P_4 // P/4P_8 // P/8P_16 // P/16 ) const (P = 3.1415926 // 排P_2, P_M_2 = P / (1 << iota), P * (iota + 1) // P/2 P*2P_4, P_M_3 // P/4 P*3P_8, P_M_4 // P/8 P*4 )

    4.計算容量單位大小

    const (_ = 1 << (10 * iota) // 索引為0的數據不要了KB // 2^10MB // 2^20GB // 2^30TB // 2^40 下同PBEBZBYB )

    OK, Go的常量定義基本也就這些了, 如果沒有iota, 那么重復上一行行為也沒有太大意義了, 畢竟定義幾個相同值的常量有什么用呢? 將這兩個特性想結合之后, 往往能夠實現很不錯的效果.

    總結

    以上是生活随笔為你收集整理的Go 常量定义的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。