🐀

Goを始めてみた

2023/04/24に公開

Python歴(≒プログラミング歴)1年のエンジニアがGoを始めてみたよというお話です。
記憶が新しいうちに参考にした記事なども共有したいと思います。


教えてくれてありがとうございます

なぜGoを始めたのか

弊社では現在サーバレスアーキテクチャでAWS Lambdaを使うときには、Pythonで実装しています。
が、将来的には「実行速度」「メモリ効率」の観点からGoを採用したいと言うことを聞いたので、勉強するか!となりました。
Pythonとの違いとして、静的型付き言語という点で新たな発見がありそうですし、あとは、Go書けたらなんか良い感じな気がしたからです🤔

学習方法

Pythonの学習方法として、AtCoderのA,B問題を中心に解き、先輩エンジニアにレビューしてもらっていました。
↓詳しい方法は以下の記事をご覧ください
https://zenn.dev/x_point_1/articles/0dc91f4c53bc1f

その際に書いたコードのアルゴリズムを変えずに、Goでリプレイスしていくことで学習を進めています。

環境構築

Goのインストール

本当にこれだけなんです。

brew install go

↓こちらの記事を参考にしました
https://zenn.dev/creamstew/articles/20e7a00c2eb161edbb1e

Goを書いてみる

main.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
go.mod
module example.com/myproject

go 1.20

再度実行するとエラーにならずHello, World! が出力されました。

補足:モジュールの追加

外部ライブラリを使用する場合は、go.modにその依存関係を指定する必要があります。
以下の方法でモジュールを追加できます(fmtは標準ライブラリなので今回は何も追加されてません)

  1. コードで必要なimport文を書く
  2. go mod tidyを叩く
  3. 初回だと、go.sumファイルが生成される

ライブラリ、パッケージ、モジュールなどごっちゃになってきたのでちゃんと理解したいです。まだ曖昧です。
↓参考にした記事を貼っておきます。
https://osamu-tech-blog.com/go-go-modules/
https://blog.framinal.life/entry/2021/04/11/013819
https://zenn.dev/yoonchulkoh/articles/9729d9e1304738

PythonとGoのパフォーマンス比較

AtCoderの同じ問題を同じアルゴリズムで解いてます。

まとめ

Goすげーーー😲
でも、初心者が学びやすいPythonもありがとう。
まだまだ始めたばかりなのでがんばります〜

GitHubで編集を提案
エックスポイントワン技術ブログ

Discussion