golangに新しく追加されました。任意の型を許可し、次の層のメソッドを呼び出します。Golangマイクロサービスミドルウェアは任意のタイプを許可しますが、エンドポイントは厳格にしてください
ロギングミドルウェアパッケージの下で、私はどんなタイプを受け入れてそれを印刷したいと思っています。
package loggingmiddleware
import (
"context"
"time"
gokitlogger "github.com/go-kit/kit/log"
)
type layer interface {
Run(context.Context, interface{}) (interface{}, error)
}
type LoggingMiddleware struct {
Logger gokitlogger.Logger
Layer layer
}
func (mw LoggingMiddleware) Run(ctx context.Context, i interface{}) (output interface{}, err error) {
defer func(begin time.Time) {
mw.Logger.Log(
"method", "name of method",
"input", i,
"output", output,
"err", err,
"took", time.Since(begin),
)
}(time.Now())
output, err = mw.Layer.Run(ctx, i)
return
}
しかし、私はそれが私が文字列ではなく、私の例ではinterface{}
するタイプを設定したい文字列にする必要がある場合、私は確かだけにしたい、次のメソッドを呼び出すときに厳密になりたいですfloat64タイプは...引数私の現在の実装で、私はこのエラーを取得していますとしかし
type mathServiceInterface interface {
Run(context.Context, float64) (float64, error)
}
type mathService struct{}
func (mathService) Run(_ context.Context, f float64) (float64, error) {
return f * f, nil
}
として使用されます
# github.com/jakelacey2012/blankit/blankit-ms/sqaure
./main.go:92: cannot use ms (type mathServiceInterface) as type loggingmiddleware.layer in field value:
mathServiceInterface does not implement loggingmiddleware.layer (wrong type for Run method)
have Run(context.Context, float64) (float64, error)
want Run(context.Context, interface {}) (interface {}, error)
./main.go:92: cannot use loggingmiddleware.LoggingMiddleware literal (type loggingmiddleware.LoggingMiddleware) as type mathServiceInterface in assignment:
loggingmiddleware.LoggingMiddleware does not implement mathServiceInterface (wrong type for Run method)
have Run(context.Context, interface {}) (interface {}, error)
want Run(context.Context, float64) (float64, error)
私はこのエラーを理解していますが、実装が複雑であるかどうかはわかりません。なぜなら、わからないからです。
私が言っていることが意味を成し遂げたいと思っていますが、私はこれをどのようなものにするべきか分かりませんでしたので、自由に編集してください。
さらに詳しい説明が必要な場合は、私に知らせてください。
私はあなたが言っていることに従っていると思います。私が具体的にするつもりなら、私はミドルウェアでもそれをする必要があります。私がいれば、私は持っているすべての異なるインターフェース用に異なるロガーミドルウェアを作成する必要がありますか? –
はい、そうするか、それを一般的なものにします。 – Adrian
あなたは何をしますか? –