概要
知らなかったので、忘れないうちにメモメモ。
Go で、fmt.Printf
とかするときに
x := 1 fmt.Printf("%d(%T)\n", x, x)
という様に同じパラメータを複数回使いたいときに、今まで上のようにやってたんですが
をみてたら、Explicit argument indexes
ってのがありました。
以下のように指定できたんですね
x := 1 fmt.Printf("%d(%[1]T)\n", x)
PythonとかC#だと、もう少しいい感じに
>>> x = 1 >>> print(f"{x}({type(x)})") 1(<class 'int'>
using System; namespace cstest { class Program { static void Main(string[] args) { var x = 1; Console.WriteLine($"{x}({x.GetType()})"); } } }
のように出来るのですが、Goでも似たようなことが出来るのを知って良かった。
サンプル
package formatting import "fmt" // AdverbExplicitArgumentIndexes -- フォーマッティングの Explicit argument indexes についてのサンプルです。 // // REFERENCES: // - https://golang.org/pkg/fmt/ func AdverbExplicitArgumentIndexes() error { // ------------------------------------------------------------ // Go のフォーマット仕様には // Explicit argument indexes // という仕様がある。 // // フォーマット文字列内に以下が指定できる // - [1]とすると、添字内のパラメータの値を指定できる // 中の数字は、フォーマット文字列の後のパラメータの位置 // (最初のパラメータが 1 ) // - [1]* のようにアスタリスクをつけると、そのパラメータの // 値を指示子の値として利用できる // ------------------------------------------------------------ // 以下の2つは同じ結果となる i := 10 fmt.Printf("%d(%T)\n", i, i) fmt.Printf("%d(%[1]T)\n", i) // 以下の2つは同じ結果となる f := 32.8 fmt.Printf("%3.2f\n", f) fmt.Printf("%[3]*.[2]*[1]f\n", f, 2, 3) // 複雑になるので、あまり意味はないが、以下の様にも出来る var ( numberLength = 10 totalLength = numberLength + 5 ) fmt.Printf("% [2]*[1]s\n", fmt.Sprintf("%0[2]*[1]d\n", i, numberLength), totalLength) return nil }
try-golang/formatting_adverb_explicit_argument_indexes.go at master · devlights/try-golang · GitHub
実行すると以下のようになります。
$ make run ENTER EXAMPLE NAME: formatting_adverb_explicit_argument_indexes [Name] "formatting_adverb_explicit_argument_indexes" 10(int) 10(int) 32.80 32.80 0000000010 [Elapsed] 517.416µs
おすすめ書籍
自分が読んだGo関連の本で、いい本って感じたものです。
- 作者:Katherine Cox-Buday
- 発売日: 2018/10/26
- メディア: 単行本(ソフトカバー)
- 作者:松尾 愛賀
- 発売日: 2016/04/15
- メディア: 単行本(ソフトカバー)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- 作者:Alan A.A. Donovan,Brian W. Kernighan
- 発売日: 2016/06/20
- メディア: 単行本(ソフトカバー)
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場