Size: a a a

2020 April 28

а

а кто это in Go-go!
и того, и другого получается
источник

AP

Andrey Privalov in Go-go!
V---V
В функции make второй параметр это длина базового массива или среза?
В го туре это точно есть) проходили го тур? или забылось просто?
источник

а

а кто это in Go-go!
зачем готур, есть же чат
источник

AP

Andrey Privalov in Go-go!
второй параметр - длина, третий - емкость
источник

NK

Nur Kutlugallyamov in Go-go!
Для разнообразия небольшая задача)
https://play.golang.com/p/JVaIIDKz7eO
источник

V

V---V in Go-go!
Да я книжку читаю, вот цитата
*Срез создаеттся встроенной функцией make
       x:= make([]float64, 5, 10)
Код создает срез который связан с массивом типа float64  и длиной 5.
Третий параметр 10 - это длина массива, на который указывает срез
источник

ВС

Владимир Столяров... in Go-go!
странно, что такое объяснение, а не в терминах "длина"-"емкость"
источник

A

Azamat in Go-go!
добрый день! какие есть библиотеки которые могут перебрасывать переменное окружение через конфигурационный файл?
источник

AP

Andrey Privalov in Go-go!
Из популярных пакетов для конфигурирования: https://github.com/spf13/viper например
источник

AP

Andrey Privalov in Go-go!
github.com/kelseyhightower/envconfig - попроще, может быть актуальнее для вас
источник

AP

Andrey Privalov in Go-go!
А в целом - гуглить "awesome go" репозиторий и искать там)
источник

DD

Deka Dancer in Go-go!
Как каноничнее создавать переменную:
v := &pack.SomeStruct {} или через функцию типа
v := pack.NewStruct() ?
источник

x

x-foby in Go-go!
Deka Dancer
Как каноничнее создавать переменную:
v := &pack.SomeStruct {} или через функцию типа
v := pack.NewStruct() ?
Всё зависит от наличия приватных (иногда не только приватных) полей, которые требуют инициализации.
источник

VT

Vasiliy Toporov in Go-go!
Здравствуйте, подскажите, как протестировать код, в котором внутри есть бесконечный цикл? У меня есть метод структуры, который из вне запускается как горутина. Всё, что он делает - это прослушивание канала и вызов другого метода структуры, чтобы обработать сообщение из канала.

func (p *ReceivedEventsBrokerHandler) ListenForReceivedEvents() {
 for event := range p.eventsChanel {
   p.SendEvent(event)
 }
}

Я уже покрыл тестами метод SendEvent и теперь хочу разобраться с ListenForReceivedEvents. В тесте, я создаю канал, создаю сообщение для него и кладу в канал. Затем, закрываю канал. Потом создаю все зависимости для основной структуры, вызываю её конструктор, вызываю метод ListenForReceivedEvents и ниже прописываю ассерты для сообщения (у него должны поменяться несколько полей). Но мой тест блокируется, приходится его принудительно завершать. Но почему? Я ведь закрываю предварительно канал и for range в моём представлении должен проитерировать все сообщения в нём, а затем метод должен завершиться. Я пытался переписать for range на for select и внутри получать события через eveny, ok := <- p.eventsChanel и затем внутри проверять, что канал закрыт, его длина == 0 и делать return из метода, но тест всё равно продолжает висеть.
источник

AS

Andrey S in Go-go!
Vasiliy Toporov
Здравствуйте, подскажите, как протестировать код, в котором внутри есть бесконечный цикл? У меня есть метод структуры, который из вне запускается как горутина. Всё, что он делает - это прослушивание канала и вызов другого метода структуры, чтобы обработать сообщение из канала.

func (p *ReceivedEventsBrokerHandler) ListenForReceivedEvents() {
 for event := range p.eventsChanel {
   p.SendEvent(event)
 }
}

Я уже покрыл тестами метод SendEvent и теперь хочу разобраться с ListenForReceivedEvents. В тесте, я создаю канал, создаю сообщение для него и кладу в канал. Затем, закрываю канал. Потом создаю все зависимости для основной структуры, вызываю её конструктор, вызываю метод ListenForReceivedEvents и ниже прописываю ассерты для сообщения (у него должны поменяться несколько полей). Но мой тест блокируется, приходится его принудительно завершать. Но почему? Я ведь закрываю предварительно канал и for range в моём представлении должен проитерировать все сообщения в нём, а затем метод должен завершиться. Я пытался переписать for range на for select и внутри получать события через eveny, ok := <- p.eventsChanel и затем внутри проверять, что канал закрыт, его длина == 0 и делать return из метода, но тест всё равно продолжает висеть.
длина канала при создании какая? второй параметр в make какой?
источник

VT

Vasiliy Toporov in Go-go!
Канал небуферизованный, создаю его без второго параметра в make.
источник

AS

Andrey S in Go-go!
Vasiliy Toporov
Канал небуферизованный, создаю его без второго параметра в make.
тогда у вас блокируется когда вы кладёте сообщение в него
источник

VT

Vasiliy Toporov in Go-go!
Может быть тогда в тесте складывать в канал данные внутри горутины?
источник

AS

Andrey S in Go-go!
чтобы не блокировалось - должна существовать горутина, которая читает из него в данный момент, или должен быть буффер
источник

x

x-foby in Go-go!
Deka Dancer
Как каноничнее создавать переменную:
v := &pack.SomeStruct {} или через функцию типа
v := pack.NewStruct() ?
Простой пример: https://play.golang.org/p/hGT3W39BE0P
источник