Open5

Go言語勉強メモ

えーはぶえーはぶ

概要

仕事で使用するためGoの勉強メモ

環境

  • OS
    • Ubuntu 23.10
  • ほか特に書くことない

ゴール

  • Ginで適当なWebAPIを作成
  • Cobraで適当なアプリを作る

仕事ではGinを使ってAPIを作成するとのことなので最終的にはこれで適当なのを作れるようになるのを目標。
あと上司が「Cobraは良いゾ」とのことなので喫煙所会話でついていけるようにこっちも勉強する。

えーはぶえーはぶ

HelloWorldしてみる

開発環境構築

下記を参考にGoをインストール
https://qiita.com/nsd24/items/7ca62a054ec09c799e1b

$ sudo apt install golang
$ go version
go version go1.21.1 linux/amd64

良さげ!

Helllo World!

同じ記事を参考にHello World
適当な場所でhello.goを作成して下記記入。

hello.go
package main

import "fmt"

func main() {
  fmt.Printf("Hello World!\n")
}

実行する

$ go run hello.go
Hello World!

ウン!良いゾ!

ついでに深堀り

見た感じGo言語のPrintは標準のfmtってパッケージに入ってるっぽい。
調べてみると3種類あり、用途によって使い分けてるんだ。
https://zenn.dev/mkosakana/articles/97466310534b4c

ふけぇ…(キョムリ)

えーはぶえーはぶ

Cobraを入れてみる

CobraはGo CLIアプリ作成ツールで、なんか凄い早いCLIが作れるそうな。
使用例ではHugo や Kubernetesでも使われてるそうな。すごい!

※ジブラ

とりあえず適当なチュートリアルを参考に手を動かして勉強していく
今回参考にしたのはこちら
https://qiita.com/kbys-fumi/items/86b6a9dbbf03c7bbdf9b

インストール

Cobra/Cobra CLIをインストール
こちらのコマンドを実行

$ go get -u github.com/spf13/cobra@latest
go: go.mod file not found in current directory or any parent directory.
	'go get' is no longer supported outside a module.
	To build and install a command, use 'go install' with a version,
	like 'go install example.com/cmd@latest'
	For more information, see https://golang.org/doc/go-get-install-deprecation
	or run 'go help get' or 'go help install'.

出鼻をくじかれていきなり嫌になる。
下記を参考にすると、先にgo.mod作っておく必要があるそう。
https://qiita.com/abemaru/items/c64c5b484bbe5c13f854

$  go mod init HelloCobra
go: creating new go.mod: module HelloCobra

 $ go get -u github.com/spf13/cobra@latest
go: added github.com/inconshreveable/mousetrap v1.1.0
go: added github.com/spf13/cobra v1.8.0
go: added github.com/spf13/pflag v1.0.5

やったか?

続いてCobraCLI

$ go install github.com/spf13/cobra-cli@latest
# 画面出力は省略
# 雛形作成
$ cobra-ci
コマンド 'cobra-ci' が見つかりません。もしかして:
  command 'cobra-cli' from deb cobra-cli (1.3.0-3build1)
次を試してみてください: sudo apt install <deb name>

う〜ん、この。
とりあえずGOPATHでディレクトリ特定して中身みるとインストール自体はできてるっぽい

$ go env GOPATH
/home/XXX/go
$ ll /home/XXX/go/bin/
合計 43492
drwxrwxr-x 2 XXX XXX     4096  211 11:35 ./
drwxrwxr-x 4 XXX XXX     4096  211 10:44 ../
-rwxrwxr-x 1 XXX XXX  8791501  211 11:08 cobra-cli*
-rwxrwxr-x 1 XXX XXX  5531963  211 11:35 goimports*
-rwxrwxr-x 1 XXX XXX 30199285  211 11:35 gopls*

パスを通してあげるとコマンドが通った!ヨシ!

$ export PATH="~/go/bin:$PATH"
$ source ~/.bashrc 
$ cobra-cli 
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

Usage:
  cobra-cli [command]

Available Commands:
  add         Add a command to a Cobra Application
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  init        Initialize a Cobra Application

Flags:
  -a, --author string    author name for copyright attribution (default "YOUR NAME")
      --config string    config file (default is $HOME/.cobra.yaml)
  -h, --help             help for cobra-cli
  -l, --license string   name of license for the project
      --viper            use Viper for configuration

Use "cobra-cli [command] --help" for more information about a command.

雛形を作成

$ cobra-cli init --license MIT --viper=false


雛形ファイルがたくさん作られたのでヨシ!

とりあえずこのまま実行してみると雛形に記載されている文章が表示される。

$ go run main.go
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.
えーはぶえーはぶ

Ginを触ってみる

一旦CobraはおいておいてGinのセットアップをして簡単なWebアプリを作ってみようと思ったけど、下記のチュートリアル触ってたら特に問題も起こらずスムーズにできてしまったので特に書くことなし。
https://go.dev/doc/tutorial/web-service-gin

Docker化してみる

下記を参考にDocker化し、ついでにAirを使ってホットリロードしてみる。
https://www.ariseanalytics.com/activities/report/20230531/

できたやつ

えーはぶえーはぶ

ゴールを決める

そろそろゴールを決めたいのでここから下記のロードマップで最終的にフロントエンドの基本のTodoアプリを作ってみる。

  1. DB接続できるようにする
  2. DDD駆動型のディレクトリ構成を考える
  3. 開発の基本になるテンプレを作成する
  4. フロントエンドを入れてTodoアプリを作ってみる

DockerにDBを追加

下記を参考にまずは真似をする
https://dev.to/umschaudhary/blog-project-with-go-gin-mysql-and-docker-part-1-3cg1