フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

Golang

VScode で ginkgo extension 使ってる時に Could not populate the outline~ がでる

Could not populate the outline view: Error: error running "~/go/bin/ginkgo outline --format=json -" (error code ENOENT) Ginkgo executable already installed. ;) VSCode の Setting にて以下のように フルパス で指定すること。 "ginkgotestexplore…

【prel】1からWebアプリ(OSS)を作ってみた振り返り

作ったもの github.com Google Cloud の IAM role を期間限定でユーザに付与するためのワークフローアプリ。 技術スタック Backend / Front: Go (template) プロトコル:HTTP + OpenAPI v3(ogen) DB: Posgresql 他にも新しく使ったものをすべてかく tagpr / …

Go puzpuzpuz/xsync を ChatGPT とともに見る

mercari.go #24 を開催しました #mercarigo | メルカリエンジニアリング を読んで、CPUキャッシュラインを考慮した高効率な sync パッケージの存在を知ったので少し調べてみた。 スライドはこちら Concurrent Data Structures and CPU Cache with Go - Googl…

Go のスライスの挙動(Go言語100Tips No.20 / No.25)

Go のスライスは動的配列のように使えるがその実態はただの配列のビューになっている。 スライスからスライスを生成する時においては、同じデータを参照している。 s1 := make([]int, 0, 6) s1 = append(s1, 1, 2, 3) s2 := s1[1:3] // 2, 3 // ここに s1 = …

echo におけるjsonで受け取ったデータが一部勝手にbase64 decodeされる

echo を使って /test で json を受け入れるサーバを立ち上げます。 package main import ( "context" "fmt" "net/http" "github.com/labstack/echo/v4" ) type Message struct { Name []byte `json:"name"` } func main() { e := echo.New() e.POST("/test",…

【新規ツール探し】ngrok-go で速攻でローカルのウェブサーバを外部に公開する

記事作成日:2022/12/17 情報 名前 URL Github https://github.com/ngrok/ngrok-go 公式サイト https://ngrok.com/docs デモサイト 開発母体 ngrok version 言語 Go 価格 無料 ライセンス MIT 情報 何ができるもの? 利用シーン 登場背景 所感 使い方 ngrok …

GoでClosureと戯れてみる

Closure(クロージャ) とは、関数が実行された時にその静的スコープで定義された変数を利用できる関数です。 同じ関数を別に呼ぶと 同じ関数で複数のクロージャを作る ポインタをクロージャに渡す 使ったコード - framinal-new-tools/go-closure at main · li…

go reference を眺めて知らないことまとめておく

go.dev を読んで個人的に知ったことをまとめる raw string iota map / slice の初期化状態 メソッドの呼び出し方 slice 演算子 copy method raw string fmt.Println(`aaa aa aaa `) iota const ( c0 = iota // c0 == 0 c1 = iota // c1 == 1 c2 = iota // c2…

【新規ツール探し】シンプルに Go で gRPC が使える Connect「コードがとても見やすい!」

記事作成日:2022/12/01 情報 名前 URL Github https://github.com/bufbuild/connect-go 公式サイト https://connect.build/docs/introduction デモサイト https://connect.build/ 開発母体 Buf version 1.3.0 言語 Go 価格 無料 ライセンス Apache-2.0 lice…

【新規ツール探し】Sql から Go コードを生成する「sqlc」

記事作成日:2022/11/30 情報 名前 URL Github https://github.com/kyleconroy/sqlc 公式サイト https://docs.sqlc.dev/en/latest/index.html デモサイト sqlc - Playground 開発母体 kyleconroy 氏 version 1.16.0 言語 Go 価格 無料 ライセンス MIT 情報 …

Go の Option パターンを generics と reflect でシンプルにしてみる

Goではインスタンスを生成する New に対していろんなパターンで作成をするために、よく Option パターンと呼ばれる書き方をします。 こんな感じです。(WithXXX で設定したい内容を付与できる) package main import ( "fmt" ) func main() { p := NewProduct(…

pflag がどのように args を取得しているのかを追う

Go の pflag パッケージってどうやって引数を処理してるんだろうが気になったので、ちょっと調べてみました。 引数を配列にして返すだけのコードを書いてみます。 package main import ( "fmt" flag "github.com/spf13/pflag" ) type Args struct { Paths []…

middlewareってなに?インフラが思うミドルウェアとはちがうの?

ちがいます。 インフラエンジニアが思うミドルウェアやApacheやEnvoyなどのアプリを動かすソフトのことをさしています。 しかしGoでAPIサーバを立てるときなどに用いられるMiddlewareという言葉は、HTTPリクエストを途中で処理する層のことを指しています。 …

Type funcを使ってみて動作イメージを掴む

net/httpのHandler周りのコードを読んでいたらよくわからなくなったので理解のため簡単なコードを書いておきます。 HTTPserver package main import ( "fmt" "net/http" ) func main() { // HandlerFunc は与えられたパターン(/hello) をDefaultServeMuxに…

GoでDIを理解してみる(コードあり)

DIとはなにか? Dependency Injection の略(依存性の注入) プログラミングのデザインパターンの一つ DIが嬉しいこと 猿でも分かる! Dependency Injection: 依存性の注入 - Qiita で紹介されていた例がわかりやすかったです。 要点を摘むと以下の通り。 作っ…

構造体のSliceを任意の順番にソートする方法

構造体の中に含まれる一部の要素を使って構造体のスライスを任意の順番にソートする方法です。 イメージとしては以下のような構造体がスライスに格納されているとします。 type user struct { name: string bloodType: string } Users = []user { {"tanaka",…

【Go】runeについて理解する(サンプルあり)

結論 前提知識 Golangにおける文字の扱い runeについて 結論 runeはGoにおける型の1種類 rune型を用いることで、文字列を1文字づつ扱うことができる 前提知識 まず最初に文字コード(コードポインタ)や文字集合と符号化方式について理解しましょう。 こちらの…

【Go】パッケージ/モジュールやgo modコマンドについてまとめ

Packageとは Module(モジュール)とは go.modとは go.sumとは コマンドの意味 go get [import path] go install [import path] go mod init [import path] go mod tidy 試してみよう Moduleを作ってインストールしてみる Goを操作する上で基本となるPackageや…

Golang学習(値渡し/ポインタ/switch/for/defer/panic/recover)

教材 学んだ事 値渡しについて switch~caseの使い方 switchで関数呼び出し&caseで複数条件 caseで関数呼び出し可能 フォールスルー(fall through) forの使い方 通常 条件付きループ 無限ループ defer / panic / reccover defer panic recover 教材 Go で制御…