0
Help us understand the problem. What are the problem?

posted at

updated at

【A Tour of Go】基本編① 〜パッケージ、変数、関数〜

公式の A Tour of Go ではじめて Go 言語を触ってみました。
以下、パッケージ・変数・関数について学んだことのメモ。

パッケージ

package

  • Goのプログラムはパッケージで構成される
// プログラムは main パッケージから開始される
package main

// "fmt" と "math/rand" パッケージを import
import (
	"fmt"
	"math/rand" // `package rand` ステートメントで始まるファイル群
)

func main() {
	fmt.Println("My favorite number is", rand.Intn(18))
}

import

  • importステートメントの書き方
    • 括弧で複数のimportを整理する(better
    • 複数のimportステートメントを書く
// factored import statement
import (
	"fmt"
	"math"
)

// multiple import statements
import "fmt"
import "math"

export

  • 大文字で始まる名前は、外部のパッケージから参照できる export された名前である
package main

import (
	"fmt"
	"math"
)

// wrong "undefined: math.pi"
func main() {
	fmt.Println(math.pi)
}

// correct
func main() {
	fmt.Println(math.Pi)
}

関数

書き方

  • 型は後ろに書く
  • 複数の引数が同じ型である場合は、最後の型を残して省略できる
func add(x int, y int) int {
	// add(x, y int) とも書ける
	return x + y
}

複数の戻り値

  • 関数は複数の戻り値を返すことができる
package main

import "fmt"

func swap(x, y string) (string, string) {
	// 複数の戻り値!
	return y, x
}

func main() {
	a, b := swap("hello", "world")
	fmt.Println(a, b)
}

名前付き戻り値

  • 戻り値となる変数に名前を付けることができる(名前付き戻り値
    • 関数の最初で定義した変数名として扱われる
    • returnステートメントに何も書かなくてよくなる(Naked return
      • 可読性の観点から、短い関数でのみ利用すべき
func split(sum int) (x, y int) {
	// x, y が named return values
	x = sum * 4 / 9
	y = sum - x
	return // Naked return
}

変数

基本的な変数宣言

  • varステートメントで変数を宣言できる
  • 複数の変数の最後に型を書くことで、それらの変数を一括で宣言できる
  • 初期値が与えられている場合、型は省略可能
var i, j int = 1, 2

短い変数宣言

  • 関数の中ではvarの代わりに、短い:=の代入文を使って暗黙的な型宣言ができる
func main() {
	k := 3
	fmt.Pringln(k)
}

基本的な型

  • bool
  • string
  • int, int8, int16, int32, int64
  • unit, unit8, unit16, unit32, unit64, unitptr
  • byte(unit8の別名)
  • rune(int32の別名)
  • float32, float64
  • complex64, complex128

int, uint, uintptr 型は、32-bitのシステムでは32 bitで、64-bitのシステムでは64 bitです

ゼロ値

  • 数値型(int, float など): 0
  • bool型: false
  • string型: ""

型変換

  • T(v) は変数 v をT 型へ変換する
i := 42
f := float64(i)
u := unit(f)

型推論

i := 42 // int
f := 3.142 // float64
u := unit(f)  // complex128

定数

  • 定数は bool, string, 数値でのみ使える
  • := を使って宣言できない

次回

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?