Golang 事始め
プロジェクトの初期設定方法(Linuxでの設定を想定)
path setting
export PATH=$PATH:/usr/local/go/bin
GOPATHを設定する。
export GOPATH=$HOME/go
GOPATH/binをPATH上に設定する。
export PATH=$GOPATH/bin:$PATH
モジュールの管理
初期設定
go mod init
参考文献
ORMメモ
GORMの解説記事
ent
GORMよりも後から開発されている?ORM
Facebookのエンジニアの方が開発されている。
複雑なデータモデルを扱うケースなどに良さそう。
ent はGoのためのシンプルかつ強力なエンティティフレームワークです。このフレームワークを使うことで,大量のデータモデルをもつアプリケーションのビルドとメンテナンスを簡単に行うことができ、次のような原則に従うことができます:
公式ドキュメント
日本語化も進んでいるようです。
entの使い方
entの使い方は次のmattnさんの記事が参考になります。
画像処理について
以下のチュートリアルを参考に実装
メモ
以下のサイトを参考に初期化処理を以下のように加えた。
初期化処理を実施しないと、画像を読み込む際に、unknown format errorが発生した。
このエラーは、画像処理をする際に最初に読み込む画像ファイルのフォーマットを指定しないと、おそらくライブラリ内でフォーマットが指定されず処理できない?ことによるエラーかと推測している。
2021/03/13 20:14:53 image: unknown format
ちなみにinit関数はmain関数の前に処理を実施できる関数であり、利用するライブラリの初期化処理などに利用できるとのこと。
以下のサイトがinit関数について非常にわかりやすくまとめてあった。
アサインメントについて
Inside a function, the := short assignment statement can be used in place of a var declaration with implicit type.
関数内で:=と表記された際には、暗黙的な型として宣言できる。
Outside a function, every statement begins with a keyword (var, func, and so on) and so the := construct is not available.
関数外では、すべての式はキーワード(var, funcなど)で始まり、:=は利用できない。
クロスコンパイル for Windows
$ GOOS=windows GOARCH=386 go build -o hello.exe hello.go
In cmd.exe instead of PowerShell:
$ set GOOS=windows
$ set GOARCH=386
$ go build -o hello.exe hello.go
Go言語に関するFAQ
なぜGo言語は型を変数名の後に記載するのか?
StackOverflowの以下の回答が参考になる。
That matters because putting the optional parts of an expression farther to the right reduces parsing ambiguity, and increases consistency between the expressions that do use that part and the ones that don't.
設計指針の理解につながりそう。
Secure Coding Guide
以下のような形でGoのtipsがまとめられている。
Codingで困ったときに参考になりそう。
- validation
- connection pool
- 同時代入
- 他言語から入ってきた人がよく扱う間違い(ループ内でdeferを利用)
go getしたコマンドがコンソール上で使えない
原因:go getで取得したコマンドは$GOPATH/binに配置されている。
PATHが上記で設定されていなかったため、タイトルの事象が起きていた。
解決方法:PATHに$GOPATH/binまで含めるようにすることで解決した。
可変長引数
func Sum(nums ...int) int {
res := 0
for _, n := range nums {
res += n
}
return res
}
//Sum(1,2)
//=>3
//Sum(1,2,3,4)
//=>10
Playground
Reference
Goのコード共有方法
The Go Playgroundにてコードスニペットを貼り付けてそのまま共有できる。
とても便利。
Golangこんなコードどう書くの?
以下の逆引きGolangのサイトがとてもよくまとめられている。
Goのコーディング標準スタイルガイドライン
security、codingスタイルのチェック、テストの書き方など網羅的にカバーされており非常に良い。
Goのディレクトリの設定について
以下のリポジトリが説明もあり参考になる。
srcディレクトリは作成してはいけない。
シンプルなプロジェクトではやりすぎである。
If you are trying to learn Go or if you are building a PoC or a simple project for yourself this project layout is an overkill. Start with something really simple instead (a single main.gofile andgo.mod is more than enough)
参考サイト
Go言語の素晴らしいtoolchainについて
以下の記事が大変参考になる。
チートシート