goの出力の話
golangの出力
最近インターンの影響でgolangなるものを勉強し始めて、今まで静的型付け言語に触れてこず、適当にコードを書いてきたツケを払わされています。
そんなことはさておき、pythonなら出力と言えばprint(), jsならconsole.log()が基本的に使われていて気にすることもなかったのですが、A Tour of Goをやっているといくつか出力の方法があることに気づきます。 そのあたりの違いをまとめていきたいと思います。
ちなみに参考にするリンクはGo言語のPrint・Println・Printfについて | エンジニアへの道とGo で値を出力する方法です。 これらを読む方が百倍速く理解できると思います。
fmt.Print()
fmt.Print()
はオペランドをデフォルトのフォーマットで標準出力への書き込みを行います。
ちなみにオペランドとは「数式を構成する要素のうち、演算の対象となる値や変数、定数」のことみたいです。
実際に出力すると以下のようにオペランド、つまり"Hello"
と"World!"
, "Hello"
と"golang!"
Pがそのまま出力されていますね。このように改行も半角スペースも入らない出力が得られるのがfmt.Print()
の特徴みたいですね
package main
import "fmt"
func main() {
fmt.Print("Hello", "World!")
fmt.Print("Hello", "golang!")
}
// HelloWorld!Hellogolang!
fmt.Println()
fmt.Println()
はオペランドをデフォルトのフォーマットで標準出力に書き込みますが、この際にオペランドの間に半角スペースが入り、文字列の最後に開業が追加されます。
package main
import "fmt"
func main() {
fmt.Println("Hello", "World!")
fmt.Println("Hello", "golang!")
}
// Hello World!
// Hello golang!
これは体感としてpythonのprint()に近いですね
fmt.Printf()
fmt.Printf()
では指定されたフォーマットに従い、フォーマットを行い、標準出力に書き込みます。
フォーマットは%d
のようなverbと呼ばれる形式で指定することになります。
変数val
を10進数表記で出力したい場合はfmt.Printf("%d", val)
のように指定します。
verbは様々用意されており、このような出力が可能です。
package main
import "fmt"
func main() {
val := 123
fmt.Printf("%d\n", val) // 10進数
fmt.Printf("%+d\n", val) // 10進数・正の整数でも符号を付与
fmt.Printf("%6d\n", val) // 10進数・指定した桁数だけ左スペース埋め
fmt.Printf("%-6d\n", val) // 10進数・指定した桁数だけ右スペース埋め
fmt.Printf("%06d\n", val) // 10進数・指定した桁数だけ左0埋め
fmt.Printf("%b\n", val) // 2進数
fmt.Printf("%o\n", val) // 8進数
fmt.Printf("%#o\n", val) // 0つき8進数
fmt.Printf("%x\n", val) // 16進数(a-fは小文字)
fmt.Printf("%#x\n", val) // 0xつき16進数(a-fは小文字)
fmt.Printf("%X\n", val) // 16進数(A-Fは大文字)
fmt.Printf("%#X\n", val) // 0Xつき16進数(A-Fは大文字)
fmt.Printf("%U\n", val) // Unicodeコードポイントに対応する文字
// 123
// +123
// 123
// 123
// 000123
// 1111011
// 173
// 0173
// 7b
// 0x7b
// 7B
// 0X7B
// U+007B
}
verbについては別の記事で後日まとめようと思います。
まとめ
fmt.Print()
:半角スペース、改行なしのデフォルトのフォーマットで標準出力fmt.Println()
:半角スペース、改行ありのデフォルトのフォーマットで標準出力fmt.Printf()
:verbによってフォーマットを指定し、出力(半角スペース、改行なし)