学習ノート 名前: Dozi0116

プログラムのことか、ゲームのことか、サイト作ったらそっちに移転したい

Go言語の違うところ #2

はじめに

dozi0116.hatenablog.jp

これの続き。

CやPythonをかじったことある人が、『基礎からわかるGo言語』を読んで順番に思ったことを書き連ねていくノート的なやつ


パッケージ

ソースが複数ファイルからなる場合、「パッケージ」という単位でソースを扱う。 同一パッケージなら、別ソースで宣言された変数や関数にアクセスすることができるのが特徴。

そして、外部のパッケージのものを扱いたい場合は import する。 独自パッケージを作る場合、GOPATHを通してあるディレクトリ以下に置かないと認識されないので注意!!

GitHubとかを用いてちゃんとしたプロジェクトコードレベルで管理したいなら以下のサイト様が参考になりそう。

qiita.com

package main

import "fmt"
import "my/sample" // $GOPATH/src/my/sample 以下にあるソースを読む
import rename "my/sample2" // python の as 的なこともできる

for文

Goのforは (Cのwhile + for + pythonのfor) というイメージ。 紛らわしくないようにwhileキーワードがない。 break, continue どちらも完備。

// 基本パターン
for var i int = 0; i < 5;i++ {
    // () がないのはpythonっぽいよね
    // もちろん条件式を省略してもOK
}

// whileっぽいパターン
i := 0
for i < 5 {
     i++
}

// 無限ループは条件節を省略する
for {
    // infinity!
}

// python for パターン
arr := [...]string["hoge", "fuga", "piyo"]
for element := range arr {
    // 順番に取り出せる
}

// enumrate for みたいなこともできる
arr := [...]string["hoge", "fuga", "piyo"]
for index, element := range arr {
    // 便利
}

if文

ほぼほぼ同じ。 Cとの違いは条件節の()がないこと、pythonとの違いは、ブロックをちゃんと{}で囲み、elif じゃなくて else if なところ。 そして共通で違うところは、初期化節があるところ。

if x < y {
    // ほぼ同じ
} else if y < 100 {
    // 感覚で
} else {
    // 使える
}

if a := add(3, 5);a < 10 {
    // 余計な変数宣言が減ってちょっと便利
}

switch文

switch - case - dafault の流れはCと一緒だけど、breakが必要なくなった。 代わりに、下の文まで続けて行いたい場合は fallthrough キーワードを記述する。

そして、待望の(?)switchの条件節に式がかけるようになった

switch number {
    case 3:
        // 3
    case 4, case 5:
        // 4, 5
    case 6:
        // 6
        failthrough
    case 7:
        // 6, 7
    default:
        // それ以外
}

// 条件節に式を用いる
switch {
    case num < 3:
        // 3未満
    default:
        // 3以上
}