概要
A Tour of Goの順番に沿ってGoの基本で個人的に学習したことをまとめています。
No | 記事 |
---|---|
1 | 〜〜【Go】基本文法①(基礎)「今ココ」〜〜 |
2 | 【Go】基本文法②(フロー制御文) |
3 | 【Go】基本文法③(ポインタ・構造体) |
4 | 【Go】基本文法④(配列・スライス) |
5 | 【Go】基本文法⑤(Maps・ Range) |
6 | 【Go】基本文法⑥(インターフェース) |
7 | 【Go】基本文法⑦(並行処理) |
8 | 【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
です。
例えば以下のPi
はmathパッケージ
からエクスポートされたものです。
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
}