Edited at

【Go】基本文法①(基礎)


概要

Go言語学習の為にA Tour of Goの順番に沿ってGoの基本を学習します。


パッケージ

Goのプログラムはpackageによって成り立っています。

import内に必要なpackageを明示します。

package main

import (
"fmt"
"math/rand"
)

func main() {
fmt.Println("My favorite number is", rand.Intn(10)) // => My favorite number is 1
}

packageは以下の様に個別にインポートすることもできます。

import "fmt"

import "math/rand"


Exported names(エクスポートされた名前)

Goでは最初の文字が大文字で始まるものは、外部パッケージから参照できるExported namesです。

例えば以下のPimathパッケージからエクスポートされたものです。

package main

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Pi) //=> 3.141592653589793
}


Functions(関数)

関数は 0〜複数 の引数を取ることができます。

関数は以下のように定義されます。

func  <関数名>([引数]) [戻り値の型] {

[関数の本体]
}

引数の後, 戻り値の値に型名を書く必要があります。


package main

import "fmt"

func greetings(arg string) string{
return arg
}

func main(){
fmt.Println(greetings("Hello World")) //=> Hello World
}


引数の型の省略

関数が2つ以上の同種類の引数を伴う場合、以下の様に型の省略ができます。

package main

import "fmt"

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

func main() {
fmt.Println(add(1, 2)) //=> 3
}


複数の返り値

Goの関数は複数の値を返すことができます。


package main

import "fmt"

func multipleArgs(arg1, arg2 string)(string, string){
return arg2, arg1
}

func main(){
a, b := multipleArgs("Hello", "World")
fmt.Println(a, b) // => World Hello
}


Variables(変数)

varによって変数を宣言します。

関数の引数と同様に複数の変数の後に型を書くことで複数の変数を同時に定義できます。

package main

import "fmt"

var var1, var2, var3 bool

func main() {
var num int
fmt.Println(num, var1, var2, var3) //=> 0 false false false
}


変数の初期値

変数宣言時に初期値を設定することができます。

初期値が与えられている場合、変数の型宣言は必要はありません。

その変数は初期化子が持つ型になります。

package main 

import "fmt"

var str = "Go Programming Language"
var num = 2

func main(){
fmt.Println(str, num) // => Go Programming Language 2
}

以下の様に複数の変数を同時に定義することも可能です。

package main 

import "fmt"

var str, num, bool = "Go language", 23, true

func main(){
fmt.Println(str, num, bool) //=> Go language 23 true
}

変数に初期値を与えないとゼロ値(Zero values)が設定されます。

(数値型には0、bool型にはfalse、string型には""(空の文字列)が与えられます。

package main

import "fmt"

func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s) //=> 0 0 false ""
}


関数内での短い変数の宣言

関数内では:=を利用することでより短いコードで変数の宣言を行うことが可能です。

※関数の外では:=を利用した変数宣言はできません。


package main

import "fmt"

func main(){
str := "Hello World"
fmt.Println(str) //=> Hello World
}


基本型

Goの基本型(組み込み型)は以下の通りです。

bool

string

int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 の別名
rune // int32 の別名
// Unicode のコードポイントを表す

float32 float64

complex64 complex128

int, uint, uintptr 型は、32-bitのシステムでは32 bitで、64-bitのシステムでは64 bitです。 特別な理由がない限り、整数の変数が必要な場合はintを使うようにしましょう。


Type conversions(型の変換)

Goでは暗黙的な型変換は許されていないため、下記のような異なる型の変数への代入はエラーになります。

var i int = 100

var f float64 = i // cannot use i (type int) as type float64

型変換を行うには変数を丸括弧で囲み、手前に型名を書きます。

var a uint32 = 1234567890

var b uint8 = uint8(a)
fmt.Println(b) // 210(情報が欠落する)


Constants(定数)

定数は、constキーワードを使用して宣言します。

定数は、文字(character)文字列(string)boolean数値(numeric)のみで使えます。

定数は:=を使用して宣言することはできません。

package main 

import "fmt"

const Num = 2

func main(){
const Greetings = "Hello World"
fmt.Println(Greetings) // => Hello World
fmt.Println(Num) // => 2
}


参考

My Journey of Go①

A Tour of Go

型のキャストと、型アサーションによる型変換