タダです。
A Tour of Go 2日目で学んだことを記録していきます。
定数
変数宣言のvarをconstに変えると定数になる
func main() {
const Hello string = "hello"
Hello = "bye" // Helloに代入はできない
}
ポインタ
ポインタ型の変数は、型の前に*をつける
アドレスは変数の前に&を付ける
func callByValue(i int) {
i = 20 // 値を上書きする
}
func callByRef(i *int) {
*i = 20 // 参照先を上書きする
}
func main() {
var i int = 10
callByValue(i) // 値を渡す
fmt.Println(i) // 10
callByRef(&i) // アドレスを渡す
fmt.Println(i) // 20
}
関数
関数は func
で始まる
引数も戻り値もない場合は次のように宣言する
func hello() {
fmt.Println("hello")
}
func main() {
hello()
}
引数がある場合は変数と型を宣言する
func sum(i, j int) {
fmt.Println(i + j)
}
func main() {
sum(1,2)
}
エラーを返す場合は、以下のようにする
自作のエラーは、errorsパッケージを用いて作れる
package main
import (
"errors"
"fmt"
"log"
)
func div(i, j int) (int, error) {
if j == 0 {
// 自作のエラーを返す
return 0, errors.New("divied by zero")
}
return i / j, nil
}
func main() {
n, err := div(10, 0)
if err != nil {
// エラーを出力しプログラムを終了する
log.Fatal(err)
}
fmt.Println(n)
}
マップ
マップは、キーバリューの対応で保存するデータ構造
var month map[int]string = map[int]string{}
month[1] = "January"
month[1] = "February"
fmt.Println(month) //map[1:Junuary 2:February]
配列/スライス
Goの配列は固定長
可変長配列はスライス
配列は以下のように表現する
var arr[4]string
arr[0] = "a"
arr[1] = "b"
arr[2] = "c"
arr[3] = "d"
fmt.Println(arr[0]) // aと表示される
stringのスライスは次のように宣言する
var s[]string
s := []string{"a", "b", "c", "d"}
fmt.Println(s[0]) // "a"
スライスに対する操作には、append()でスライスの末尾に要素を追加、rangeでは配列やすらいに格納された値を先頭から順番に処理する
package main
import "fmt"
type Vertex struct {
Lat, Long float64
}
var m = map[string]Vertex{
"Bell Labs": {40.68433, -74.39967},
"Google": {37.4202, -122.08408},
}
func main() {
fmt.Println(m) //map[Bell Labs:{40.68433 -74.39967} Google:{37.4202 -122.08408}]
}