racer
parent
f308273124
commit
2150188501
@ -0,0 +1,3 @@
|
||||
module my_select
|
||||
|
||||
go 1.22.5
|
@ -0,0 +1,23 @@
|
||||
package my_select
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Racer(a string, b string) (winner string) {
|
||||
aDuration := measureResponseTime(a)
|
||||
bDuration := measureResponseTime(b)
|
||||
|
||||
if aDuration < bDuration {
|
||||
return a
|
||||
}
|
||||
|
||||
return b
|
||||
}
|
||||
|
||||
func measureResponseTime(url string) time.Duration {
|
||||
start := time.Now()
|
||||
http.Get(url)
|
||||
return time.Since(start)
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package my_select
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestRacer(t *testing.T) {
|
||||
|
||||
slowServer := makeDelayedServer(20 * time.Microsecond)
|
||||
defer slowServer.Close()
|
||||
|
||||
fastServer := makeDelayedServer(0 * time.Microsecond)
|
||||
defer fastServer.Close()
|
||||
|
||||
slowUrl := slowServer.URL
|
||||
fastUrl := fastServer.URL
|
||||
|
||||
want := fastUrl
|
||||
got := Racer(slowUrl, fastUrl)
|
||||
|
||||
if got != want {
|
||||
t.Errorf("got %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func makeDelayedServer(delay time.Duration) *httptest.Server {
|
||||
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
time.Sleep(delay)
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}))
|
||||
}
|
Loading…
Reference in New Issue