C言語と最近のモダンな言語(Java、C#、Pythonなど)のいいとこ取りをした感じ
- C言語的要素
基本的にGo言語はコンパイラ言語であり、ビルドを実行すると機械語に変換されるのですが、
機械語は直接CPUに命令を出す形式なので、めちゃくちゃ動作スピードが早いです。
コンパイラ言語はGo言語以外に、C言語、C++、Rust等があります。
また、Go言語はクラスという概念は存在しないので(似たようなパッケージという概念はありますが)、
その点も同じと言えます。
- Java的要素
モダンな言語だと、C言語には無かったListのような、要素を自由に追加削除できるるような仕組みがあります。
最近の言語だから、こういった仕組みなども扱えるようになっています。
また、例外処理(try-catch)のような仕組み(panic-recover)も用意されています。
- Python的要素
Pythonのようなスクリプト言語はソースファイルをあれこれ変換しなくてもすぐに実行できるのが特徴ですが、Go言語もいちいちビルドする必要は無く、ソースコードの状態のままで実行できるオプションが用意されています。
$ go run main.go
パッケージのルールとかパスとか
- プロジェクト作成時にパッケージ名(example.co.jpのような形式)を入力する
これは、Javaでのパッケージ名と同じような物。
外部のモジュールをimportして使用する場合、パッケージ名から指定する必要があります。
import (
"context"
"encoding/json"
"net/http"
"os"
"example.co.jp/xxx/common"
"example.co.jp/xxx/logger"
paapi5 "github.com/goark/pa-api"
"github.com/goark/pa-api/entity"
"github.com/goark/pa-api/query"
)
- 1フォルダにパッケージは一つのみ
プロジェクトを作成しているときに、「上手くいかないなぁ」って思っていたのですが、これが原因でした。
正直ソースファイルのフォルダ分けがめんどくさいと思いました。
そして、1フォルダの中は同じパッケージであれば複数ソースファイルを設置できます。
(ここがJavaの感覚と違っていて間違えやすい)
importするときは、パスのみを指定すればよいです。
関数名、変数名の先頭の大文字小文字
Go言語において、関数名や変数名の先頭の大文字小文字は、パッケージ外からアクセスが可能か、という意味があり、これを間違えると、「パッケージ外からアクセスできねー(サジェストに出てこない)」という事態になりがち。
厳密な言語書式
C言語やJavaでは、関数宣言のあとの開始中括弧「{」の位置にコーディングルールやコーダーの好みとかいろいろバラバラなのですが、Go言語では言語仕様で「関数宣言の後の同じ行」と定められています。
これはいちいちコーディングルールを作成する手間を省くためとも言われています。
(あと、結果的にIDE等開発コストも少なくなったとか)
他には、未使用変数や不要なimport宣言も許可しておらず、ビルドエラーとなるのも良いですね。
IDEを使用していると、保存時に自動的に消されてしまいますが、これは実際書いていていろいろフラストレーション溜まるので、賛否両論ありそう。
一応、書式を整えてくれるオプションもあるんですけどね。
$ go fmt
とりあえず、一つ作品を作ってみたのですが、
インターフェースとかゴルーチンとか、触っていない機能もあるので、今後も勉強続けていきます。