Skip to content

Instantly share code, notes, and snippets.

View hadv's full-sized avatar
🎯
Focusing

Ha DANG hadv

🎯
Focusing
  • ÐΞV
  • Hanoi
View GitHub Profile
syntax = “proto3”;
option go_package = “echo”;
// Echo Service
//
// Echo Service API consists of a single service which returns a message.
package hadv.grpc.echo;
import “google/api/annotations.proto”;
// Message represents a simple message sent to the Echo service.
message Message {
// Id represents the message identifier.
package main
import (
“github.com/golang/glog”
examples “github.com/hadv/grpc”
“golang.org/x/net/context”
“google.golang.org/grpc”
“google.golang.org/grpc/metadata”
)
// Implements of EchoServiceServer
type echoServer struct{}
package main
import (
“flag”
“net/http”
“github.com/gengo/grpc-gateway/runtime”
“github.com/golang/glog”
echo “github.com/hadv/grpc/echo”
“golang.org/x/net/context”
“google.golang.org/grpc”
)
{
"swagger": "2.0",
"info": {
"title": "Echo Service",
"description": "Echo Service API consists of a single service which returns a message.",
"version": "version not set"
},
"schemes": [
"http",
"https"
type weatherProvider interface {
temperature(city string) (float64, error)
}
type openWeatherMap struct {
apiKey string
}
func (w openWeatherMap) temperature(city string) (float64, error) {
resp, err := http.Get("http://api.openweathermap.org/data/2.5/weather?APPID=" + w.apiKey + "&q=" + city)
if err != nil {
return 0, err
}
@hadv
hadv / apixu.go
Created September 10, 2017 11:06
type apixu struct {
apiKey string
}
func (w apixu) temperature(city string) (float64, error) {
resp, err := http.Get("http://api.apixu.com/v1/current.json?key=" + w.apiKey + "&q=" + city)
if err != nil {
return 0, err
}
func (w multiWeatherProvider) temperature(city string) (float64, error) {
// Make a channel for temperatures, and a channel for errors.
// Each provider will push a value into only one.
temps := make(chan float64, len(w))
errs := make(chan error, len(w))
// For each provider, spawn a goroutine with an anonymous function.
// That function will invoke the temperature method, and forward the response.
for _, provider := range w {
go func(p weatherProvider) {
@hadv
hadv / main.go
Created September 10, 2017 11:07
func main() {
mw := multiWeatherProvider{
openWeatherMap{apiKey: "5bd6d7d469feee97788f51744f8c2910"},
apixu{apiKey: "ff8b321075a54e7288794851162712"},
}
http.HandleFunc("/weather/", func(w http.ResponseWriter, r *http.Request) {
begin := time.Now()
city := strings.SplitN(r.URL.Path, "/", 3)[2]

Keybase proof

I hereby claim:

  • I am hadv on github.
  • I am dvietha (https://keybase.io/dvietha) on keybase.
  • I have a public key ASApRXY1Pj2ToSDec4ZOPXIcHWyp8qlQ8GE_obqoMU1OjAo

To claim this, I am signing this object: