📘

Go言語チュートリアル 「A Tour of Go」 パッケージ、変数、関数編

2022/07/31に公開

A Tour of Goの「Packages, variables, and functions.」を完了したので、復習も兼ねて、内容をまとめてみます。
A Tour of Go

既にまとめられている記事がいくつかあり、何番煎じかはわかりませんが、暖かく見守っていただければと思います。

残りの4レッスンについては、次回以降で!

Packages, variables, and functions.

パッケージとインポート

プログラムはmainパッケージから実行される
importでパッケージを読み込む

package main

import (
	"fmt" // コードを整形してくれるパッケージ
	"math/rand" // 乱数生成パッケージ
)
// この書き方も可。
import "fmt"
import "math/rand"

エクスポート

エクスポートされていない名前は外部パッケージから呼び出すことができない。また、エクスポートできるものは大文字から始まる名前のみ。

package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Pi) // Piは大文字始まりなので、mathパッケージ外から呼び出せる
}

関数

0個以上の引数を取れる。

// 2つの引数を受け取る
func add(x int, y int) int {
	return x + y
}
// 2つ以上の引数が同じ方の場合は最後の型以外を省略可能。
func add(a string, x, y int) int {
	return x + y
}
// 2つの返り値を返却することも可能
func swap(x, y string) (string, string) {
	return y, x
}
// 戻り値への名前付けが可能
func add(x, y int) (sum int) {
	sum = x + y
	return // sumが返却される
}

変数

varステートメントで変数を定義できる。

// 関数の引数と同様に2つ以上の変数が同じ場合は最後の型以外を省略できる。
var c, python, java bool

// 初期化子の定義も可能。初期化子の持つ型になる
var i, j int = 1, 2

// 関数内では短い := の代入文を使った暗黙的な型宣言も可能。
func main() {
	k := 3
}

基本型

  • bool
  • string
  • int int8 int16 int32 int64
  • uint uint8 uint16 uint32 uint64 uintptr
  • byte (uint8の別名)
  • rune (int32の別名)
  • float32 float64
  • complex64 complex128

ゼロ値

初期値を与えず、に宣言するとゼロ値が与えられる。

  • 数値型(int,floatなど): 0
  • bool型: false
  • string型: "" (空文字列( empty string ))
func main() {
	var i int // 0
	var f float64 // 0
	var b bool // false
	var s string // ""
	fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

型変換

C言語とは異なり、Goでの型変換は明示的な変換が必要。

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

i := 42
f := float64(i)
u := uint(f)

型推論

明示的な型を指定せずに変数を宣言した場合( := や var = のいずれか)、変数の型は右側の変数から型推論される。

var i int
j := i // int

i := 42           // int
f := 3.142        // float64
g := 0.867 + 0.5i // complex128

定数

constを使って定数を定義できる。
文字(character)、文字列(string)、boolean、数値(numeric)のみ。
:= を使って宣言は不可。

const Pi = 3.14

func main() {
	const World = "世界"
	const Truth = true
}

Discussion

ログインするとコメントできます