Golang初心者が最初につまづくこと




Golang独自のワード

Golangのワードは特殊すぎて最初なんのことを言ってるのか全然わからず、何がわかっていないのか現状把握するのが大変でしたね。

gorutineとかchannel、make、select- caseなどなど。

処理を追うのが難しい

gorutineで並列処理が書かれている中に、channelを使って値の受け渡しがいろんなところで行われているとどこで何が起こっているのか把握が難しくなります。

Node.jsなどの非同期プログラミングに慣れていればまだ理解しやすいでしょうが、JavaとかRubyしか書いたことない場合は最初この考え方に苦戦すると思います。

エラーハンドリングを毎回書かないといけない

これを毎回書かないといけないのは地味にめんどくさくてきついですね。あとエラーのスタックトレースも標準で対応していないのでpkg/errorsを使って自分で対応しないといけません。

if err != nil {
    return err
}

channelの理解が難しい

channelはGCPのPub/SubやAWSのKinesysと同じようなものなのですが、扱い方にクセがあり慣れるのに時間がかかります。

channelへの送受信の書き方をみたときは驚愕しました。パット見でなんだこれ状態ですね。。。慣れればシンプルな書き方なので慣れるしかないです。

channelの定義 (int型の値を送受信するサイズが10のchannelの宣言)
ch := make(chan int, 10)

// channelへの送信
ch <- 5

// channelからの受信
<-ch

channelのブロッキング処理

gorutineの中でchannelに送信された値を別のgorutineの処理で非同期で受け取るときに処理をブロッキングするのですがそのときにselect-case文を使います。

これも最初見たときはGolangのswitch-case文かと思ったら違いました。複数channelの受信を非同期に行うための独自の構文でした。これにforの無限ループをよく組み合わせて使ったりするので余計に難しく感じましたね。

select
case data1 := <-ch1
    return something1()
case data2 := <-ch2
    return something2()
case data3 := <-ch3
    return something3()

おすすめ書籍

Go言語の初心者から上級者までしっかり学べる書籍となっています。

本書籍はサンプルコードが非常に豊富で、HTTP/Websockert通信、CLIツール、Google/Twitter API、MongoDB等を使った様々なアプリケーションの作り方を学べます。

Go言語特有のgorutine、channelに関してもしっかりと説明されているのでこの書籍を一通り写経するとGoの全体像がつかめるかと思います。もちろん自分は全て写経しました。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です