どうもはじめましてmizugoroです。
Apexではミラージュばっかり使ってマイナーキャラで勝つの気持ちええ!なんて思っていましたが、最近ジブラルタルの強さに気が付きました。めっちゃ勝てます。
自分自身プログラミングはあまり得意ではないのですが、それでも頑張って息してます。そんな自分なんですが、最近Go言語を触り始めました。そこで理解した(と思っていること)を書きました。
勉強し始めたばかりでなかなか理解が追い付いていないところもあろうと思います。何か間違いなどあれば教えてください。
Go言語は静的型付け、C言語と同様にコンパイル言語です。
卍GOPATH卍
Go言語では外部からパッケージをビルドしたりインストールするためにGOPATHを設定する必要があります。初心者プログラマーの多くが躓く環境設定です。これはわりと好きな場所を勝手に指定すればいいものらしく、逆に困ってしまいました。正しい場所を指定しておかないとGo言語が使えないわけではないです。.bashrcや.zshrcで設定するといいとありましたが、ここら辺の理解ができてないのでおいおいやっていこうと思います。
GOに入ってはGOに従え
これ好き。
Go言語にはいくつかの格言があります。
並行と並列は違う(Concurrency is not parallelism)
並行処理と並列処理は違うものです。並行処理は複数のタスクを瞬間的に切り替えながら同時にさばく。並列処理は複数のタスクを複数同時にさばく。といった感じです。そしてGo言語は並列処理が容易という良さを持っています。そしてそれはgoroutineを利用することで、簡単に実装することができます。
func main(){
wait :=new(sync.WaitGroup)
urls := []string{
"http://google.com",
"http://yahoo.jp",
}
for _,url := range urls{
wait.Add(1)
go func(url string){
res,err := http.Get(url)
if err != nil{
log.Fatal(err)
}
defer res.Body.Close()
fmt.Println(url,res.Status)
wait.Done()
}(url)
}
wait.Wait()
}
上のプログラムは複数のURLを取得する処理を並列処理で行ったものになります。
ゼロ値を有益にしなさい(Make the zero value useful)
Go言語では値が宣言された段階で初期化されます。intやfloatであれば0,文字列であれば””というような形で初期化されます。この機能自体は最近の言語だとよくあることですが、重要なのはゼロ値に対して意味を持たせておくことです。初期化するための関数などを経由せずに呼び出されると困るようなコードは書くべきではなく、ゼロ値で初期化された場合のことを考慮してコードを書くべきということです。
Go言語だけではなくほかの言語にも格言のようなものは存在し、そういうのを知ることでより分かりやすいコードを書くことができるようになると思います。
最後に
Go言語を作った背景にこんなものがあります。
3人の言語設計者すべてが、新しい言語を設計する主なモチベーションとしてC++が好きでないことを共有していたことを述べている
wikipedia Go言語より
こんなエピソードがあるとプログラミング言語そのものが、なんか難しいものから、ちょっとかわいいものに見えてきて勉強するモチベーションも上がってきませんか?
それでは素晴らしきコーディング人生を、どうか。