💧

【Golang】Print系関数の違い

2024/11/04に公開

Qiitaからのお引越し記事

出力系関数の違い

fmtパッケージに含まれるPrint系関数

golangを勉強している中で文字列を出力する関数を調べた所、標準パッケージに複数種類含まれていることがわかった。
まだまだ初心者の自分ではどの関数が今書いているコードに適切な関数か調べる必要があったため、自分の備忘録も含めて記事にしようと思う。

警告
下記まとめ内容は、公式ドキュメントをもとに書き出したものです。
詳細については、各段落記載の公式ドキュメントをご参照ください。

全体像

Print系関数についてしらべたところ、ざっくりと下記種類が存在していた。
後述にて、それぞれの関数について記載する。

Golang
// (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)

example
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)

example
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)

example
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)

example
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)

example
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)

example
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

example
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

example
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

example
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 %
GitHubで編集を提案

Discussion