More Related Content
Similar to Ocif2016_go_web_freamwork (10)
More from Shuichi Yukimoto (11)
Ocif2016_go_web_freamwork
- 25. www.usa-mimi.jp
2016©MNU co. ltd.
package main
import (
"fmt"
"runtime"
)
func say(s string) {
for i := 0; i < 5; i++ {
runtime.Gosched()
fmt.Println(s)
}
}
func main() {
go say(“world”) //新しいGoroutinesを実行する。
say("hello") //現在のGoroutines実行
}
// 実行結果
// hello
// world
// hello
// world
// hello
// world
// hello
// world
// hello
- 27. www.usa-mimi.jp
2016©MNU co. ltd.
package main
import "fmt"
func sum(a []int, c chan int) {
total := 0
for _, v := range a {
total += v
}
c <- total // send total to c
}
func main() {
a := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(a[:len(a)/2], c)
go sum(a[len(a)/2:], c)
x, y := <-c, <-c // receive from c
fmt.Println(x, y, x + y)
}
// 実行結果
// -5 17 12
// または
// 17 -5 12
- 28. www.usa-mimi.jp
2016©MNU co. ltd.
package main
import (
"fmt"
"net/http"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello!") //ここでwに入るものがクライアントに出力されます。
}
func main() {
http.HandleFunc("/", sayhelloName) //アクセスのルーティングを設定します。
err := http.ListenAndServe(":9090", nil) //監視するポートを設定します。
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
- 29. www.usa-mimi.jp
2016©MNU co. ltd.
n
func (srv *Server) Serve(l net.Listener) error {
defer l.Close()
if fn := testHookServerServe; fn != nil {
fn(srv, l)
}
var tempDelay time.Duration // how long to sleep on accept failure
if err := srv.setupHTTP2_Serve(); err != nil {
return err
}
baseCtx := context.Background()
ctx := context.WithValue(baseCtx, ServerContextKey, srv)
ctx = context.WithValue(ctx, LocalAddrContextKey, l.Addr())
for {
rw, e := l.Accept()
// ...
tempDelay = 0
c := srv.newConn(rw)
c.setState(c.rwc, StateNew) // before Serve can return
go c.serve(ctx)
}
}
- 30. www.usa-mimi.jp
2016©MNU co. ltd.
package main
import (
//…
"golang.org/x/net/websocket"
)
func Echo(ws *websocket.Conn) {
var err error
for {
var reply string
if err = websocket.Message.Receive(ws, &reply); err != nil {
break
}
fmt.Println("Received back from client: " + reply)
msg := "Received: " + reply
if err = websocket.Message.Send(ws, msg); err != nil {
break
}
}
}
func main() {
http.Handle("/", websocket.Handler(Echo))
if err := http.ListenAndServe(":1234", nil); err != nil {
log.Fatal("ListenAndServe:", err)
}
}
- 37. www.usa-mimi.jp
2016©MNU co. ltd.
n
func UploadOS(user, key, authUrl, container, fileId, contentType string, body io.Reader) (string, error) {
storageUrl, storageToken, err := authenticate(user, key, authUrl)
if err != nil {
return "", err
}
req := goreq.Request{Uri: storageUrl + "/" + container + "/" + fileId, Method: "PUT", Body: body}
req.AddHeader("X-Auth-Token", storageToken)
req.AddHeader("Content-Type", contentType)
req.AddHeader("Transfer-Encoding", "chunked”)
res, err := req.Do()
if err != nil {
return "", err
}
if res.StatusCode != 201 {
log.Info(res.StatusCode)
return "", errors.New("upload failed")
}
return res.Header.Get("ETag"), nil
}