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の全体像がつかめるかと思います。もちろん自分は全て写経しました。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す