LoginSignup
0
0

Goの基本構文一覧

Posted at

1. HelloWorld

Goのプログラムの開始地点はmainパッケージのmain関数です。

package main

import "fmt"

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

2. 変数宣言

// 変数
var num int = 10
// 定数
const constNum int = 20

Goの基本のデータ型は以下の通りです。

データ型
int8
int16
int32
int64
8~64ビット整数
uint8
uint16
uint32
uint64
8~64ビット符号なし整数
float32
float64
単精度浮動小数点
倍精度浮動小数点
int CPUによって32ビットまたは64ビット
(int32またはint64)
uint CPUによって32ビットまたは64ビット
(uint32またはuint64)
byte int8の別名
bool trueまたはfalse
string 文字列

型推論

データ型の指定を省略することができます。

var typeInferenceBool = true  // bool型
var typeInferenceNum = 10     // int型
var typeInferenceStr = "abc"  // string型
var typeInferenceFloat = 10.5 // float型

複数の変数を同時に宣言

下記のように書けます。

var x, y = 10, "Hello" // xにはint、yにはstringを代入

短い変数宣言

下記のように書くとvarも省略できます。

shortNum := 20                // int型
shortX, shortY := 30, "Hello" // int型とstring型

3. 分岐

if文

x := 10
if x > 5 {
	fmt.Println("x is greater than 5")
} else {
	fmt.Println("x is not greater than 5")
}

switch文

breakは必要ありません。

y := 2
switch y {
case 1:
	fmt.Println("one")
case 2:
	fmt.Println("two")
case 3:
	fmt.Println("three")
default:
	fmt.Println("Unknown number")
}

4. 繰り返し

// 基本的なfor文
for i := 0; i < 10; i++ {
	fmt.Println(i)
}

// rangeを使ったfor文
numbers := []int{2, 3, 5, 7, 11}
for i, num := range numbers {
	fmt.Printf("Index %d: %d\n", i, num)
}

5. 関数

関数は下記のように定義できます。

func [関数名]([引数]) [戻り値の型]
package main

import "fmt"

func add(x int, y int) int {
	return x + y
}

func main() {
	result := add(5, 3)
	fmt.Println(result)
}

6. 構造体とメソッド

Goにはクラスの概念がないため、構造体とメソッドを使用します。

package main

import "fmt"

// 構造体
type Person struct {
	Name string
	Age  int
}

// Personのメソッド
func (p Person) SayHello() {
	fmt.Printf("Hello, my name is %s\n", p.Name)
}

func main() {
	person := Person{Name: "John", Age: 30}
	person.SayHello()
}

7. エラー処理

Goにはtry-catch構文がありません。
Goは複数の戻り値を取れるので、エラーが発生した場合は戻り値として返します。

package main

import (
	"errors"
	"fmt"
)

// 戻り値として error 型を返す。
func divide(x, y float64) (float64, error) {
	if y == 0.0 {
		// エラー型を生成して返す
		return 0.0, errors.New("cannot divide by zero")
	}
	return x / y, nil
}

func main() {
	result, err := divide(10.0, 0.0)
	if err != nil {
		// エラーがある場合
		fmt.Println("Error:", err)
	} else {
		fmt.Println("Result:", result)
	}
}

8. リスト(配列)

配列は固定長、スライスは可変長となります。

// 配列
var numbers [5]int = [5]int{1, 2, 3, 4, 5}
fmt.Println(numbers[1]) // 2

// スライス
var slice []int = []int{1, 2, 3, 4, 5}
slice = append(slice, 6)
fmt.Println(slice[len(slice)-1]) // 6

9. 辞書(連想配列)

// キーがstring、値がstringのmapを生成
var colors = map[string]string{"red": "#ff0000", "green": "#00ff00"}

// mapに値を追加
colors["blue"] = "#0000ff"

// mapから値を取得
fmt.Println(colors["blue"]) // #0000ff

10. ファイル入出力

ファイル書き込み

package main

import (
	"fmt"
	"os"
)

func main() {
	// ファイルの作成
	file, err := os.Create("example.txt")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	// 関数終了時にリソースを閉じる
	defer file.Close()

	// ファイルへの書き込み
	_, err = file.WriteString("Hello, file world!\n")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
}

ファイル読み込み

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	// ファイルの読み込み
	file, err := os.Open("example.txt")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		fmt.Println("Error:", err)
	}
}

以上です。

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