Go言語で学ぶ出力の基本:Print, Println, Printfの違いを徹底解説

Programming

こんにちは!今回は前回初挑戦したGo言語の続きを進めていきたいと思います。初めてなので疑問に思ったところなどを掘り返し、少し新しいことに挑戦していきたいと思います。

今回もWindows11 , VSCode, Go言語で進めていきます。

前回の『Hello, world!』の復習から

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

何のへんてつもないGo言語の「Hello, world!」ですが、気になったのは2つありました。

「Package main」と「import “fmt”」です。

Package main について

Go言語では、コードは パッケージ に属するようです。package キーワードを使って、そのコードがどのパッケージに属しているかを宣言します。C言語やJavaと同じですね。

  1. main パッケージについて
    • 特別な役割を持つパッケージです。
    • Goプログラムのエントリーポイントを示します。main パッケージを含むコードが必ず存在しないと、実行可能なプログラムは作成できません。
    • このパッケージ内に、func main() を定義する必要があります。この main() 関数がプログラムのスタート地点です。
  2. パッケージの用途
    • Goでは、コードを整理し、再利用可能にするためにパッケージを利用します。
    • 例: fmt はフォーマット処理用の標準パッケージ、math は数学演算用のパッケージです。

import “fmt”について

Go言語では、import文を使って必要なパッケージを現在のコードに読み込みます。この「パッケージ」は、他の言語における「ライブラリ」や「モジュール」と似た役割を果たします。たとえば、標準パッケージであるfmt(フォーマット出力)やtime(時間操作)をコード内で使用するには、import文で宣言します。

Goでは、標準パッケージであってもimport文を省略せず明示的に記述するのが基本ルールです。また、パッケージ名が長く使いづらい場合には、エイリアス(別名)を設定して簡潔に利用することができます。

  1. fmt パッケージについて
    • fmt (フォーマット) はGoの標準パッケージの一つです。
    • 主に以下のような入出力操作を提供します。
      • 標準出力にテキストを表示: fmt.Println(), fmt.Printf()
      • 文字列をフォーマット: fmt.Sprintf()
      • 標準入力を取得: fmt.Scan()
  2. 使い方の例
fmt.Println("Hello World!") // 改行付きで文字列を表示
fmt.Printf("こんにちは、%s さん\n", "Go言語") // 書式指定で表示

エイリアスを使ったインポート

import f "fmt"

func main() {
    f.Println("Hello, alias!")
}

パッケージを使う理由

  • 再利用性: 標準ライブラリや他のパッケージのコードを利用して、ゼロから機能を実装する必要を省けます。
  • 機能の分離: 各パッケージは特定の機能に焦点を当てており、管理しやすくなります。

復習のまとめ

  • package main: 実行可能なプログラムを作成するための特別なパッケージ。
  • import "fmt": 標準出力などを行うために、Goの標準ライブラリ fmt をインポート。

今日のお題

さて、今日のお題は『Go言語 fmt & time package と3種類のPrint文』でした。

用意したGoコードは以下の通りです。

package main

import (
	"fmt"
	"time"
)

func main() {
    var name string
    fmt.Print("名前を入力してください: ")
    fmt.Scanln(&name)

    // 現在の日時を取得
    now := time.Now()

    // 日付と時刻をフォーマットして表示
    fmt.Printf("こんにちは、%sさん!\n", name)
    fmt.Printf("今日は %s です。\n", now.Format("2006年1月2日"))
}

PrintfとScanlnを見たとき、C言語に似ていると感じて個人的に興奮しました。

また、Print文が3種類ある点にも興味を惹かれますね。さらに、新しいライブラリであるtimeも登場しており、これも気になります。

実行結果は以下の通りです。

赤枠が実行した結果です。

コードの説明

  1. import "time":
    • 現在の日付や時刻を取得するために time パッケージをインポートします。
  2. time.Now():
    • 現在の日時を取得する関数です。
  3. now.Format("2006年1月2日"):
    • time.Time 型のデータをフォーマットして文字列として表示します。
    • Goでは、このフォーマット文字列がユニークで、2006-01-02 15:04:05 のように指定することで日付と時刻を整形します。
  4. 挨拶と日時を表示:
    • fmt.Printf を使って、名前と日時を組み合わせたメッセージを表示します。

実行例

名前を入力してください:Miyakawa
こんにちは、Miyakawaさん!
今日は 2024年12月6日 です。

新たに登場したPrintとPrintfのコマンドについて考えてみました。

そういえば、JavaにはPrintlnやprintというコマンドがありましたね。
一方、C言語ではprintfが標準的に使用されていた記憶があります。そこで、今回Print、Println、Printfについて整理してみることにしました。

1. fmt.Print

  • 目的: 単純に文字列や値を出力する。
  • 改行しない: 出力後に自動で改行されません。
fmt.Print("こんにちは")
fmt.Print("世界")

出力

こんにちは世界

使う場面:単語の後ろに改行コードがないため、ひとつなぎの文になります。複数の値を連続で出力したい場合などに利用します。


2. fmt.Println

  • 目的: 改行付きで文字列や値を出力する。
  • 改行する: 出力後に自動で改行されます。
fmt.Println("こんにちは")
fmt.Println("世界")

出力

こんにちは
世界

使う場面: 改行コードが自動で付与されます。各出力を見やすく改行して表示したい場合。


3. fmt.Printf

  • 目的: フォーマット指定子を使って、出力の形式を細かく制御する。
  • 改行しない: 必要なら明示的に \n を追加する必要があります。
name := "太郎"
age := 30
fmt.Printf("こんにちは、%sさん!あなたは%d歳です。\n", name, age)

出力

こんにちは、太郎さん!あなたは30歳です。

主なフォーマット指定子

  • %s: 文字列
  • %d: 整数
  • %f: 浮動小数点数
  • %v: 任意の型の値
  • %T: 値の型

使う場面: 出力内容を整形する必要がある場合や、複雑な情報を見やすく表示したい場合。

Print, Println, Printf まとめ

メソッド改行の有無主な用途
Printなし単純な文字列・値を出力したい場合
Printlnあり単純な文字列・値を出力したい場合
Printfなし書式指定でフォーマットしたい場合

総合まとめ

この記事では前回の『Hello, World!』の振り返りからの繋がりで、Go言語の出力方法をまとめました。

また、fmt 以外の time ライブラリを使ってみました。

複数のライブラリを同時にインポートする場合は( )をうまく使うことを学習しました。

用途に応じた使い分けをマスターし、コードの効率と可読性を向上させていきたいと思います。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です