Go開発者への道 第1回 DockerでGoの環境構築

Docker

Goの学習を始めた方はまず「A Tour of Go」で勉強すると思いますが、その後Goについてどう学ぼうか悩むと思います。そんな人向けに何回かに分けて、Goを学べる記事を書いていこうと思います。
まずは第1回目なので、自分のローカル環境で試せるように、Docker上でGoを動かせる環境を作る方法を紹介します。
また実行環境はMacやLinuxの環境を想定しています。

準備

以下のGitHubにサンプルコードを置いているので、こちらをgit cloneしてもらえれば使えます。

GitHub - SND1231/go-column at go-column-1
Go コラムのサンプルコードをこちらに残す. Contribute to SND1231/go-column development by creating an account on GitHub.

それか同じファイル構成を作ってもらって、ファイルの中身をコピーしてもらえたらと思います。

ファイル構成(READMEはコピー不要)

.
├── README.md
├── docker-compose.yml
└── src
    └── hello.go

docker-compose.yml

イメージはgoの1.19バージョンを使用
volumesで./src配下を全てマウントする。
/workで基本作業します。
ttyをtrueにすることで、コンテナが正常終了するのを防ぎます。

version: "3.9"
services:
  go-env:
    image: golang:1.19-bullseye
    volumes:
        - ./src:/work
    working_dir: /work
    tty: true

hello.go

単純に、「Hello world!!」を出力するソース。

package main

import "fmt"

func main() {
	fmt.Println("Hello world!!")
}

実行

docker-compose.ymlがあるディレクトリで、docker-compose upをしてコンテナを立ち上げる。

# docker-composeを立ち上げる
% docker-compose up
[+] Running 1/0
 ⠿ Container go-go-env-1  Created                                                                                                  0.0s
Attaching to go-go-env-1

別タブでターミナルを開いて、立ち上げたコンテナに接続する。

# docker psで立ち上げたコンテナを確認
% docker ps                       
CONTAINER ID   IMAGE                  COMMAND   CREATED         STATUS         PORTS     NAMES
f9cb5418f139   golang:1.19-bullseye   "bash"    9 minutes ago   Up 9 minutes             go-go-env-1
# コンテナに接続、go-go-env-1はコンテナのNAMES
% docker exec -it go-go-env-1 bash
# ワークディレクトリ(/work)にいることを確認
root@f9cb5418f139:/work# pwd
/work

go run hello.goを実行すると、「Hello world!!」が出力されていることを確認できます。

root@3ceb10d09fa5:/work# go run hello.go 
Hello world!!

まとめ

今回Docker上でGoを実行できる環境を作る方法を紹介しました。
次はgo modやパッケージについての記事を書いて行こうと思います。
また今回の記事以外にもGo言語の記事、初心者必見のLinuxコマンドについての記事を書いておりますので、もし興味がありましたら、そちらも読んでいただけたらと思います。

次の記事

【おすすめ記事のリンク】

コメント

タイトルとURLをコピーしました

Fatal error: Uncaught JSMin_UnterminatedStringException: JSMin: Unterminated String at byte 705: "どの言語でも勉強を始める際には、ローカル環境で動かせるようにしたいと思います。 in /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php:214 Stack trace: #0 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(152): JSMin->action(1) #1 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(86): JSMin->min() #2 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(257): JSMin::minify('{"@context":"ht...') #3 [internal function]: AO_Minify_HTML->_removeScriptCB(Array) #4 /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(108): preg_replace_callback('/(\\s*)(<script\\...' in /home/c5287456/public_html/engineer-want-to-grow.com/wp-content/plugins/autoptimize/classes/external/php/jsmin.php on line 214