Go语言中文网 为您找到相关结果 10

golang 中 select 多个case同时满足的情况

```go ch1 := make (chan int, 10) t1 := time.NewTimer(time.Second * 1) for { ch1<-1 select { case <-ch1: fmt.Println("ch1 pop one element") case <-t1.C: println("1s timer") t1.Reset(time.Second * 1) } } ``` 按理来说,1秒过后,第二个case也不应该被触发,因为第一个case始终满足(每次for循环开始的时候都会ch1 push一个元素),但是实际上1秒过后第二个case会被走到,这就搞不懂了,求解...阅读全文

大家来解惑--这段代码有啥问题?

``` package main import ( "fmt" "time" ) func main() { limiter := make(chan bool, 10) for i := 0; i < 100; i++ { limiter <- true go download(i, limiter) } } func download(index int, limiter chan bool) { time.Sleep(1 * time.Second) fmt.Println("start to download :", index) <-limiter } ``` 上面这段代码执行结果为什么最大打印值直到...阅读全文

Golang如何的通过pkcs12 decode得到pfx文件的值后签名加密

有个解密并签名接口想从PHP迁到Golang来 PHP函数如下,想用go来实现 static public function sign($plainText,$pwd){ $certs = array(); $sign = ""; openssl_pkcs12_read(file_get_contents("xxxx.pfx"),$certs,$pwd); openssl_sign($plainText,$sign,$certs['pkey']); return base64_encode($sign); } 目前 impor...阅读全文

关于golang time.Ticker的一个问题

昨天写代码的时候发现有一段代码的本应该是两秒的ticker足足10分钟才触发下一次的任务,具体原因在哪里也不清楚,应该是某处的bug了,但是我在测试的时候发现了一些不太理解的问题,求大佬能解惑。贴代码和执行结果: ![QQ20180522-0.png](https://static.studygolang.com/180522/a988243d4c6ae262e6537834906e4967.png...阅读全文

关于channel的问题

程序如下,当num为奇数的时候,输出就会少了最后一个。 本人小白,刚接触go,希望能够有人解惑,非常感谢! ``` func main() { var ch = make(chan int) num := 11 go func() { for i := 1; i <= num; i++ { ch <- i //fmt.Println("++", i) } close(ch) }() for ii := range ch { val := ii go func() { fmt.Println("--", val) }() } fmt.Println("程序运行结束") } ``` 输出结...阅读全文

如何使用自定义包中声明的结构体

大家好,我是golang新人,碰到了一个语法级别问题,找了好多地方也没头绪,希望前辈指点: 目录结构: ``` /test | |--/demo | |--demo.go |--main.go ``` demo.go: ```go package kz type Order struct{ name String } ``` ```go package main import ( "fmt" "./demo" ) func main(){ var o kz.Order o.name="kz" fmt.Println(o) o1 := kz.Order{name:"kz"} fmt.Print...阅读全文

解惑--一个关于go buffered channel 的问题

#### 欢迎大家来解惑: 以下代码中, done 这个 channel 使用 缓冲 和不使用缓冲,最终结果是一样的,这是为何? 这两者运行的过程分别是这样的?有何同与不同? ``` package main import ( "fmt" "time" ) func main() { done := make(chan bool, 1) // done := make(chan bool) go worker(done) <-done } func worker(done chan bool) { fmt.Println("start to working...") time.Sleep(2 * time....阅读全文