- 投稿日:2020-02-18T11:45:36+09:00
PHPerからGo使いへ
Goとは?
・Goは2009年にGoogleが開発したオープンソースプロジェクトのプログラミング言語です。
特徴
- いわゆる静的言語 ただし型推論は強め
- シンプルな記述
- ループ処理はfor文だけ
- 他の言語で用意されている継承の概念がない
- 並行処理の記述が簡単
- 実行速度やコンパイル速度が早い
触ってみた所感
- Javaなどの他の静的言語に比べて記述が簡単!
- PHPと比べると実行速度早いのは良いです。
- よくも悪くもコンパイルが必要な言語なので、実行前にポカミスが洗い出されるのは良いです。
- シンプルで出来ることが他の言語に比べ限られているので、記述ややり方について悩むことは少ないのでは、と想像。
サンプルコード
fizzbuzz.gopackage main //ライブラリの読み込み。これをPHPで言う組み込み関数的な。 import ( "fmt" "strconv" ) //main関数から実行されます。 //Goにはクラスの概念はありません。またファイル実行のためには必ずfunc main()が必要です。 func main(){ //厳密な変数宣言。 var num int num = 10000 //main関数から別の関数を呼び出し。 message := fizzbuzz(num) fmt.Println(message) } //引き数に型の指定はマスト。 //返り値がある場合には返り値の型も書かないといけません。 func fizzbuzz(num int) string{ var message string //このように省略して変数宣言もできます。型の指定も省略できます。 for i := 1; i <= num; i++{ if i % 3 == 0 && i % 5 == 0 { //文字列の結合は+を使います。 message = message + "FizzBuzz\n" } else if i % 3 == 0 { message = message + "Fizz\n" } else if i % 5 == 0 { message = message + "Buzz\n" } else { //整数と浮動小数点数のキャストは簡単なのですが、 //整数と文字列のキャストはこのように厳密にやらなくてはいけません。 var s string s = strconv.Itoa(i) message = message + s + "\n" } } return message }ちょっとした考察
- WEBアプリなどで言語の処理速度がボトルネックになることはまずない(DBがボトルネックになりやすい)ので、速度を目的にしてGoをチョイスするのは微妙かなと思いました。(DBとかが介在しない自動売買のBOTとかには良いです。)
- PHPにあってGoにないものとしてフレームワークの存在があります。 言語として記述をシンプルにしているのでフレームワークは(現状)不要、と言う考え方もできますが、 PHPなどの他の言語ではフレームワークを使用することによって、記述のシンプルさや統一性を担保しているとも言えるので、この点でもGoの優位性は微妙かなと思いました。(個人的にはGoそもそものシンプルさは好きです。)