20220112のGoに関する記事は2件です。

Goの良さを語りたい

一言で言うなら「はやく作って はやく改(なお)せる」のが Go 最大のメリット Googleが開発した言語、流行らないわけがない…!(個人的感想) もちろん苦手な領域もある → https://zenn.dev/nobonobo/articles/3f5310248567a1 ◆Go入門(基礎の基礎) https://zenn.dev/ak/articles/1fb628d82ed79b ◆初心者がGoで気を付けること https://zenn.dev/nobonobo/articles/e0af4e8afc6c38b42ae1 ネイティブコード出力で実行効率が良い コードの可読性を重視している 開発でよく使うツールがバンドル クロスビルドが簡単にできる コンパイルが遅くない(LLライクにrunできる) 並行処理の抽象化を組み込み言語仕様にもつ メモリ安全である 各解説は以下で https://zenn.dev/nobonobo/articles/e651c66a15aaed657d6e シンプルさがGo言語が成功に至った本質的な理由 少なくとも既存の有名な言語と比較してシンプルに見える シンプルさとは多面的である シンプルさを実現するには複雑なことを沢山考えなければいけない シンプルさを維持するために犠牲にしたものとは? 勿論Go言語はシンプルさを維持するために犠牲にしてるものがあり、これはトレードオフであると作者は述べている。具体的には以下のトレードオフである 書いていて楽しい言語 or メンテナンス性が高く、扱いやすい言語 このトレードオフが存在する中で、Go言語で実装された機能の大半は「長期的な目線におけるメンテナンス性の高さ」を重視して採用されたものであると述べている ツールチェーン まず他の良さについて語る上でも欠かせないのがツールチェーンの良さです。ツールチェーンとはビルドツールから始まり、linter、Language Serverなどがあります。 ビルドツール go コマンドはコンパイラもリンカーも内包しています。go buildでビルドを実行するとgo.modによる依存の解決からバイナリの生成まで実行します。多くのユースケースにおいてほとんどコンパイルオプションを意識する必要はありません。常に最適化はかかりますし大凡常に静的リンクです。 最近ではnetパッケージの一部がlibcに依存している部分があったりしますが、 CGO_ENANBLED=0 の環境変数を付けてコンパイルすれば完全にlibc非依存となります。libc非依存にできることの最大の恩恵はクロスコンパイルの容易さです。GOOSやGOARCHの環境変数で様々なOS、アーキテクチャへクロスコンパイルが可能です。 goコマンドはビルドだけでなくフォーマッターも内包しており多機能です。これを https://golang.org/dl からダウンロードして展開するだけで良いので、環境構築が難しく困ることはほぼほぼないでしょう。 また、大体最新のバージョンを使っておけば困らないというのも嬉しい点です。goenv などでバージョンを切り替えることもできますが、Goは後方互換性が強く各バージョンの安定性も高いためgoenvを使っていないという人も結構多いと思います。私は使っていません。 新しいバージョンが出ていてまだメインのGoをあげるのは怖いけど試してみたいという人は $ go get golang.org/dl/go1.15.3 $ go1.15.3 download のようにするだけで特定のバージョンを試すことができます。 参考: https://twitter.com/golang/status/1316490217591840769 linter Goは静的解析が盛んな言語です。golang.org/x/以下の準標準パッケージには静的解析を行うために必要なパッケージが充実しています。これらを利用して、様々なlinterが開発されています。 広く使われていて有名なlinterツールとしてgolangci-lint があります。golangci-lintは様々なlinterをまとめて使えるようにしたもので、 .golangci.yml に書いた設定に沿ってlinterを実行してくれます。CI、特にGitHub Actionsとの連携は非常に簡単ですのでオススメです。 ↓こんな感じ golangci-lint w/ GitHub Actions 出典: https://github.com/golangci/golangci-lint-action/blob/853ade09ed4bc145ab0a4443299ab0536fea02fb/static/annotations.png ただ、golangci-lintは設定を書くのがかなり面倒なため社内で共通のテンプレート化されていることがほとんどでしょう。これを個人で用意するのは地味に面倒だったりします。もう少しシンプルでいいのならgo vet でもある程度のことができます。 自分で独自のlinterを書きたい場合は golangci-lintのHow to write a custom linterを参考にすれば書けます。golangci-lintのcustom linterはgolang.org/x/tools/go/analysis.Analyzer をベースとして作成します。これをベースとすることでCLIにしたり他のツールとの連携が楽になります。 最近私はGoのstructからTypeScriptを生成するライブラリgo2tsを書いたのですが、これは解析にgolang.org/x/tools/go/packagesを利用しています。go.modまでみて型解決も行ってくれるので複雑な解析には便利です。go2tsについてはまた今度記事を書きたいですね。 もっと静的解析について知りたい方はtenntennさんがそのあたりの情報を沢山発信されているので参考になります。mercari Gophers Office Hoursでも静的解析について取り扱っている回がありました。Goにおけるlinterはコーディング規約を守らせるという側面ももちろんありますが、バグを防ぐためのlinterとしての側面が大きいのが特徴です。代表的なところでいうと、 io.Closerの閉じ忘れ等。Goは型システムがそこまで強くない代わりに静的解析によって安全性を担保する仕組みが充実しています。 また、コード生成の仕組みも充実しており、詳細は省略しますがモックやOpenAPI、GraphQLサーバなども自動生成します。 Language Server gopls(発音はGo Pleaseっぽい?)という公式で開発されているLanguage Serverがあり、比較的新しいですが安定してきています。各種エディタにLSP対応の拡張を入れれば快適に動作します。シンプルな言語仕様故、補完が効かない、みたいなことはほとんどありません。 pkg.go.dev 以前はWebでドキュメントを読むのはgodoc.orgでしたが今ではGo Modulesに対応したpkg.go.devに移行しつつあります。ソースコード上に書いたコメントなどをまとめて見やすくしてくれるやつです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Go言語について

目次 1 Go言語の概要 2 Go言語の特色 3 Go言語で開発されているもの 4 まとめ Go言語の概要 Go言語は2009年にGoogleが開発したオープンソースのプログラミング言語である。 開発にはC言語の設計者やUNIXの開発者等の人物がかかわっている。 また、初期はLinuxとMac OSのサポートだったが、2013年にリリースされたバージョン1.0からはWindowsにも対応するようになった。 Go言語の特色 Go言語はシンプルで高い信頼性をもつ効率的なソフトウェアを構築できる言語とされている。 Go言語はシンプルな構文のため、ほかの人が読んでも分かりやすいプログラミングを書きやすい。 また、高速な処理や並列処理が可能なため作業効率を上げることができる。 しかしGo言語はシンプル性を高めるために機能が最小限に抑えられており「例外処理」、「Generics」、「継承」等の機能が無いというデメリットも存在する。 Go言語で開発されているもの Go言語は主にスマートフォンアプリの開発、ドローンやロボットの組み込み開発、Webサービス、Webサーバーの構築等に使われている。 具体的な例 動画配信サービス「YouTube」 料理レシピの投稿・検索サービス「クックパッド」 フリマアプリ「メルカリ」 飲食店の情報を集めたウェブサイト「ぐるなび」 ニュース配信アプリ「Gunosy」 まとめ Go言語は今はまだPythonやJavaといった人気のある言語と比べると求人の数は少ないが、最新のIT技術でも活用しやすい点や大規模な開発をしやすい点、また2020年に行われた「エンジニアが学びたいプログラミング言語ランキング」では1位を取っている点からも将来性に期待でき、これからプログラミング言語を学びたい人におすすめの言語になっていると思う。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む