基本
main.goから始まる
fmt.Println()で出力
init() 関数は強制的に最初に実行される。
packageとはコードの集まり。ライブラリもほぼ同じ意味。クラスはない。
ディレクトリ名がpackage名となる。その中にgoファイルを配置。
app
L main.go
L package1
L file1.go
L file2.go
L package2
import
標準パッケージ一覧
Packages - The Go Programming Language
packageはimportして使う
変数
var i int = 3 var ( i int = 3 f64 float64 s string t, f bool = true, false )
var を () でくくればvarを毎回先頭に付ける必要はない
初期値を代入しなかった場合デフォルト値となる。0、空文字、falseなど
xi := 1 xs := "ccc"
const
const Pi = 3.14
書き換えられない
型がない(untype)(実行するまで解釈されない)
通常はグローバルに書く
通常は先頭は大文字
文字列
インデックス指定でアスキーコード取得、stringで文字に変換
string("Hello"[0])
文字の置き換え
var s string = "Namaste" s = strings.Replace(s, "N", "Z", -1) strings.Contains(s, "mas")
バッククオートでヒアドキュメント ``
論理値
変わったところはない
&& || !
型変換
int float64
文字 -> 数字はpythonみたいにstringではできない
i, _ := strconv.Atoi("14") //数値へ
戻り値をアンダースコア(_)で受け取れば、未使用でもコンパイルできる
配列
型部分で宣言したサイズは変更できません
var b [2]int = [2]int{30, 40}
スライス
サイズ変更できる配列
var b []int = []int{30, 40} b = append(b, 50) //追加
var n int 初期化しないとnilになる
n := make(int, 0) だと中身は空だがメモリ上に存在する
map
m := map[string]int{"apple": 100, "banana": 300}
新しいキーに代入すると追加される
var m map[string]int
初期化しないとnil mapになり、追加できない
m := make(map[string]int)
はnilじゃない
a, ok := m["grape"]
keyが存在しないと0を返し、2つ目の返り値にfalseが返る