エンジニアもどきの雑記

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

GoLangやるpart3

前回
dddpga1.hateblo.jp


基礎文法やる。


変数


定義する

var text string

var x,y,z int

var  (
    hoge,fuga string
    age int
)

num := 1


予約語であるvarの後に変数名、型名と続ける。
複数の指定も一括でできる。

最後のが暗黙的な定義
所謂型推論をしてくれてる。

また、あくまで定義だからnum := 1の後にnum := 2みたいなことをすると
コンパイルエラー
あくまで、定義しているだけで代入ではない。

また、var num = 1って書き方もできるけど、助長なので。はい。
↑に書いてある複数のをまとめて定義するときはvarの方がいいっぽい。

また、:=は関数内でしか使用できない。

package main

import "fmt"

var n = 1

func main() {
        n = n + 1
        fmt.Println(n)
}


なので上記のnの定義はvarを使ってる。
また、上記nはパッケージに所属するパッケージ関数になる。
おそらく、他の言語でいうグローバル変数みたいな。

関数内で定義しているものは、ローカル関数になる。


配列


a := [3]string{"hoge", "foo", "fuga"}

a[0] // hoge

b := [5]int{}
//b = {0, 0, 0, 0, 0}


変数名 要素数 型名 値
の順で定義してやる。
また、値の指定がないとそれぞれの型のデフォルト値が要素数だけ勝手にはいる。
これはコンパイルエラーにならないのね。

そして、スクリプト言語野郎がこういった要素数を先に指定を見ると絶対探す
素数の省略。


a := [...]int{1,2,3}


これは定義した要素の数に自動的になる。
動的に指定したい時はこうなる。

配列を拡張したい時に利用するスライスってのがあるんだけど、こっちは参照型の変数になるので、
参考にしてる本でも別ページなので今度やる。
使用頻度はそっちの方が高そう。

代入はa[1] = 3みたいな他と大して変わらないので省略。
型にだけ注意する。
また、配列同士の代入

var (
    a [2]int
    b [3]int
)

a = b


で要素数が違うと型が同じでもエラーになるので注意する。
素数が違うんだけど、型が違う、というエラーになるらしい。



関数


もう前回までで使ってるけど

func plus(x, y int) int {
    return x + y
}


funcは予約語。他でいうfunctionとか関数を示すやつ。

func 関数名(引数[, 引数]) 返り値の型 {
    //処理
}

が基本形。
返り値がない場合、c#とかjavaでいうvoidは存在しない。
返り値が省略されるだけ。


返り値の複数指定もできる

main.go

package main

import "fmt"

func main() {
        num1 := 30
        num2 := 10

        r1, r2 := both(num1, num2)
        fmt.Println(r1)
        fmt.Println(r2)
}

func both(x, y int) (int, int) {
        a := x + y
        b := x - y
        return a, b
}




[(゜-゜):daichi]@:sample$ go run main.go
40
20


返り値を返す数だけ(int, int)のように括弧で囲んで書く。
受け取る側も当然複数になるので,で区切って書く。

片方だけ受け取りたくない、といった場合は、上記のr1, r2の部分の受け取りたくない方を_にする。


返り値の変数を指定もできる。

func rInt() (a int) {
    return
}

func main() {
    rInt() // 0
}


intのデフォルトが返ってくる。


とりあえずここまで。
これでよくある入門的な処理は書ける気がする。
goは基本文法が他とくらべると特徴的というか、慣れないというか。
書き続ければなれるんだろうけど仕事はphpメインなので余計に。

型の詳細とかやるとすごい大変だからいつか。

また次回。

次回
dddpga1.hateblo.jp