2020-10-23
エラーレスポンスを返す時でもリトライさせたくない場合は、ヘッダにX-Slack-No-Retryを指定する。 func handler(w http.ResponseWriter, r *http.Request) { // Process something... // Set "X-Slack-No-Retry: 1" if prevent retry. w.Header().Set("X-Slack-No-Retry", "1") w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusBadRequest) w.Write([]byte("")) } Reference # https://api.slack.com/events-api#the-events-api__field-guide__error-handling__graceful-retries__turning-retries-off
2020-10-21
gomockでエラー。とりあえず古いファイルを消して再実行すると解消できた。 % mockgen -source ./internal/app/usecase/xxx/repository.go -destination ./internal/app/usecase/xxx/repository_mock.go -package xxx -: found packages xxx (repository.go) and mock_updateproteinevent (repository_mock.go) in /Users/xxx/go/src/proteinreminder/internal/app/usecase/xxx 2020/10/21 04:21:56 Loading input failed: loading package failed # Delete % rm -rf ./internal/app/usecase/xxx/repository_mock.go # Run again and completed. % mockgen -source ./internal/app/usecase/xxx/repository.go -destination
...
2020-10-17
.sql向け golang-migrateのヘルパスクリプトです。 機能 # .envからデータソースを読み込み ディレクトリ内のSQLファイルでマイグレート SQLのみ対
...
2020-07-05
APIGateway + GoでLambdaのサンプルです。 仕様 # エンドポイント: https://<API ID>.execute-api.ap-northeast-1.amazonaws.com/<stage>/<Resource> HTTPメソッド: GET パラメータ: { "text": "string" } Lambdaハンドラ # 引数をstructで定義。 package main import (
...
2020-06-28
package main import ( "fmt" ) // Truncate string. func TruncateString(str string, length int) string { if length <= 0 { return "" } // This code cannot support Japanese // orgLen := len(str) // if orgLen <= length { // return str // } // return str[:length] // Support Japanese // Ref: Range loops https://blog.golang.org/strings truncated := "" count := 0 for _, char := range str { truncated += string(char) count++ if count >= length { break }
...
2020-06-25
json.Marshal はomitemptyが値型stringに設定されていれば空文字を出力する。 フィールド自体不要な場合は、ポインタ型stringにするといい。 package main import ( "encoding/json" "fmt" ) type ValueSlice struct
...
2020-06-23
// Set FormValues to struct func SetFormValueToStruct(values url.Values, structPtr interface{}) error { // Get the pointer of struct ptr := reflect.ValueOf(structPtr) // Get the value of struct value := ptr.Elem() // Set value to struct field valueType := value.Type() for i := 0; i < value.NumField(); i++ { jsonTag := valueType.Field(i).Tag.Get("json") if value.Field(i).CanSet() == false { return errors.New("cannot set value to field") } value.Field(i).Set(reflect.ValueOf(values.Get(jsonTag))) } return nil } // Example func ExampleSetFormValueToStruct() { // Form values formValues := url.Values{} formValues.Set("test1",
...
2020-06-20
params := url.Values{ "keyword": {"some"}, } reqUrl := "https://yourendpoint.example.com?" + params.Encode() Reference # https://golang.org/pkg/net/url/#URL.Query
2020-06-12
json.Unmarshalしたデータに含まれる文字列のユニコードキャラクタをエスケープシーケンスに変換します。 // func convertJsonElement(data interface{}) interface{} { switch v := data.(type) { case map[string]interface{}: for ik, iv := range v { v[ik] = convertJsonElement(iv) }
...
2020-06-07
プロジェクト内で、HTTPのユーティリティ関数をまとめるモジュールの命名に悩んでいました。 結果は project-layoutの構成で、internalの下にht
...
2020-05-28
Goでパニックが発生するかどうかのテストです。 // Testing if testFunc calls panic. // e.g. // IsTestCallPanic(func(){ // <place test target here.> // }) func IsTestCallPanic(testFunc func()) (ok bool) { defer func() { if err := recover(); err == nil { ok = false } }() ok = true testFunc() return } // Test for test. func TestIsTestCallPanic(t *testing.T) { isCalled := IsTestCallPanic(func() {
...
2020-04-13
Iocコンテナを作ろうとして次のようなコードを書くとエラーが出ました。 原因はinterfaceのポインタの型エラー。 // interface type IFace interface { hello() string } // concrete type type Concrete struct { } func NewConcrete() *Concrete { return
...
2020-01-31
GoでsqliteにデータをInsertしようとしてエラー。 $ error table Balance has no column named price Insertしているコードを見ても問題はない。 カラムを確認すると…… 2個目のカラム
...