【Golang】fmtパッケージの使い方を総まとめ

Golang

プログラムの複数の段階で、値やその他のデータを表示する必要があったり、デバッグのために様々なデータを記録する必要があったりします。

このような基本的なデバッグは、より良いコードを書くために役立ちます。

fmtパッケージは、プリントのための様々な書式指定子をサポートしています。この投稿では、Golangのfmtパッケージについて説明します。

fmtパッケージをimportする

ここで説明する関数はfmtパッケージなので、それをインポートする必要があります。また、コンソールへの出力を行うので、同様にosパッケージを使用することにします。

import (
    "fmt"
    "os"
)

fmtパッケージで利用できる関数

fmtパッケージは、主に文字列の書式設定をサポートする読み書き関数で構成されています。以下は、このパッケージで利用可能な最もよく使われる関数である。

  • Fprint, Fprintf, Fprintln
  • Fscan, Fscanf, Fscanln
  • Sprint, Sprintf, Sprintln
  • Sscan, Sscanf, Sscanln

Fで始まるすべての関数は、引数として与えられたストリームに文字列を書き込んだり、そこから読み出したりします。引数は、用途に応じて io.Writer または io.Reader インターフェースを実装する必要があります。

Sで始まるすべての関数は、作成した文字列を書式指定子で返します。自動的に印刷されることはありません。

Fprintln や Fscanln など ln で終わる関数は、改行を追加します。

末尾にfが付く関数は、フォーマットをサポートしています。

GoLang fmt パッケージのprint関数

このパッケージが持っている関数のほとんどは可変型関数で、いくつでも引数を取ることができます。

ここでは、使用されている関数のいくつかを紹介します。

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
 
    v := 42
 
    // Spaces are to be added manually
    fmt.Print("This", "is", "a", 42, "string\n")        // Thisisa42string  
     
    fmt.Println("Another", "string")                    // Another string
     
    fmt.Printf("The value is %d\n", v)                  // The value is 42  // formatting support
     
    s := "formatted"
     
    // Spaces are to be added manually
    // os.Stdout is an io.Writer
    fmt.Fprint(os.Stdout, "Yet", "another", "string\n") // Yetanotherstring
    fmt.Fprintln(os.Stdout, "A", "string")              // A string
    fmt.Fprintf(os.Stdout, "A %s string\n", s)          // A formatted string
}

fmtパッケージのscan関数

スキャン関数は、標準入力から値を取得するために使用されます。

以下はその動作の一部です。

package main
 
import (
    "fmt"
)
 
func main() {
      var a, b int
 
      // use address-of operator to get the values into the variable
      fmt.Scan(&a, &b)
 
      // print the values taken
      fmt.Println(a, b)
}

Scanln機能は、下図と同じように使用することができます。

package main
 
import (
    "fmt"
)
 
func main() {
      var a, b int
 
      // use address-of operator to get the values into the variable
      fmt.Scanln(&a, &b)
      fmt.Println(a, b)
}

前にSがつく関数は同じことをしますが、唯一の違いは、データを表示しない代わりに文字列を返すことです。

fmtパッケージのstringerインタフェース

stringerインターフェースの実装者は、print関数に引数として渡すだけで、定義されたとおりの印刷を行うことができます。

以下に、stringerインターフェースを実装した構造体の例を示します。

package main
 
import (
    "fmt"
)
 
// define a struct
type Book struct{
    Name string
    Author string
}
 
// implement the stringer interface by
// implementing the String() string function
func (b Book)String() string {
    return fmt.Sprintf("%s was written by %s\n", b.Name, b.Author)
}
 
func main() {
    b := Book{
        "1984",
        "George Orwell",
    }
     
        // pass as argument directly
    fmt.Println(b)                // 1984 was written by George Orwell
}

このように、fmtパッケージはGoで最も重要なパッケージの一つであり、多くの便利な関数と型が提供されています。

タイトルとURLをコピーしました