Browse Source

🏗️ Change maintainer of web.go, adapt source code and set `GOAMD64=v3` (#7605)

* 🔥 Remove pkg folder

* ⬆️ Bump Go from 1.14 to 1.19

* ✨ Use Go module (add `src` folder and `go.mod`)

* 👷 Download Go dependencies at build time

* ⚡️ Set GOAMD64=v3 for AVX2, SSE4.2… instructions

See https://github.com/golang/go/wiki/MinimumRequirements#amd64

* 👽️ Adapt to API change with web.go v0.5.3

* 📝 Document github.com/JaCoB1123/web
0uep 2 years ago
parent
commit
c1723be062

+ 10 - 6
frameworks/Go/webgo/README.md

@@ -1,14 +1,18 @@
-# WebGo Benchmarking Test
+# web.go Benchmarking Test
 
-This is the webgo portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
+This is the web.go portion of a [benchmarking test suite](../) comparing a variety of web development platforms.
 
-### JSON Encoding Test
-* [JSON test source](hello.go)
+web.go is a simple way to write web applications in the Go programming language.
+
+But if you're looking for the fastest router, this is probably not your best choice, since it uses the reflect-Package to call the handler functions and regular expressions for matching routes.
+
+## JSON Encoding Test
+
+- [JSON test source](src/hello/hello.go)
 
 ## Versions
 
-* [Go 1.1beta2](https://golang.org/)
-* [WebGo](https://github.com/hoisie/web)
+- [web.go](https://github.com/JaCoB1123/web)
 
 ## Test URLs
 

+ 0 - 0
frameworks/Go/webgo/pkg/.gitkeep


+ 17 - 0
frameworks/Go/webgo/src/go.mod

@@ -0,0 +1,17 @@
+module webgo
+
+go 1.19
+
+require github.com/JaCoB1123/web v0.5.3
+
+require (
+	github.com/josharian/intern v1.0.0 // indirect
+	github.com/mailru/easyjson v0.7.7 // indirect
+	github.com/tidwall/gjson v1.14.3 // indirect
+	github.com/tidwall/match v1.1.1 // indirect
+	github.com/tidwall/pretty v1.2.0 // indirect
+	github.com/tidwall/sjson v1.2.5 // indirect
+	golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 // indirect
+	golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect
+	golang.org/x/term v0.0.0-20220919170432-7a66f970e087 // indirect
+)

+ 33 - 0
frameworks/Go/webgo/src/go.sum

@@ -0,0 +1,33 @@
+github.com/JaCoB1123/web v0.5.3 h1:PLoZorwPqDgRNStHxbbSBXbXdiBDmJP3bgBeFXO8Jhg=
+github.com/JaCoB1123/web v0.5.3/go.mod h1:wX1fuLSacW6lNgIVFGTyCDsUuDyWa92iy9xXCZCidUU=
+github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw=
+github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
+github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
+github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
+github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
+github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
+github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 h1:a5Yg6ylndHHYJqIPrdq0AhvR6KTvDTAvgBtaidhEevY=
+golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200802091954-4b90ce9b60b3 h1:qDJKu1y/1SjhWac4BQZjLljqvqiWUhjmDMnonmVGDAU=
+golang.org/x/sys v0.0.0-20200802091954-4b90ce9b60b3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc=
+golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20220919170432-7a66f970e087 h1:tPwmk4vmvVCMdr98VgL4JH+qZxPL8fqlUOHnyOM8N3w=
+golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

+ 15 - 10
frameworks/Go/webgo/src/hello/hello.go

@@ -1,28 +1,33 @@
 package main
 
 import (
-	"encoding/json"
-	"github.com/hoisie/web"
 	"io/ioutil"
 	"log"
+	"net/http"
 	"runtime"
+
+	"github.com/JaCoB1123/web"
+	"github.com/tidwall/sjson"
 )
 
 type MessageStruct struct {
 	Message string `json:"message"`
 }
 
-func hello(ctx *web.Context, val string) {
-	m := MessageStruct{"Hello, World!"}
-	j, _ := json.Marshal(m)
-	ctx.ContentType("application/json")
-	ctx.Write(j)
+func getJSON(ctx *web.Context) []byte {
+	ctx.SetHeader("Server", "web.go", false)
+	ctx.SetHeader("Content-Type", "application/json", true)
+	j, _ := sjson.SetBytes(nil, "message", "Hello, World!")
+	return j
 }
 
 func main() {
 	logger := log.New(ioutil.Discard, "", 0)
 	runtime.GOMAXPROCS(runtime.NumCPU())
-	web.Get("/(.*)", hello)
-	web.SetLogger(logger)
-	web.Run("0.0.0.0:8080")
+
+	server := web.NewServer()
+	server.Get("/json", getJSON)
+	server.SetLogger(logger)
+
+	http.ListenAndServe(":8080", server)
 }

+ 4 - 8
frameworks/Go/webgo/webgo.dockerfile

@@ -1,14 +1,10 @@
-FROM golang:1.14
+FROM docker.io/golang:1.19
 
-ADD ./ /webgo
+ADD ./src /webgo
 WORKDIR /webgo
 
-RUN mkdir bin
-ENV GOPATH /webgo
-ENV PATH ${GOPATH}/bin:${PATH}
-
-RUN go get github.com/hoisie/web
+RUN go mod download
 
 EXPOSE 8080
 
-CMD go run src/hello/hello.go
+CMD GOAMD64=v3 go run ./hello