エンジニアもどきの雑記

メモ帳です。きっと。macアプリ配信windowsでもできるようになるまで絶対にメイン機にしないマン。特筆しない限り環境は【win10home,i5-7200u,8g,64bit,巨乳が好き】

GoLangやるpart7

前回
dddpga1.hateblo.jp

本来もう少し先にやるべきだった
for文、switch文、if文、定数をやろう。そうしよう。
多分すぐ終わるからgoroutineもやろう。
deferもって思ったけどまぁ、いつか。やらないかも

今言ったばかりだけどまじでもう少し先にやるべきだった。


定数


他の言語と同様の定数がある。
使い方は言うまでもないだろうけど、決め打ちの値を最初から入れて置ける変数。
変数をやった時にやるべきだったね。うん。

とりあえず書き方を覚えれば・・・。

main.go

package main

import "fmt"

const X = 1
const (
        Y = 2
        Z = 3
)

func plus(a, b int) int {
        const W = 4

        return (a + b) * W
}

func main() {
        res := plus(X, Y)
        fmt.Println(res * Z)
}


実行

36


これがすべてだ。
この記事のシリーズでスコープをやってはいないから、説明を端折るけど、
再代入できない変数が定数。式も入れられる。以上。


if文 switch文


どの言語にもあるけど、
もし、〇〇だったら△の処理、■■だったら◇◇の処理
っていうのがif文。そしてswitch文

これも書き方を覚えよう。


main.go

package main

import "fmt"

func main() {
        x := 5

        if x > 1 {
                fmt.Println("xは1より大きい")
        } else if x == 6 {
                fmt.Println("xは6")
        } else {
                fmt.Println("誰だお前は")
        }

        if a, b := 1, 2; a < b {
                fmt.Println("使いどころを見つけて使わないと覚えないよね")
        }

        switch x {
        case 1:
                fmt.Println("xは1")

        case 5:
                fmt.Println("xは5")

        default:
                fmt.Println("hoge")
        }

        switch c := 5; {
        case c > 1:
                fmt.Println("cは1より大きい")

        case c < 10:
                fmt.Println("xは10より小さい")
        }
}


実行

xは1より大きい
使いどころを見つけて使わないと覚えないよね
xは5
cは1より大きい


面白いのは、というか他と違うのは簡易式が使えるってところ。

if 式; 条件 {
    //処理
}

switch 式; 条件 {
case 条件:
    //処理
}


みたいな。
最後のswitchは式だけ書いて条件をcaseで行ってる。

さて次。

for文



これも書く。

main.go

package main

import "fmt"

func main() {
        stop := 0
        for {
                fmt.Println("無限ルーーーープ")
                stop++

                if stop == 3 {
                        fmt.Println("しょうもないので抜けます")
                        break
                }

        }

        for i := 0; i < 10; i++ {
                fmt.Println("よくあるルーーーープ")
        }

        testArr := map[int]string{1: "hoge", 2: "fuga", 3: "foo"}
        for x, y := range testArr {
                fmt.Println("foreach的な")
                fmt.Println(x)
                fmt.Println(y)
        }

}


実行

無限ルーーーープ
無限ルーーーープ
無限ルーーーープ
しょうもないので抜けます
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
よくあるルーーーープ
foreach的な
1
hoge
foreach的な
2
fuga
foreach的な
3
foo


pythonとかでもみかけるrangeがある
forEachは実質ないので注意。
whileにしても何にしてもforで書けってのがgoのマナー。

rangeの使いかたは以下

for インデックス, value := range 配列なりsliceなり{
    //処理
}


こういった文法の少なさは学習コストの低さにつながって非常にいいと思う。
他に憶えなきゃいけないこと沢山あるし。

と、goroutineはとりあえず前回のでいい気がしてきた。
のでやらない。

ので代わりにinitやる


init


どういうものかというと所謂コンストラクタ的なもの。
前に書いた通り、goはmain packageのmain関数から動くが、それよりも前に
先に初期化処理を走らせることができる。

initはパッケージの初期化なので、他のパッケージにしても呼び出される時に実行されるので
mainだけじゃない。

とりあえず書く

main.go

package main

import "fmt"

var x = ""

func init() {
        x += "ABC"
}

func main() {
        fmt.Println(x)
}


実行

ABC


mainより先に処理が走ってるのがわかる。


他の言語でもわりと当たり前に使う文法だったから少し軽い感じだけど、
とりあえずここまで。

また次回。

最終回
dddpga1.hateblo.jp