go
Overview 準備 CLA の同意とアカウント作成 レビューツールを入れる 早速コミットしてみる まとめ 余談 VSCode で Go の最新版を開発する (Go1.18 の場合) VSCode のセットアップ方法 Overview これは 2021年Goアドベントカレンダー 7日目の記事です。 つい…
Overview Sample まとめ Overview メソッドを持つ参照型をフィールドを持つカスタム struct を初期化したときの参照型が持つ(見かけ上ネストしてる)メソッドにアクセスした時の振る舞いがたまたま職場の雑談で上がり、挙動について調べてみたのその備忘録…
Overview go-cmp の cmp.Option How to use cmp.Option cmp.Options の中に option で指定したい設定を入れる cmp.Option 単体を指定する slice にして指定する Go の可変長引数の指定方法について cmp.Options をそのまま Diff に指定できるわけ まとめ Ove…
Overview 前提: そもそも Go で Cookie を操作するには? Cookie を使った認証機構がある Handler のテスト サンプル SecureCookie を使って Cookie で Session を扱う ちょっとだけリファクタリングする まとめ Memo http: Request.RequestURI can't be set…
Overview 準備 自作 Linter を作る手順 GoAst Viewer で Ast の構造を視覚的に確認する 追記 x/tools/cmd/gotype singlechecker を使って検出する nodeFilter で階層を指定する Tips SuggestedFixes がめちゃくちゃ便利なので絶対に使う 使い方 ハマったとこ…
Overview ちょっと興味があって Go の string の実装周りについてふらっと調べたので備忘録。 そのほかにも何かわかれば追記するかも。 Memo string 本体について string is the set of all strings of 8-bit bytes, conventionally but not necessarily rep…
Overview タイトルの通りです。 Go で文字列の中に改行コードが含まれていた場合 "" なら \\n のようにバックスラッシュを使ってエスケープしますが、そもそもの改行コードを含む文字列をバッククオートで出力した場合、自動で改行コードがエスケープされる…
Overview ちょっと凝ったユースケースですが、byte 文字列を Int に変換したいユースケースがあったときに使えるテクニックについてまとめます。 以下のようなユースケースを考えます。 func main() { b := []byte("123456") for idx := range b { fmt.Print…
Overview Go でテキストファイルを1行ずつ読み込んでいく方法を忘れてたので思い出しついでに備忘録です。 bufio を使う bufio を忘れてました。 こんな感じで処理できます。 package main import ( "bufio" "bytes" "fmt" ) // text ファイルに書かれてる内…
Overview 何が起きたか? 原因: 実態のコピーを上書きしていたので大元の slice の struct の値が書き変わらなかった まとめ 追記 20210531 Overview Go の loop 処理の中で Slice の中の全値を書き換えたいと言う処理、において参照渡しと値渡しを取り違え…
Overview chi で独自 middleware を使う上で使い方を忘れていたのでその備忘録。 備忘録 router.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // middleware でやりたい処理 next.S…
Overview AWS SDK for Go V2 について AWS の設定をロードする 独自で環境変数を持ってる場合 DynamoDB を使う DynamoDB クライアントを Load する リソースを更新する expression はまだ feature だった 余談: 毎回めんどいなーところと思うところ Transact…
https://play.golang.org/p/ss6gWvidE2u でなんで長さ 1 の slice が返ってくるんだろーって悩んでたのですが、、、 // Split slices s into all substrings separated by sep and returns a slice of // the substrings between those separators. // // If…
Overview タイトルの通りなんですが、Go の struct をするときにその struct のあるフィールドを参照型にすることがあると思います。 この参照型のフィールドに値を代入するために、プリミティブな型を参照型に変換するだけの関数を作成することがあるかと思…
Overview テストケースで使えそうな strings の機能を教えてもらったので書いておきます。 テストケース書くときに使えることを教えてもらったhttps://t.co/tvtsGQjufL— ema (@ema_hiro) 2021年1月19日 Strings.Repeat https://golang.org/pkg/strings/#Repe…
Overview Go 言語で文字数をカウントする方法について記載します。 そもそも文字数を数えるとは? LINE Engineering のこのブログが詳しくてわかりやすいです。 engineering.linecorp.com ある文字列の文字数を計算するときに、コンピューター上で「何文字」…
Overview staticcheck を使って unused なコードを一括で検査します。 Install $ go get honnef.co/go/tools/cmd/staticcheck ref: https://staticcheck.io/docs 検出する U1000 がどこからも参照されていないコードの警告コードになるので、検査結果を grep…
Overview 業務で AWS Lambda を使用してとある実装をしたのでその紹介です。 久しぶりに業務でOSS作りました。https://t.co/5fNBhiRsle— ema (@ema_hiro) 2020年11月19日 github.com なぜ作ったのか? Lambda 上でログを吐くとデフォルトで Cloud Watch Logs…
Overview go get でプライベートリポジトリを fetch するのに、コケてその調査で時間を溶かすことが何度か重なったので対応方法について記載します。 またプライベートリポジトリに依存してるプロジェクトで Github Actions を回すときもプライベートリポジ…
import 順を自動で sort するときに、goimports の対象から外したいディレクトリがあるときに $GOPATH/src/.goimportsignore を設定するといいらしいけど、リポジトリごとのディレクトリ分けに依存したり、個人の開発環境に依存するかなーと思ったで、なんと…
以下のような Struct を考える。 type User struct { ID int64 Name String CreatedAt time.Time UpdatedAt time.Time } time.Time の時刻型をもつフィールドがある時、MySQL の時刻型のカラムをそのまま Scan しようとすると以下のエラーが出る。 sql: Scan…
Overview すごい久しぶりに sqlx を使ったら色々忘れてたので備忘録です。 github.com driver は blank import しておかないといけない driver の種類は下記を参照 https://github.com/golang/go/wiki/SQLDrivers 例えば MySQL を Driver として選択したい場…
Go の Release Policy に合わせて、以下のリポジトリを Go.1.14対応しました。 合わせて Go1.12 のサポートを切りました。 Each major Go release is supported until there are two newer major releases. ref: Release History - The Go Programming Langu…
こういうことができる。便利。 $ go get golang.org/dl/go1.X.X $ go1.X.X download $ go1.X.X version go version go1.X.X linux/amd64 公式のインストールページにも記載してある。 https://golang.org/doc/install#extra_versions
Overview Go の net/httpパッケージ には HTTP に関連する定数が予め定義されており、HTTP クライアントを実装するときなどに自前で定義したり、GET や 200 といった定数を実装しなくてもいいように、標準の net/http がデザインされています。 こういう実装…
Overview 関数を引数に指定してすることで、呼び出し先の関数内にて、特定の条件で指定した関数を実行する (Callback のように振る舞わせる) 実装方法をやってみたのでその記録を記載する。 Log github.com Usecase R/W の競合を発生させないために sync.Mut…
Go の 標準の log パッケージ の実装をベースに自前で管理のログ出力部分を実装してみました。 やったこと Go の標準の log パッケージをベースにして自前でログを実装する機会があったので、そもそも log パッケージ内の実装を読んで見ようと思ったのがきっ…
大した話じゃないんですけど、忘れてたので備忘録です。 strs := []string{"a", "b", "c", "d", "e"} // "c" を削除する。 idx := 2 strs = append(strs[:idx], strs[idx+1:]...) fmt.Println(strs) ref: https://play.golang.org/p/3QP4OXw2X0u
テストなどで実際にサーバーを立てずに、HTTP のリクエストをシミュレートしたいときに httptest を使いますが、この httptest で立てたダミーサーバーそのものアクセスする方法はないかを調べてみました。 Motivation あるテストをメンテしていた時に httpt…
Summary Go では concrrent map writes のような競合状態の可能性がある実装があるときに排他ロックをかける。 競合状態を回避するためのサンプルとしてロックをかける実装はたくさんインターネット上に情報が出てくるが、そもそも意図的に競合状態を作り出…