Goを始めてみた
Python歴(≒プログラミング歴)1年のエンジニアがGoを始めてみたよというお話です。
記憶が新しいうちに参考にした記事なども共有したいと思います。
教えてくれてありがとうございます
なぜGoを始めたのか
弊社では現在サーバレスアーキテクチャでAWS Lambdaを使うときには、Pythonで実装しています。
が、将来的には「実行速度」「メモリ効率」の観点からGoを採用したいと言うことを聞いたので、勉強するか!となりました。
Pythonとの違いとして、静的型付き言語という点で新たな発見がありそうですし、あとは、Go書けたらなんか良い感じな気がしたからです🤔
学習方法
Pythonの学習方法として、AtCoderのA,B問題を中心に解き、先輩エンジニアにレビューしてもらっていました。
↓詳しい方法は以下の記事をご覧ください
その際に書いたコードのアルゴリズムを変えずに、Goでリプレイスしていくことで学習を進めています。
環境構築
Goのインストール
本当にこれだけなんです。
brew install go
↓こちらの記事を参考にしました
Goを書いてみる
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
go run main.go
で実行
以下のエラーになりました。(詳細は後述)
go: no module declaration in go.mod. To specify the module path:
Goモジュールについて
Goモジュールは、Go言語で依存関係を管理するための仕組みです。
従来の方法では、GOPATHに指定したディレクトリ配下にパッケージをインストールすることで依存関係を解決していましたが、複数のプロジェクトで同一のパッケージを使用する場合に問題がありました。
そこでGoモジュールでは、プロジェクトごとに必要なパッケージを取得し、そのバージョン管理を行うことで、依存関係を解決してくれます。
先ほどのエラーは標準ライブラリであるfmtモジュールをimportしてるのにGoモジュールを導入してなかったから起きたようでした。
以下のコマンドをプロジェクトのルートディレクトリで実行するとgo.mod
というファイルが作成されます。
go mod init example.com/myproject
module example.com/myproject
go 1.20
再度実行するとエラーにならずHello, World!
が出力されました。
補足:モジュールの追加
外部ライブラリを使用する場合は、go.mod
にその依存関係を指定する必要があります。
以下の方法でモジュールを追加できます(fmt
は標準ライブラリなので今回は何も追加されてません)
- コードで必要な
import文
を書くgo mod tidy
を叩く- 初回だと、
go.sum
ファイルが生成される
ライブラリ、パッケージ、モジュールなどごっちゃになってきたのでちゃんと理解したいです。まだ曖昧です。
↓参考にした記事を貼っておきます。
PythonとGoのパフォーマンス比較
AtCoderの同じ問題を同じアルゴリズムで解いてます。
まとめ
Goすげーーー😲
でも、初心者が学びやすいPythonもありがとう。
まだまだ始めたばかりなのでがんばります〜
Discussion