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

golang list.remove

for循环删除的时候要用临时变量保存e.Next(),删除后再赋值给e,否则删除后e=nil就直接退出了 func TestList(t *testing.T) { l := list.New() for i := 0; i < 10; i++ { l.PushBack(i) } //fmt.Printf("%v", l.) for e := l.Front(); e != nil; e = e.Next() { fmt.Print(e.Value.(int)) } fmt.Println("") var next *list.Element for e := l.Front(); e != nil; { if e.Value.(int) == 5 || e.Value.(int) == 7...阅读全文

博文 2015-06-18 19:00:34 varding

go for select

select里面的break是无法退出for语句的。如下; package main import ( "fmt" ) func main() { var c=make(chan int,1024) quit:=make(chan string,1) c<-1 quit<-"q" for{ select{ case <-c: fmt.Println("here") case <-quit: fmt.Println("quit") break } } } 有几种方法可以退出for循环 1使用goto语句: package main import ( "fmt" ) func main() { var c=make(chan int,1024) quit:=make(chan string,1)...阅读全文

博文 2016-08-12 11:00:07 qii

golang for-select 优雅的退出

启动两个做为生产者的go-routing, 分别将数据生产的数据写入两个带缓冲的通道cha1,ch2 分别模拟在Main go-routing和 sub go-routing中通过for-select循环读取两个通道的值并打印 通过3种方式优雅的退出main go-routing exit for-select in go-routing https://play.golang.org/p/Ar4389-87QE package main import ( // "time" "fmt" ) func produce(id int, ch chan string, quitSub chan int){ for i:=0;i< 10;i++{ ch <- fmt.Sprintf("msg:%d...阅读全文

博文 2020-05-21 19:32:47 夜空一起砍猩猩

Golang select语句退出循环

package main import ( "fmt" "time" ) func main() { done := make(chan interface{}) go func() { time.Sleep(5 * time.Second) close(done) }() workCounter := 0 loop: for { select { case <-done: break loop default: } workCounter++ time.Sleep(1 * time.Second) } fmt.Printf("Achieved %v cycles of work before signaled to stop.\n", workCounter) } image.pn...阅读全文

博文 2019-06-11 10:02:41 FredricZhu

关于select的无法退出的问题

想实现一个主程序在监听多个channel的练习。如下,我理解只输出一次就会退出,但是实际上,似乎跑了个死循环,问题出在哪里? ```golang package main import ( "fmt" "time" ) func put(c chan<- string, msg string) { time.Sleep(time.Second * 1) //for i := 1; i < 10; i++ { c <- msg //} close(c) } func main() { c1 := make(chan strin...阅读全文

chan使用注意

package main import ( "fmt" ) func main() { c := make(chan int, 0) go func() { i := 10 for i > 0 { c <- i i-- } close(c) }() for { fmt.Println("loop") select { case _, ok := <-c: fmt.Println("recv:", ok) if !ok { fmt.Println("break for") break } } } } 不能break for语句,貌似break了select语句,程序一直在死循环,不能正常退出!...阅读全文

博文 2017-03-21 02:43:16 756445638

Golang Merge多个channel的response到一个channel中

package orch type Orch struct { } func New() *Orch { return &Orch{} } func (orch *Orch) Or(channels ...<-chan interface{}) <-chan interface{} { switch len(channels) { case 0: return nil case 1: return channels[0] } orDone := make(chan interface{}) go func() { defer close(orDone) switch len(channels) { case 2: select { case <-channels[0]: case <-cha...阅读全文

博文 2019-06-14 18:02:41 FredricZhu

golang context提前退出

golang中context包实现提前退出 以前不知道怎么写的,一直无法退出,还以为程序就是无法提前退出。。 下面的程序,request休眠100s,然后在另外一个goroutine中,3s后退出所有context import ( "context" "log" "sync" "time" ) func request() { time.Sleep(100 * time.Second) } var wg sync.WaitGroup func do(ctx context.Context,wg *sync.WaitGroup, f func()) { defer wg.Done() ctx2, cancel2 := context.WithCancel(ctx) defer cancel2...阅读全文

博文 2020-04-04 14:32:50 darcyaf

Golang控制大于3个Error之后退出打印

package main import ( "fmt" "net/http" ) type Result struct { Error error Response *http.Response } func main() { checkStatus := func(done <-chan interface{}, urls ...string) <-chan Result { results := make(chan Result) go func() { defer close(results) for _, url := range urls { resp, err := http.Get(url) result := Result{ Error: err, Response: res...阅读全文

博文 2019-06-14 23:32:44 FredricZhu