2024年11月27日水曜日 14:03[Go]型埋め込み使用時のjson.Marshalの罠型埋め込みを使用している構造体をjson.Marshal [https://pkg.go.dev/encoding/json#Marshal]でJSON文字列に変換する際、意図しない挙動になるケースがあるので気を付ける。 下記のような構造体のインスタンスをjson.Marshalで文字列に変換する処理がある。 type Event struct { ID int time.Time // <- 埋め込みフィールド } event := Event{ ID: 1234, Time: time.now(), // <- 構造体のインスタンス化時、埋め込みフィールドの名前は構造体の名前go
2024年11月18日月曜日 15:21[Go]型埋め込みの問題点を意識するそもそも型埋め込みとは.. 以下のように構造体の中に別の構造体を埋め込むこと。 type Base struct { ID int Name string } func (b Base) GetName() string { return b.Name } type User struct { Base // 型埋め込み Email string } 以下のように、User構造体のインスタンスからBase構造体の中身を直接使用できる。これを プロモートする と呼ぶ user := User() user.ID // user.Bgo
2024年8月5日月曜日 13:08[Go]キャッシュを活用しつつVimeo APIリクエストを行うVimeoのサムネイル画像をgoで実装しているwebサーバーで取得する必要が出てきた。 go-vimeo [https://github.com/silentsokolov/go-vimeo]というサードパーティのライブラリが存在するが、今回はサムネイル画像取得だけが目的なので、直接APIリクエスト処理を実装した。 以下実装 func NewRepository(logger Logger, redisAddrs []string) *repository { rdb := redis.NewClusterClient(&redis.ClusterOptions{ Addrs:Vimeogo
2024年7月10日水曜日 14:54S3の署名付きURLを発行する際DL時のファイル名を動的に設定する(go言語)やりたいこと S3のファイルの署名付きURLを発行してDLさせる際、ファイル名を指定したい 実現方法 SetResponseContentDisposition [https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#GetObjectInput.SetResponseContentDisposition]を使用して attachment と filename を設定する。 CONTENT-DISPOSITIONとは Content-Disposition [https://developer.mozilla.org/ja/goAWS
2024年5月22日水曜日 14:58[Go]文字列の中からhtmlタグを除く文字数をカウントするリッチテキストエディタ等で入力されたHTMLで装飾された文字列の中から、実際にユーザーが入力した文字数だけをカウントしたい。 golangを使用する場合以下の手順で実装する。 1. 文字列をhtmlにパース 2. html.TextNodeのデータを抽出し、変数に加算 1. HTMLエンティティ [https://developer.mozilla.org/ja/docs/Glossary/Entity]はhtml.UnescapeStringでデコード 3. 子ノードがある場合は再起的に取得 4. 加算した変数をruneの配列に変換し、lenで長さを取得する 実際のgo