咖啡伴侶

          呆在上海
          posts - 163, comments - 156, trackbacks - 0, articles - 2

          2013年12月19日

          package main

          import (
              "fmt"
              "time"
          )

          var ch chan int = make(chan int, 1)

          func main() {
              go aaa()

              select {
              case <-ch: //拿到鎖
                  fmt.Println("call")
              case <-time.After(5 * time.Second): //超時5s
                  fmt.Println("5 sec call")
              }
          }

          func aaa() {
              time.Sleep(time.Second * 3)
              ch <- 1
          }

          posted @ 2013-12-24 13:03 oathleo 閱讀(7293) | 評論 (0)編輯 收藏

          conn, err = ln.Accept()
          go handleConnection(conn)
          看到這里我曾經有個疑問,為什么不是  handleConnection(&conn) ?

          下面這個例子解釋這個問題

          package main

          import (
              "fmt"
          )

          type Interface interface {
              say() string
          }

          type Object struct {
          }

          func (this *Object) say() string {
              return "hello"
          }

          func do(i Interface) string {
              return i.say()
          }

          func main() {
              o := Object{}
              fmt.Println(do(&o))
              fmt.Printf("CCCCCCCCCCC:%T", o)
          }

          函數的參數以接口定義,編譯器會自己判斷參數是對象還是對象的指針
          比如,say是指針上的方法,所以do只接受Object的指針做參數,do(o)是編譯不過的

          所以看到庫里接口做參數類型定義的時候,可以簡單認為,這個接口肯定是個對象指針(雖然也可以用對象,單估計沒有哪個類庫會用)

          例如:
          conn, err = ln.Accept()
          go handleConnection(conn)

          這里conn是個接口,不需要 go handleConnection(&conn)

          posted @ 2013-12-22 12:45 oathleo 閱讀(4396) | 評論 (1)編輯 收藏

          package main

          import (
              "fmt"
              "mag/common"
              "time"
          )

          func main() {
              c := make(chan bool, 10)

              tt := common.GetTodayGivenTime("161300")
              dd := common.SinceNow(tt)
              time.AfterFunc(dd, func() { //非阻塞
                  
          //后續每24小時建立目錄
                  ticker24h := time.NewTicker(5 * time.Second)
                  for {
                      select {
                      case <-ticker24h.C:
                          fmt.Println("print")
                      }
                  }
              })

              <-c
          }

          posted @ 2013-12-19 16:15 oathleo 閱讀(5371) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 潜江市| 蚌埠市| 东阿县| 东方市| 白河县| 馆陶县| 文成县| 闵行区| 沁阳市| 阜阳市| 丰城市| 周宁县| 镇江市| 西畴县| 平塘县| 光泽县| 右玉县| 精河县| 罗田县| 武强县| 金沙县| 池州市| 湟源县| 徐汇区| 梁河县| 东光县| 漳浦县| 金秀| 衢州市| 象州县| 焉耆| 政和县| 嵩明县| 改则县| 辽源市| 大余县| 田东县| 罗山县| 闻喜县| 天气| 威远县|