LoginSignup
0
0

More than 1 year has passed since last update.

【Golang】Print系関数の違い

Posted at

出力系関数の違い

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

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

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

全体像

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

Golang:fmtパッケージ
// (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 %
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0