概要
忘れそうなのでメモメモ。
書籍「プログラミング言語Go」を見てたら、以下のようなフォーマット書式が記載されていました。
fmt.Printf("%*s<%s>\n", depth*2, "", .n.Data)
説明の部分には以下のように記載されていました。以下 P.152 の文章を引用
%*s内のアドヴァーブ * は文字列の前に可変個の空白を付加します。その幅と文字列は、引数depth*2と "" で提供されています。
一瞬、???ってなってましたが、よく見たらこれ
をメモしていたときに出てきていました。ポジション指定を省略している形ってことですね。
なので、ポジション指定をちゃんと書くと
fmt.Printf("%[1]*[2]s<%[3]s>\n", depth*2, "", .n.Data)
ってことになってて、例えば depth*2 の値が 8 だったとすると
fmt.Printf("%8s<%s>\n", "", .n.Data)
として評価されるってことでした。
ってことは、0埋めする必要があって、かつ、埋める桁数が可変の場合は
fmt.Printf("%0*s%s\n", length, "", data)
ってすればいいってことですね。上にポジション指定をつけると以下と同じことになります。
fmt.Printf("%0[1]*[2]s%[3]s\n", length, data)
サンプル
package formatting import ( "fmt" "github.com/devlights/gomy/output" ) // AdverbAsterisk -- フォーマッティングの %*s についてのサンプルです // // フォーマット書式に出てくる * は、Explicit argument indexes の仕様の一つ。 // 詳細は、同ディレクトリにある formatting_adverb_explicit_argument_indexes のサンプル参照。 // // %*s というのは、パラメータのポジション指定を省略している状態。 // なので、「%*s」というのは「%[1]*[2]s」と同じことになる。 // // REFERENCES: // - 書籍 「プログラミング言語Go」 P.152 // - https://golang.org/pkg/fmt/ func AdverbAsterisk() error { levels := []int{1, 2, 4, 8} for _, v := range levels { // %*s というのは、パラメータのポジション指定を省略している状態。 // なので、「%*s」というのは「%[1]*[2]s」と同じことになる。 // // 以下と同じことになる // - %1s%s // - %2s%s // - %4s%s // - %8s%s fmt.Printf("%*s%s\n", v, "", "message") } // 上記と同じ内容をポジション指定を付与すると以下となる output.StdoutHr() for _, v := range levels { // 一つ目のパラメータの値は * が付与されているので、そのまま値として書式に利用される // 2つ目と3つ目のパラメータの値は * が付与されていないので通常通り利用される fmt.Printf("%[1]*[2]s%[3]s\n", v, "", "message") } // なので、ゼロ埋めしたい場合は以下のようにすれば出来る output.StdoutHr() for _, v := range levels { fmt.Printf("%0*s%s\n", v, "", "message") // 以下と同じ // fmt.Printf("%0[1]*[2]s%[3]s\n", v, "", "message") } return nil }
try-golang/formatting_adverb_asterisk.go at master · devlights/try-golang · GitHub
実行すると以下のようになります。
$ make run go run github.com/devlights/try-golang/cmd/trygolang -onetime -example "" ENTER EXAMPLE NAME: formatting_adverb_asterisk [Name] "formatting_adverb_asterisk" message message message message -------------------------------------------------- message message message message -------------------------------------------------- 0message 00message 0000message 00000000message [Elapsed] 127.908µ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
- メディア: 単行本(ソフトカバー)
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場