フリーキーズ | 独学プログラミング

Go言語の基本構文入門!変数・定数・演算子をゼロから理解しよう

リンドくん

リンドくん

たなべ先生、Go言語を学び始めたんですけど、変数とか基本的なことから教えてもらえますか?

たなべ

たなべ

もちろん!Go言語はシンプルで学びやすい言語なんだ。
今日は変数、定数、演算子という基本中の基本を一緒に学んでいこう。

プログラミングを学ぶ上で、どの言語を選ぶかは重要な決断ではないでしょうか。
そのような中、多くの企業やエンジニアから注目を集めているのがGo言語です。

Go言語の魅力は何と言ってもそのシンプルさにあります。
GoogleによってWeb開発やシステム開発のために設計されたこの言語は、複雑な機能を排除し、誰でも理解しやすい構文を持っています。

この記事では、Go言語を学び始める方が最初に覚えるべき変数・定数・演算子について、プログラミング初心者の方でも理解できるよう、段階的に解説していきます。

プログラミング学習でお悩みの方へ

HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。

✓ 質問し放題

✓ β版公開中(2025年内の特別割引)

HackATAの詳細を見る

Go言語の変数宣言 - データを保存する基本

リンドくん

リンドくん

変数って何ですか?他の言語とGo言語で違いはあるんですか?

たなべ

たなべ

変数はデータを入れておく箱のようなものだね。
Go言語の変数宣言は他の言語と比べて型推論という便利な機能があるから、実は書きやすいんだよ。

変数とは何か

変数とは、プログラムの中でデータを一時的に保存しておくための仕組みです。
例えば、ユーザーの名前や年齢、計算結果などを記録しておく「箱」のようなものと考えてください。

Go言語では、この変数を使うことで様々なデータを管理し、プログラムの中で活用することができます。

Go言語の変数宣言方法

Go言語には、変数を宣言する方法がいくつかあります。
初心者の方でも理解しやすい順番で見ていきましょう。

1. var文を使った基本的な宣言

package main

import "fmt"

func main() {
    // 型を明示した宣言
    var name string
    var age int
    var height float64
    
    // 値を代入
    name = "たなべ"
    age = 36
    height = 182.0
    
    fmt.Printf("名前: %s, 年齢: %d歳, 身長: %.1fcm\n", name, age, height)
}

2. 初期値付きの宣言

package main

import "fmt"

func main() {
    // 宣言と同時に初期値を設定
    var name string = "たなべ"
    var age int = 36
    var isStudent bool = false
    
    fmt.Printf("名前: %s, 年齢: %d歳, 学生: %t\n", name, age, isStudent)
}

3. 短縮宣言(最もよく使われる)

package main

import "fmt"

func main() {
    // 型推論を使った短縮宣言
    name := "たなべ"
    age := 36
    salary := 50000.0
    
    fmt.Printf("名前: %s, 年齢: %d歳, 給与: %.0f円\n", name, age, salary)
}

短縮宣言:=)は Go言語の特徴的な機能で、型を自動的に推論してくれるため、最も簡潔に変数を宣言できます。
実際の開発では、この方法が最もよく使われます。

変数の基本的なデータ型

Go言語では、変数に格納できるデータの種類が決まっています。主要なものを見てみましょう。

  • string: 文字列("こんにちは"など)
  • int: 整数(1, 2, 100など)
  • float64: 小数(3.14, 170.5など)
  • bool: 真偽値(true, false)

この型システムにより、プログラムの安全性が保たれ、実行時のエラーを防ぐことができます。

定数の定義方法 - 変更されない値を管理する

リンドくん

リンドくん

定数って変数と何が違うんですか?

たなべ

たなべ

定数は一度決めたら変更できない値なんだ。
プログラムの中で「絶対に変わらない値」を定義するときに使うよ。税率とかパスワードの最小文字数とか、そういう値に使うことが多いね。

定数の基本概念

定数は、プログラムの実行中に値が変更されることのない名前付きの値です。
変数とは異なり、一度定義すると値を変更することはできません。

定数を使うメリットは以下の通りです。

  • プログラムの可読性向上 - 意味のある名前で値を表現できる
  • 保守性の向上 - 値を変更する際に一箇所だけ修正すればよい
  • エラーの防止 - 誤って値を変更してしまうことを防げる

定数の宣言方法

1. 基本的な定数宣言

package main

import "fmt"

func main() {
    // 基本的な定数宣言
    const pi = 3.14159
    const greeting = "こんにちは"
    const maxUsers = 100
    
    fmt.Printf("円周率: %f\n", pi)
    fmt.Printf("挨拶: %s\n", greeting)
    fmt.Printf("最大ユーザー数: %d\n", maxUsers)
}

2. 型を明示した定数宣言

package main

import "fmt"

func main() {
    const (
        name string = "管理システム"
        version float64 = 1.2
        isDebug bool = false
    )
    
    fmt.Printf("システム名: %s\n", name)
    fmt.Printf("バージョン: %.1f\n", version)
    fmt.Printf("デバッグモード: %t\n", isDebug)
}

3. 定数グループの宣言

package main

import "fmt"

func main() {
	const (
		Monday    = "月曜日"
		Tuesday   = "火曜日"
		Wednesday = "水曜日"
		Thursday  = "木曜日"
		Friday    = "金曜日"
	)

	fmt.Printf("今日は%sです\n", Wednesday)
}

実用的な定数の使用例

実際のプログラミングでは、設定値や固定値を定数として定義することが一般的です。

package main

import "fmt"

func main() {
	// アプリケーションの設定値
	const (
		appName        = "在庫管理システム"
		maxRetryCount  = 3
		taxRate        = 0.10
		defaultTimeout = 30.0
	)

	// 計算処理の例
	price := 1000.0
	totalPrice := price * (1 + taxRate)

	fmt.Printf("アプリケーション: %s\n", appName)
	fmt.Printf("商品価格: %.0f円\n", price)
	fmt.Printf("税込価格: %.0f円\n", totalPrice)
	fmt.Printf("最大リトライ回数: %d回\n", maxRetryCount)
}

このように定数を使うことで、プログラムの意図が明確になり、保守しやすいコードを書くことができます。

演算子の種類と使い方 - 計算と比較の基本

リンドくん

リンドくん

演算子っていっぱい種類がありそうで覚えられるか心配です...

たなべ

たなべ

大丈夫!Go言語の演算子は直感的でわかりやすいんだ。
まずは基本的なものから覚えて、少しずつ慣れていけばいいよ。

算術演算子 - 基本的な計算

算術演算子は、数値の計算を行うために使います。数学の記号とほぼ同じなので、理解しやすいはずです。

package main

import "fmt"

func main() {
	a := 10
	b := 3

	// 基本的な算術演算
	fmt.Printf("a + b = %d\n", a+b)  // 加算: 13
	fmt.Printf("a - b = %d\n", a-b)  // 減算: 7
	fmt.Printf("a * b = %d\n", a*b)  // 乗算: 30
	fmt.Printf("a / b = %d\n", a/b)  // 除算: 3
	fmt.Printf("a %% b = %d\n", a%b) // 余り: 1

	// 小数の計算
	x := 10.0
	y := 3.0
	fmt.Printf("x / y = %.2f\n", x/y) // 小数の除算: 3.33
}

比較演算子 - 値の比較

比較演算子は、二つの値を比較して真偽値(true/false)を返します。

package main

import "fmt"

func main() {
    age := 20
    limit := 18
    
    fmt.Printf("age == limit: %t\n", age == limit) // 等しい: false
    fmt.Printf("age != limit: %t\n", age != limit) // 等しくない: true
    fmt.Printf("age > limit: %t\n", age > limit)   // より大きい: true
    fmt.Printf("age < limit: %t\n", age < limit)   // より小さい: false
    fmt.Printf("age >= limit: %t\n", age >= limit) // 以上: true
    fmt.Printf("age <= limit: %t\n", age <= limit) // 以下: false
}

論理演算子 - 条件の組み合わせ

論理演算子は、複数の条件を組み合わせるときに使います。

package main

import "fmt"

func main() {
    age := 25
    hasLicense := true
    hasExperience := false
    
    // AND演算子(&&): 両方がtrueの時にtrue
    canDrive := age >= 18 && hasLicense
    fmt.Printf("運転可能: %t\n", canDrive) // true
    
    // OR演算子(||): どちらかがtrueの時にtrue
    isQualified := hasLicense || hasExperience
    fmt.Printf("資格あり: %t\n", isQualified) // true
    
    // NOT演算子(!): 真偽値を反転
    isYoung := !(age >= 60)
    fmt.Printf("若い: %t\n", isYoung) // true
}

代入演算子 - 値の更新

代入演算子は、変数に値を代入したり、既存の値を更新したりするときに使います。

package main

import "fmt"

func main() {
    score := 80
    fmt.Printf("初期スコア: %d\n", score)
    
    // 複合代入演算子
    score += 10  // score = score + 10 と同じ
    fmt.Printf("ボーナス後: %d\n", score)
    
    score -= 5   // score = score - 5 と同じ
    fmt.Printf("ペナルティ後: %d\n", score)
    
    score *= 2   // score = score * 2 と同じ
    fmt.Printf("2倍後: %d\n", score)
    
    score /= 3   // score = score / 3 と同じ
    fmt.Printf("最終スコア: %d\n", score)
}

よくある間違いと注意点

変数宣言でのよくある間違い

// ❌ 間違い: 同じ変数を短縮宣言で再定義
func main() {
    name := "田中"
    name := "佐藤"  // エラー: nameは既に宣言済み
}

// ✅ 正しい: 既に宣言された変数への代入
func main() {
    name := "田中"
    name = "佐藤"   // OK: 値の更新
}

定数での注意点

// ❌ 間違い: 定数の値を変更しようとする
func main() {
    const pi = 3.14
    pi = 3.14159  // エラー: 定数は変更できない
}

型の不一致に注意

// ❌ 間違い: 異なる型同士の演算
func main() {
    var a int = 10
    var b float64 = 3.14
    result := a + b  // エラー: int と float64 は直接計算できない
}

// ✅ 正しい: 型変換を行う
func main() {
    var a int = 10
    var b float64 = 3.14
    result := float64(a) + b  // OK: int を float64 に変換
    fmt.Printf("結果: %.2f\n", result)
}

まとめ

リンドくん

リンドくん

Go言語の基本、だいぶ理解できました!思ったよりシンプルで学びやすいですね。

たなべ

たなべ

そうだね!Go言語は「シンプルであること」を重視して設計された言語だから、初心者でも学びやすいんだ。
今日学んだ基本構文は、これからのGo言語学習の土台になるから、ぜひ実際にコードを書いて練習してみてね。

この記事では、Go言語の基本構文である変数・定数・演算子について詳しく解説してきました。
重要なポイントを整理すると以下の通りです。

変数について

  • Go言語の変数宣言は柔軟で、型推論機能により簡潔に書ける
  • 短縮宣言(:=)が最も便利で実用的
  • 適切な型を選択することで安全なプログラムが書ける

定数について

  • 変更されない値は定数として定義することで保守性が向上
  • アプリケーションの設定値や固定値に活用
  • 定数グループを使って関連する値をまとめて管理

演算子について

  • 算術、比較、論理、代入の各演算子を適切に使い分ける
  • 複合代入演算子でコードを簡潔に記述
  • 型の一致に注意して計算を行う

Go言語は、Googleが開発したモダンな言語として、クラウド開発、マイクロサービス、AI関連のバックエンド開発など、様々な分野で活用されています。
今回学んだ基本構文は、これらの応用分野でも必ず使う重要な知識です。

プログラミング学習で最も大切なのは、実際に手を動かしてコードを書くことです。ぜひ今回の内容を参考に、自分なりの計算プログラムや簡単なアプリケーションを作ってみてください。

この記事をシェア

関連するコンテンツ