【Golang】Print系関数の違い
出力系関数の違い
fmtパッケージに含まれるPrint系関数
golangを勉強している中で文字列を出力する関数を調べた所、標準パッケージに複数種類含まれていることがわかった。
まだまだ初心者の自分ではどの関数が今書いているコードに適切な関数か調べる必要があったため、自分の備忘録も含めて記事にしようと思う。
警告
下記まとめ内容は、公式ドキュメントをもとに書き出したものです。
詳細については、各段落記載の公式ドキュメントをご参照ください。
全体像
Print系関数についてしらべたところ、ざっくりと下記種類が存在していた。
後述にて、それぞれの関数について記載する。
// (1)標準出力へ出力する関数
func Print(a ...any) (n int, err error)
func Printf(format string, a ...any) (n int, err error)
func Println(a ...any) (n int, err error)
// (2)書き込み先を明示的に指定
func Fprint(w io.Writer, a ...any) (n int, err error)
func Fprintf(w io.Writer, format string, a ...any) (n int, err error)
func Fprintln(w io.Writer, a ...any) (n int, err error)
// (3)文字列へ出力する関数
func Sprint(a ...any) string
func Sprintf(format string, a ...any) string
func Sprintln(a ...any) string
(1)標準出力へ出力する関数
func Print(a ...any) (n int, err error)
引数に渡された文字列を、そのまま標準出力に書き出す。
返り値には、書き出したバイト数と、エラーが返却される。
公式ドキュメント: func Print(a ...any) (n int, err error)
package main
import "fmt"
func main() {
fmt.Print("A")
fmt.Print(" ")
fmt.Print(1)
fmt.Print(" ")
fmt.Print("2\n")
fmt.Print("345\n")
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
A 1 2
345
tomoaki@TomoakinoMacBook-Air cmd %
func Printf(format string, a ...any) (n int, err error)
フォーマットを指定して出力することができる。
指定できるフォーマットの一例は下記の通り。
1 | 2 |
---|---|
%T | 値の型 |
%s | 文字列、スライス |
%d | 基数10 |
公式ドキュメント: func Printf(format string, a ...any) (n int, err error)
package main
import "fmt"
func main() {
fmt.Printf("Type=%T.\n", "Tom")
fmt.Printf("My name is %s .\n", "Tom")
fmt.Printf("I am %d years old.\n", 26)
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
Type=string.
My name is Tom .
I am 26 years old.
tomoaki@TomoakinoMacBook-Air cmd %
func Println(a ...any) (n int, err error)
最後に改行(\n
)を追加した文字列を出力する。
公式ドキュメント: func Println(a ...any) (n int, err error)
package main
import "fmt"
func main() {
fmt.Println("My name is Tom.")
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
My name is Tom.
tomoaki@TomoakinoMacBook-Air cmd %
(2)書き込み先を明示的に指定
func Fprint(w io.Writer, a ...any) (n int, err error)
公式ドキュメント: func Fprint(w io.Writer, a ...any) (n int, err error)
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprint(os.Stdout, "abc\n")
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
abc
tomoaki@TomoakinoMacBook-Air cmd %
func Fprintf(w io.Writer, format string, a ...any) (n int, err error)
公式ドキュメント: func Fprintf(w io.Writer, format string, a ...any) (n int, err error)
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintf(os.Stdout, "Type=%T.\n", "Tom")
fmt.Fprintf(os.Stdout, "My name is %s .\n", "Tom")
fmt.Fprintf(os.Stdout, "I am %d years old.\n", 26)
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
Type=string.
My name is Tom .
I am 26 years old.
tomoaki@TomoakinoMacBook-Air cmd %
func Fprintln(w io.Writer, a ...any) (n int, err error)
公式ドキュメント: func Fprintln(w io.Writer, a ...any) (n int, err error)
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintln(os.Stdout, "My name is Tom.")
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
My name is Tom.
tomoaki@TomoakinoMacBook-Air cmd %
(3)文字列へ出力する関数
func Sprint(a ...any) string
公式ドキュメント: func Sprint(a ...any) string
package main
import "fmt"
func main() {
string := fmt.Sprint("A")
int := fmt.Sprint(1)
fmt.Printf("%T\n", string)
fmt.Printf("%T\n", int)
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
string
string
tomoaki@TomoakinoMacBook-Air cmd %
func Sprintf(format string, a ...any) string
公式ドキュメント: func Sprintf(format string, a ...any) string
package main
import "fmt"
func main() {
string := fmt.Sprintf("My name is %s .\n", "Tom")
int := fmt.Sprintf("I am %d years old.\n", 26)
fmt.Printf("%T\n", string)
fmt.Printf("%T\n", int)
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
string
string
tomoaki@TomoakinoMacBook-Air cmd %
func Sprintln(a ...any) string
公式ドキュメント: func Sprintln(a ...any) string
package main
import "fmt"
func main() {
string := fmt.Sprintln("A")
int := fmt.Sprintln(1)
fmt.Printf("%T\n", string)
fmt.Printf("%T\n", int)
}
Ourtput:
tomoaki@TomoakinoMacBook-Air cmd % go run main.go
string
string
tomoaki@TomoakinoMacBook-Air cmd %
Discussion