- 1. Go言語(Golang)の指標分析のライブラリ(特に金融指標)
- 2. Raspberry Pi 4 model B で Golangを使う
- 3. Web開発エンジニアになるために
- 4. sqlcでType Overrides の活用とgo-optionalの話
- 5. 【Go】配列(スライス)などの値を標準出力でデバッグするときは、エスケープして出したほうがいいかもという話
- 6. golangci-lintとgolangci-lint-actionを使った開発メモ
- 7. 障害になる前に知っておくべき、sql.Rowsのコネクション管理
- 8. [GCP]Cloud Run services
- 9. Go・GORMチートシート
- 10. Goのjson.Marshalで非公開フィールドも出力する方法
- 11. golangで、brainfuckソースをx86_64アセンブリに落とすコンパイラを書いてみた。[習作]
- 12. ヘキサゴナルアーキテクチャでポケモンバトルを実施する。(Step2: coreのテスト実装)
- 13. ヘキサゴナルアーキテクチャでポケモンバトルを実施する。(Step1: coreの実装)
- 14. Goでクラス図を自動生成する
- 15. Hugoを使って爆速で静的サイトを作ってみる
- 16. Go言語:Go1.22 で機能強化された net/http.ServeMux について、ちょっとしたこと
- 17. 【Go】EchoとmongodbをDockerで環境構築して、実装とテストまでやってみた
- 18. なぜgo.workはリポジトリにコミットすべきではないのか
- 19. golang-migrateでマイグレーションをやってみる[Mac]
- 20. GoとLaunchDarklyでフィーチャーフラグを実装する
Go言語(Golang)の指標分析のライブラリ(特に金融指標)
– **go-trader**
GitHub: [saniales/go-trader](https://github.com/saniales/go-trader)
包括的な取引ボットフレームワークで、技術指標の計算機能も含まれています。– **techan**
GitHub: [sdcoffey/techan](https://github.com/sdcoffey/techan)
技術分析に特化したライブラリで、多くの一般的な指標をサポートしています。– **gofinance**
GitHub: [FlashBoys/go-finance](https://github.com/FlashBoys/go-finance)
金融データの取得と分析のためのツールキットで、いくつかの技術指標も含まれています。– **go-finance**
GitHub: [alpeb/go-finance](https://github.com/alpeb/go-finance)
金融計算のためのライブラリで、技術指標の計
Raspberry Pi 4 model B で Golangを使う
# Raspberry Pi でGolangを使えるようにする
Golang公式からlinuxのarm64をダウンロード
“`
wget https://go.dev/dl/go1.23.1.linux-arm64.tar.gz
sudo tar -C /usr/local -xzf go1.23.1.linux-arm64.tar.gz
rm -rf go1.23.1.linux-arm64.tar.gz
“`“`
# /usr/local/go/配下にgoがインストールされる
ls /usr/local/go/# パスを通す
nano ~/.bashrc
export PATH=$PATH:/usr/local/go/bin
source ~/.bashrc
go version# 適当なディレクトリで
go mod init go-sample
touch main.go
nano main.go
“`
“`
package mainimport {
“fmt”
}func main() {
fmt.Pri
Web開発エンジニアになるために
# 目次
1. Webエンジニアとは
1. そのために必要な知識
1. 現在の研究と業務のつながり
1. まとめ# Webエンジニアとは
主に, フロントエンドとバックエンドの2つに分ける. ユーザからみてわかるフロントと在庫数やカード情報の照会等を行うバックエンドから成る.# そのために必要な知識
1. インターネットについて
1. OSについて
1. データベースについて
1. APIについて
1. プログラミング
1. セキュリティ多くの知識を必要とする.
>引用 https://tech-parrot.com/engineer/backend-engineer-roadmap-and-skills/#i-2# 現在の研究と業務のつながり
セキュリティについて学ぶ ➡ 必須の知識となる(特に, バックエンドエンジニア)# まとめ
多くの知識を必要とするため, 勉強量も凄まじいことになる. 現研究と並行して空き時間でGoやRubyの勉強を行う必要があるのではないか. シンプルに用語の理解を深める必要もある.
sqlcでType Overrides の活用とgo-optionalの話
[前回](https://qiita.com/ktat/items/ddf0e5e510279503feee)、[前々回](https://qiita.com/ktat/items/2ed13afcd29f49aee6a1)に続き、sqlcの話です。もう少し続きます。
## Type Overrides
sqlcは、YAMLで設定を書きますが、`overrides`という項目があります([ドキュメント](https://docs.sqlc.dev/en/stable/howto/overrides.html))。これは何かというと、DBの型に対するGoの型(例えば、`VARCHAR`を`string`にする)のデフォルトを上書きできるというものです。
ちなみに、実際これを使わないと、MySQLの`DECIMAL`はGoの`string`になってしまいます。
### MySQLの`DECIMAL`にGoの型(`decimal.Decimal`)を指定する
MySQLの型をGoの型で置き換えるためには、sqlc.ymlの`overrides`に、以下のように書きます。
“`y
【Go】配列(スライス)などの値を標準出力でデバッグするときは、エスケープして出したほうがいいかもという話
普通に出力した場合
“`go
arry := []string{“a b”, “c”, “d”}
fmt.Println(arry)
// [a b c d]
“`
“a b” は一つのアイテムであるが、普通に出力するとアイテムごとに空白で区切られてしまうので分かりづらい。エスケープして出してみる
“`go
arry := []string{“a b”, “c”, “d”}
fmt.Println(fmt.Sprintf(“%#v”, arry))
// []string{“a b”, “c”, “d”}
“`
printf系の関数を使って、書式指定子を `%#v` とする。
`#`をつけることで、Go構文表現のままで出力してくれるので認識しやすい。参考にしたもの
https://qiita.com/KEINOS/items/9bf8d33b0c616f85ba4a
https://pkg.go.dev/fmt
golangci-lintとgolangci-lint-actionを使った開発メモ
# 概要
ローカルの `golangci-lint` のバージョンとCIの `golangci-lint-action` による `golangci-lint` のバージョンの違いでたびたび詰まることを観測したのでざっと調べたメモ
# 背景
チーム共通のアクションに `golangci-lint-action` を組み込んでおり、golangのプロジェクトでは `.golangci.yaml` を直近のプロジェクトからコピペして使い回す運用になっていた。
`golangci-lint-action` はversionの指定ができるが、チーム内であまり認識されていなく、CIの設定でも”stable”を固定にしていることが多い。
基本は最新を使っていくと安全なはずなので、”stable”は良いが、 `.golangci.yaml` の使い回しが良くない。
この辺りどう運用していくのが良いのかざっくり考えてみる
# 公式のドキュメント確認
> IMPORTANT: It’s highly recommended installing a specific version of
障害になる前に知っておくべき、sql.Rowsのコネクション管理
標準パッケージ`database/sql`を使用したDB操作では、コネクションが適切に開放されるよう注意する必要があります。誤った実装をすると、SQLの実行が終了してもコネクションが開放されず、コネクションプールが枯渇してしまいます。その結果、新規SQLを実行できずアプリケーションが応答しなくなり、システム障害になる可能性があります。
今回は、コネクションの開放において、`database/sql`パッケージの`Rows`構造体(`sql.Rows`)を利用する際に知っておくべきことを、アンチパターンと共に紹介したいと思います。
# コネクションプールについて軽くおさらい
`database/sql`パッケージの`DB`構造体(`sql.DB`)のQueryメソッドやExecメソッドを呼び出すと、`sql.DB`はコネクションプールから利用可能な接続(idleな接続)を取得するか、ない場合は新規接続を作成します。接続が不要になるとクローズして、接続をプールに返します。オープンな接続の最大数はデフォルトで無限ですが、`db.SetMacOpenConns()`で最大接続数を設定可
[GCP]Cloud Run services
[公式ドキュメント](https://cloud.google.com/run/docs/overview/what-is-cloud-run?hl=ja)をベースに自分の言葉でまとめた記事。
初稿は1,2年前に限定共有で作成し、継ぎ足し継ぎ足しで書いてきたので、ちょっとおかしい点あるかもしれませんがご了承ください。注意
[Cloud Run jobsはまた別のGCPサービスです](https://qiita.com/WisteriaWave/items/d7507510840eea141ece)。# 1. 概要
**フルマネージドでサーバレス**なコンテナサービス。Kubernetesの機能を気軽に利用できる。
主な用途はAPI, Webアプリケーション、ストリーミング。
Webサーバの役割(HTTP/gRPC対応)はCloud Runが吸収してくれる。
デプロイは数秒で完了、スケーリングもいい感じに自動でやってくれる## リソースモデル
|![x](https://cloud.google.com/static/run/docs/images/resource-mod
Go・GORMチートシート
本記事ではgo言語の超基礎を記載する.初めてgoを学ぶ人向けに最低限知ってほしいことのみまとめたので本記事を読み切ると基礎を学ぶ/復習することができます!おまけにgo向けのORMのgormチートシートもあります.
# 他のチートシート
git/ghコマンドhttps://qiita.com/JavaLangRuntimeException/items/6b46551f56e0def76eba
SQL
https://qiita.com/JavaLangRuntimeException/items/f038fbaccdd92fb0308a
TypeScript
https://qiita.com/JavaLangRuntimeException/items/5894391c08e0d8e28389
Docker コマンド
https://qiita.com/JavaLangRuntimeException/items/21f7c7bf3d143f821697
ステータスコード
https://qiita.com/JavaLangRuntimeException/it
Goのjson.Marshalで非公開フィールドも出力する方法
## 背景
こんにちは。エンジニアのKennieです。
以前の業務で、非公開フィールドを持つ構造体をシリアライズする必要がありました。その際にデフォルトでのMarshalJsonではシリアライズすることができなかったので、その際に学んだことを記載します。## デフォルトのMarshalJsonを使用したコード例
まずは、Goのデフォルトの MarshalJSON を使ったシンプルなコード例を見てみましょう。以下のコードでは、公開フィールドを持つ構造体がJSONとしてシリアライズされています。“`go
package mainimport (
“encoding/json”
“fmt”
)type Person struct {
Name string
Age int
}func main() {
p := Person{Name: “Alice”, Age: 30}
data, err := json.Marshal(p)
if err != nil {
fmt.Println(“Error:”, err)
return
}
fmt.P
golangで、brainfuckソースをx86_64アセンブリに落とすコンパイラを書いてみた。[習作]
go言語を取り掛かるにしたら、何を書けばよいかを思案しているうちに、brainfuck compilerを書くことにした。やってることは難しそうに見えても、実際の処理は簡単だし、すぐにできるだろうと思って書いたが、変数のscopeで、ちょっと引っ掛かった。
### 実行
goはシバンをつけるのがややこしいので、`go run bfs.go
>out.s`としてコンパイルして下さい。
out.sはccでアセンブルできるので、`cc out.s`として、アセンブリファイルをアセンブル、
`$./a.out` で実行して下さい。### コメント
標準出力に結果が出力されます。やってることは、拙作のbfs.c,bfs.pyと一緒です。
https://qiita.com/fygar256/items/3274f1dfc14378645350
相変わらずエラー処理がプアです。人間は何をするかわからないから、エラー処理はいくらやってもキリがないので。ガベージイン・ガベージアウトです。
しかし、生まれて初めて書いたgolangのコードがbrainfuckコンパイラ
ヘキサゴナルアーキテクチャでポケモンバトルを実施する。(Step2: coreのテスト実装)
## はじめに
[前回の記事](https://qiita.com/koji0705/items/65246ce4dc0b12501216)の続きです。## テストコード
プロダクトコードに乱数を含むケースがあり、テストが安定しないため、プロダクトコードも一部修正しています。“`go:internal/core/move.go
package coreimport (
“math/rand”
“time”
)type Move struct {
Name string
Power int // 技の威力
Accuracy int // 命中率(0-100%)
Type string // 技の属性(例: 電気、炎など)
randSource *rand.Rand // 乱数生成器を保持
randomFactorFunc func() float64 // ランダムなダメージ倍率を計算する
ヘキサゴナルアーキテクチャでポケモンバトルを実施する。(Step1: coreの実装)
## はじめに
表題通り、ヘキサゴナルアーキテクチャでポケモンバトルを実装します。
今回はドメインのコアとなる部分を中心に実装していきます## 要件
### enititityの定義
1. ポケモンの定義
• 各ポケモンは以下のステータスを持つ。
• 名前: ポケモンの名前を保持する(例: “ピカチュウ”)。
• HP: ポケモンのヒットポイント。0になると戦闘不能となる。
• 攻撃力: ダメージ計算のために使用される攻撃ステータス。
• 防御力: 受けるダメージを軽減するための防御ステータス。
• 素早さ: バトルでの行動順を決定するためのステータス。
• 技のリスト: ポケモンが使用できる技のリスト(複数の技を保持)。
2. 技(Move)の定義
• 技は以下のプロパティを持つ。
• 名前: 技の名前(例: “10まんボルト”)。
• 威力: 技が持つ基礎ダメージ値。
• 命中率: 技が命中する確率。0~100%の範囲。
• タイプ: 技の属性(例: 電気、炎、草など)。
• 特殊効果(オプション): 特定の技が持つ追加効果(例: 相手をまひ状態にする
Goでクラス図を自動生成する
## はじめに
表題通り、Goでクラス図を自動生成します。goplantumlを使うと簡単に生成できます。https://github.com/jfeliu007/goplantuml
## 成果物
goplantumlを使うとクラス図を自動生成できます。
![pokemon_battle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/7ab56c06-31d0-0d2a-769f-b5a9ee7e3c24.png)## 準備
“`go:goplantumlのinstall
go install github.com/jfeliu007/goplantuml/cmd/goplantuml@latest
“`“`shell:PNG画像を生成するためのツール
brew install plantuml
“`## UMLを作成する
“`go:UMLを作成する
~/develop/pokemon_battle (feat/initial)$ goplantuml int
Hugoを使って爆速で静的サイトを作ってみる
## Hugoとは
– 静的サイトジェネレーターの1つ
– Go言語で開発された高速なHTMLサイト作成ツール
– 動的なデータベース等を使わず静的ファイルのみでサイトを構成する
– ビルドが非常に高速、セキュリティ面でのリスクが少ない、といったメリットがあるこの記事では、Hugoのインストールから簡単なサイトの作成までの流れを紹介します。
## 1. Homebrewをインストールする
“`terminal
$ /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`
(インストールコマンドは[Homebrew公式サイト](https://brew.sh/ja/)より)## 2. Hugoをインストールする
“`terminal
$ brew install hugo
“`“`terminal
$ hugo version
hugo v0.133.1+extended darwin/arm64 BuildDate
Go言語:Go1.22 で機能強化された net/http.ServeMux について、ちょっとしたこと
いささか、旧聞に属しますが、今年の初めに出た Go1.22 で HTTP サーバーのルーティングに使われる net/http.ServeMux の機能が強化されて、HTTPメソッドの指定ができるようになり、かつ URL パターン文字列にワイルドカードが使えるようになりました。例として、次のような書き方ができるようになりました。
“`
mux := http.NewServeMux()
mux.HandleFunc(“GET /test/{id}”, Test)
…
“`このように書くと、“` handler “` 側で “` Request.PathValue “` メソッドを使うことにより “` {id} “` の値を取得できるようになりました。
“`
func Test(w http.ResponseWriter, r *http.Request) {id := r.PathValue(“id”)
fmt.Printf(“id = %s\n”, id) // {id} の値が表示される
…
“`使えそうな機能強化ですが、ふと、疑問が頭
【Go】EchoとmongodbをDockerで環境構築して、実装とテストまでやってみた
# 1. はじめに
今回、Goを使ったAPIサーバーを構築しようとした際、アーキテクチャの知識やテストの方法などについて調べる機会があったので、忘備録も兼ねてこの機会にまとめようと思います。
アーキテクチャにも触れますが、今回の主題はechoとmongoを使った環境構築とテストですので、アーキテクチャが気になった方は他の記事も参考にしてください。今回のリポジトリです。
少々フォルダ構成が異なっていますがアーキテクチャ含め大部分は同じです。https://github.com/yupon-pro/go-mongodb
– [1. はじめに](#1-はじめに)
– [2. 環境構築](#2-環境構築)
– [2-1. Go](#2-1-go)
– [2-2. mongodb](#2-2-mongodb)
– [3. レイヤードアーキテクチャとDDD](#3-レイヤードアーキテクチャとddd)
– [3-1. レイヤードアーキテクチャ](#3-1-レイヤードアーキテクチャ)
– [3-2. DDD](#3-2-ddd)
– [3-3. 実装の
なぜgo.workはリポジトリにコミットすべきではないのか
## 本記事の背景と目的
go言語のWorkspace modeを導入した際に生成される`go.work`ファイルは,リポジトリにコミットすべきでないとの指摘がある[[1](https://poyo.hatenablog.jp/entry/2022/12/05/090000)][[2](https://future-architect.github.io/articles/20220216a/)].この点について[Proposal](https://github.com/golang/go/issues/53502)でも盛んに議論されており,[公式リファレンス](https://go.dev/ref/mod#go-work-file)では`go.work`をリポジトリにコミットしないよう推奨されている.
本記事では,`go.work`をリポジトリにコミットすると困りうるパターンを検証し,`go.work`をコミットすべきでない理由を明らかにする.https://github.com/golang/go/issues/53502
https://go.dev/ref/mod#
golang-migrateでマイグレーションをやってみる[Mac]
Goで`GORM`を使わずにDB設計を行っていたのですが、どうにかデータベースのカラムだけを変更することがしたいと考えた時に、Djangoで`マイグレーション`を行っていたことを思い出したので,今回どうやってGoでマイグレーションを行うか調べてみました。
# そもそもマイグレーションとは
`マイグレーション`とは、一般的に移行という意味を持っています。今回行う`データベースマイグレーション`とは、データベースの定義を自動的に作成・管理することを指します。
従来の直接データベースに入って操作していたデータベース定義をスクリプトで操作することができます。
# `golang-migrate`でマイグレーションしてみる。
まず、golang-migrateのcliツールインストールします。
### インストール
“`
brew install golang-migrate
“`
>windowsのパッケージマネージャーとかは使ったことないのですいません以下のコマンドで入っているかを確認します。
“`
migrate –version
“`## マイグレーション
GoとLaunchDarklyでフィーチャーフラグを実装する
## はじめに
業務でフィーチャーフラグを実装をする機会があり、技術調査の一環でフィチーチャーフラグのプラットフォームである[LaunchDarkly](https://launchdarkly.com/)を使って実装してみました。この記事では、Go言語とLaunchDarklyを使った具体的なフィーチャーフラグの実装方法について解説します。フィーチャーフラグ自体の概要やメリットについては、多くの記事で詳しく説明されていますので、ここでは割愛します。
フィーチャーフラグについては、よくわからないという方は以下の記事がおすすめです。
[フィーチャーフラグ(Feature Flag)はなぜ必要なのか?](https://codezine.jp/article/detail/14114)
[Feature Flag](https://martinfowler.com/bliki/FeatureFlag.html)## やること
この記事では以下の内容で進めます。
・LaunchDarklyでフィーチャーフラグを設定する
・設定したフィーチャーフラグをSDKを使って取得する##