• Какое IDE подойдет для программирования на golang?

    @PapaStifflera
    Родился, вырос...
    IDEA + plugin
    Ответ написан
    Комментировать
  • Как выбрать подстроку utf8-строки на GO?

    @valm0unt
    str := `Я UTF8 СТРОКА ПОЛУЧИ ИЗ МЕНЯ ПОДСТРОКУ`
    fmt.Println(string([]rune(str)[5:9]))
    Ответ написан
    Комментировать
  • Что тут проиходит?

    @SilentFl
    Мы не заходим во вторую ветку потому что time.After нам создает канал. Соответственно, на каждой итерации первым приходит сигнал от time.After(1*time.Second), после чего идет следующая итерация цикла, и оба таймовских канала пересоздаются. Вынесите time.After(10*time.Second) перед цикл, чтобы он не пересоздавался каждую итерацию, и будет вам счастье. вот так:
    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	c1 := make(chan struct{}, 10)
    	time_limit := time.After(time.Second * 10)
    Label1:
    	for {
    		select {
    		case res := <-c1:
    			fmt.Println(res)
    		case <-time_limit:
    			fmt.Println("time limit")
    			break Label1
    		case <-time.After(time.Second * 1):
    			fmt.Println("timeout 1")
    		}
    	}
    }

    Примечание - Label1 нам здесь нужна в из-за того, что компилятор расценивает break как часть select'а (ведь break располагается в первую очередь в select'e, а уже потом в for'е. синтаксис break [label_name] позволяет указать кому прерываться.

    Но лично мне этот label совсем не нравится (каким-то душком от него отдает, как в 70е года вернулись, того и гляди goto где-нить вылезет), и я бы написал этот код так:
    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func main() {
    	c1 := make(chan struct{}, 10)
    	time_limit := time.After(time.Second * 10)
    	func() {
    		for {
    			select {
    			case res := <-c1:
    				fmt.Println(res)
    			case <-time_limit:
    				fmt.Println("time_limit")
    				return
    			case <-time.After(time.Second * 1):
    				fmt.Println("timeout 1")
    			}
    		}
    	}()  //просто анонимная функция
    }
    Ответ написан
    Комментировать