#iota は golang 言語の定数カウンターであり、定数式でのみ使用できます。
iota は、const キーワードが現れると (const 内の最初の行の前に) 0 にリセットされます。const の定数宣言の新しい行ごとに、iota は 1 回カウントされます( iota は、const ステートメント ブロック内の行インデックスとして理解できます)。 (推奨学習: go)
iota を使用すると定義が簡素化され、列挙型を定義するときに非常に役立ちます。
定数定義では、iota は 0 から 1、0、1、2、3、4、5...
のステップで値を反復できます。この例は、ファイル サイズ フォーマット 2 の 10 乗キャリーに基づいており、KB を 10 ビット左に、MB を 20 ビット左にシフトします。 。 。
この記事の Sprintf("%f",x) は String メソッドで定義されているため、無限ループのバグは発生しません。%f は String() を呼び出そうとしないためです。
package main import ( "fmt" ) type ByteSize float64 const ( _ = iota KB ByteSize = 1 << (10*iota) MB GB TB PB EB ZB YB ) func (b ByteSize) String() string{ switch { case b >= YB: return fmt.Sprintf("%.2fYB",b/YB) case b >= ZB: return fmt.Sprintf("%.2fZB",b/ZB) case b >= EB: return fmt.Sprintf("%.2fEB",b/EB) case b >= PB: return fmt.Sprintf("%.2fPB",b/PB) case b >= TB: return fmt.Sprintf("%.2fTB",b/TB) case b >= GB: return fmt.Sprintf("%.2fGB",b/GB) case b >= MB: return fmt.Sprintf("%.2fMB",b/MB) case b >= KB: return fmt.Sprintf("%.2fKB",b/KB) } return fmt.Sprintf("%.2fB",b) } func main() { fmt.Println(ByteSize(1e10)) }
以上がgolang iotaの起動方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。