diff --git a/.travis.yml b/.travis.yml index c398289..420bcc9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,9 @@ sudo: required go: - "1.12" + - "1.13" - master script: - - make test \ No newline at end of file + - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.21.0 + - make lint && make test \ No newline at end of file diff --git a/Makefile b/Makefile index d229787..3d319bb 100644 --- a/Makefile +++ b/Makefile @@ -14,4 +14,7 @@ bench: go test -bench=. ./... release: - go mod tidy \ No newline at end of file + go mod tidy + +lint: + golangci-lint run \ No newline at end of file diff --git a/README.md b/README.md index a12db0c..e7a1e28 100644 --- a/README.md +++ b/README.md @@ -17,15 +17,15 @@ import ( func main() { - d := elton.New() - d.Use(etag.NewDefault()) + e := elton.New() + e.Use(etag.NewDefault()) - d.GET("/", func(c *elton.Context) (err error) { + e.GET("/", func(c *elton.Context) (err error) { c.BodyBuffer = bytes.NewBufferString("abcd") return }) - d.ListenAndServe(":7001") + e.ListenAndServe(":3000") } ``` diff --git a/etag.go b/etag.go index f9eb68f..accf7f2 100644 --- a/etag.go +++ b/etag.go @@ -37,7 +37,10 @@ func gen(buf []byte) string { return `"0-2jmj7l5rSw0yVb_vlWAYkK_YBwk="` } h := sha1.New() - h.Write(buf) + _, err := h.Write(buf) + if err != nil { + return "" + } hash := base64.URLEncoding.EncodeToString(h.Sum(nil)) return fmt.Sprintf(`"%x-%s"`, size, hash) } @@ -77,7 +80,9 @@ func New(config Config) elton.Handler { return } eTag := gen(bodyBuf.Bytes()) - c.SetHeader(elton.HeaderETag, eTag) + if eTag != "" { + c.SetHeader(elton.HeaderETag, eTag) + } return } } diff --git a/etag_test.go b/etag_test.go index dfaf788..c5503cf 100644 --- a/etag_test.go +++ b/etag_test.go @@ -113,7 +113,7 @@ func BenchmarkMd5(b *testing.B) { return `"0-2jmj7l5rSw0yVb_vlWAYkK_YBwk="` } h := md5.New() - h.Write(buf) + _, _ = h.Write(buf) hash := base64.URLEncoding.EncodeToString(h.Sum(nil)) return fmt.Sprintf(`"%x-%s"`, size, hash) } diff --git a/example/main.go b/example/main.go new file mode 100644 index 0000000..1c9ec7c --- /dev/null +++ b/example/main.go @@ -0,0 +1,24 @@ +package main + +import ( + "bytes" + + "github.com/vicanso/elton" + etag "github.com/vicanso/elton-etag" +) + +func main() { + e := elton.New() + + e.Use(etag.NewDefault()) + + e.GET("/", func(c *elton.Context) (err error) { + c.BodyBuffer = bytes.NewBufferString("abcd") + return + }) + + err := e.ListenAndServe(":3000") + if err != nil { + panic(err) + } +} diff --git a/go.mod b/go.mod index ec34e5e..685b752 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,6 @@ module github.com/vicanso/elton-etag go 1.12 require ( - github.com/stretchr/testify v1.3.0 - github.com/vicanso/elton v0.2.0 + github.com/stretchr/testify v1.4.0 + github.com/vicanso/elton v0.2.1 ) diff --git a/go.sum b/go.sum index c2e96a9..5d84ce0 100644 --- a/go.sum +++ b/go.sum @@ -7,9 +7,16 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/vicanso/elton v0.2.0 h1:QlXgmq6m+9wZN7FeLD25/EhBkl8blzppviVY5U5PTm0= github.com/vicanso/elton v0.2.0/go.mod h1:ynAUOSkZQ+pFaUsxlG5hYnJFjPpMwz8YyEBPzNh0pSg= +github.com/vicanso/elton v0.2.1 h1:OrfDjNjXL6KzUhAuAFwCQIa6guXXd7OY+L4ZgH16Rpc= +github.com/vicanso/elton v0.2.1/go.mod h1:ynAUOSkZQ+pFaUsxlG5hYnJFjPpMwz8YyEBPzNh0pSg= github.com/vicanso/hes v0.2.1 h1:jRFEADmiQ30koVY/sKwlkhyXM5B3QbVVizLqrjNJgPw= github.com/vicanso/hes v0.2.1/go.mod h1:QcxOFmFfBQMhASTaLgnFayXYCgevdSeBVprt+o+3eKo= github.com/vicanso/keygrip v0.1.0 h1:/zYzoVIbREAvaxSM7bo3/oSXuuYztaP71dPBfhRoNkM= github.com/vicanso/keygrip v0.1.0/go.mod h1:cI05iOjY00NJ7oH2Z9Zdm9eJPUkpoex3XnEubK78nho= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=