0
|
1 package main
|
|
2
|
|
3 import (
|
|
4 "flag"
|
|
5 "fmt"
|
|
6 "html/template"
|
|
7 "log"
|
|
8 "net/http"
|
|
9 "os"
|
|
10 )
|
|
11
|
|
12 type rate struct {
|
|
13 year int
|
|
14 rate0 float64
|
|
15 rate1 float64
|
|
16 }
|
|
17
|
|
18 type rates []rate
|
|
19
|
|
20 func main() {
|
|
21
|
|
22 var s = flag.Bool( "s", false, "server mode" )
|
|
23 var p = flag.Int( "p", 8080, "port")
|
|
24 flag.Parse()
|
|
25
|
|
26 if *s {
|
|
27 host := "localhost:" + fmt.Sprintf( "%d", *p )
|
|
28 fmt.Fprintf( os.Stderr, "starting server (%d)...\n", *p )
|
|
29
|
|
30 r0 := rate{ 2001, 0.1, 0.2 }
|
|
31 r1 := rate{ 2002, 0.2, 0.3 }
|
|
32 rt := rates{ r0, r1 }
|
|
33
|
|
34 http.HandleFunc( "/", handler )
|
|
35 http.HandleFunc( "/list", rt.list )
|
|
36 log.Fatal( http.ListenAndServe( host, nil ) )
|
|
37
|
|
38 } else {
|
|
39 files := flag.Args()
|
|
40
|
|
41 if len( files ) == 3 {
|
|
42 fmt.Println( "ok" )
|
|
43 } else {
|
|
44 fmt.Fprintln( os.Stderr, "not ok" )
|
|
45 }
|
|
46 }
|
|
47 }
|
|
48
|
|
49 func handler( w http.ResponseWriter, r *http.Request ) {
|
|
50
|
|
51 const tmpl = `<p> Hello, Template ! </p>`
|
|
52 t := template.Must( template.New( "hoge" ).Parse( tmpl ) )
|
|
53 err := t.Execute( w, nil ); if err != nil {
|
|
54 log.Fatal( err )
|
|
55 }
|
|
56 fmt.Fprintf( w, "url.path = %q\n", r.URL.Path )
|
|
57 }
|
|
58
|
|
59 func ( r rate ) String() string {
|
|
60 return fmt.Sprintf( "%d年,%.2f %,%.2f %", r.year, r.rate0, r.rate1 )
|
|
61 }
|
|
62
|
|
63 func ( rt rates ) list( w http.ResponseWriter, r *http.Request ) {
|
|
64 for i, v := range rt {
|
|
65 fmt.Fprintf( w, "%d,%v\n", i, v )
|
|
66 }
|
|
67 }
|
|
68
|