中级会员
  • 第 1783 位会员
  • yaozijian110
  • yaozijian110@gmail.com
  • 2014-10-23 06:03:35
  • Offline
  • 0

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 也不留个联系方式,感兴趣的怎么联系?
  • 可以用标准包reflect中的reflect.Select()函数来处理。给你写了个简单的例子: ``` package main import ( "fmt" "math/rand" "reflect" "time" ) type ( product struct { id int // 生产者序号 val int // 产品 } producer struct { id int // 序号 chnl chan *product } ) var ( producerList []*producer notifynew chan int updatedone chan int ) func main() { rand.Seed(time.Now().Unix()) notifynew = make(chan int, 1) updatedone = make(chan int, 1) ticker := time.NewTicker(time.Second) cases := update(ticker) for { chose, value, _ := reflect.Select(cases) switch chose { case 0: // 有新的生产者 cases = update(ticker) updatedone <- 1 case 1: // 创建新的生产者 if len(producerList) < 5 { go newproducer() } default: item := value.Interface().(*product) fmt.Printf("消费: 值=%d 生产者=%d\n", item.val, item.id) } } } func update(ticker *time.Ticker) (cases []reflect.SelectCase) { // 新生产者通知 selectcase := reflect.SelectCase{ Dir: reflect.SelectRecv, Chan: reflect.ValueOf(notifynew), } cases = append(cases, selectcase) // 定时器 selectcase = reflect.SelectCase{ Dir: reflect.SelectRecv, Chan: reflect.ValueOf(ticker.C), } cases = append(cases, selectcase) // 每个生产者 for _, item := range producerList { selectcase = reflect.SelectCase{ Dir: reflect.SelectRecv, Chan: reflect.ValueOf(item.chnl), } cases = append(cases, selectcase) } return } func newproducer() { newitem := &producer{ id: len(producerList) + 1, chnl: make(chan *product, 100), } producerList = append(producerList, newitem) notifynew <- 1 <-updatedone go newitem.run() } func (this *producer) run() { for { time.Sleep(time.Duration(int(time.Millisecond) * (rand.Intn(1000) + 1))) item := &product{ id: this.id, val: rand.Intn(1000), } fmt.Printf("生产: 值=%d 生产者=%d\n", item.val, item.id) this.chnl <- item } } ```
  • dotest()写得不对,不应该用http.Get,而已应该用前面的client来执行GET请求,这样才让前面的MaxIdleConnsPerHost设置生效,而http.Get还是使用http包中默认的MaxIdleConnsPerHost设置(2)
  • 可以用动态链接库实现:把路由代码编译成动态链接库,程序运行中动态加载。我已经在go 1.5.1,64位Ubuntu 14.04系统中实验过,虽然没用过gin这种web框架,但从动态链接库中加载代码的原理是通用的,跟web框架没关系。
  • #1 @wuhanyucheng 硕士毕业工作九年,工作中用golang两年,月薪能到税前两万不?