Size: a a a

Golang Developers — русскоговорящее сообщество

2020 May 24

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
и вот есть такой финт ушами для обхода в виде использования интерфейсов
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
делаем тож самое, но все пихается в интерфейсы, в тестовой части делается стаб с собственными функциями
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
и тогда по идее должно работать
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
но у меня не заработало
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
вопрос почему
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
В твонм примере ты используешь функцию не провайдера а оболочки
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
не понял о чем ты
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
рассоси пожалуйста
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
У тебя структура фу, и в ней адаптер внутри
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
ну все верно
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
И вызываешь метод ред ты именно фу структуры а не адаптера который в ней
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Тогда в этом методе вызови метод рид адаптера
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
ббляяяяя
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
я тупой
источник

VS

Vladimir Smagin in Golang Developers — русскоговорящее сообщество
спасибо
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Но тогда если нул отдашь будет паника )
источник
2020 May 25

x

x-foby in Golang Developers — русскоговорящее сообщество
Vladimir Smagin
это описано в ембеддинге голанга
Но в вашем примере нет эмбеддинга
источник

АЗ

Артем Зайцев... in Golang Developers — русскоговорящее сообщество
всем привет, может кто подскажет где я дурачок?
Есть задача принять два канала, принимать из этих каналов инты, выполнить над ними функцию и передать их сумму в другой канал.
package main

import (
   "fmt"
)

func Merge2Channels(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) {
 var chan1 []int;
 var chan2 []int;
 var x int;
 var y int;

 count_n := 0;

 for {
   if count_n == n {
     return
   }
   
   select {
   case first := <- in1:
   fmt.Print(first)
     if len(chan2) > 0 {
       x, chan2 = chan2[len(chan2)-1], chan2[:len(chan2)-1]
       out <- f(x) + f(first)
     } else {
       chan1 = append(chan1, first)
       count_n += 1
     }
     if count_n == n {
       return
     }

   case second := <- in2:
     if len(chan1) > 0 {
       y, chan1 = chan1[len(chan1)-1], chan1[:len(chan1)-1]
       out <- f(y) + f(second)
     } else {
       chan1 = append(chan1, second)
       count_n += 1
     }
     if count_n == n {
       return
     }
   }
 }
}

func sum(i int) int {
 return i + i;
}

func chek(o chan int) {
   for i := range o {
     fmt.Print(i)
   }
}

func send(c1 chan int, c2 chan int) {
   c1 <- 1
   c2 <- 2
   c2 <- 1
}

func main() {
   c1 := make(chan int, 5)
   c2 := make(chan int, 5)
   o := make(chan int, 5)

   go Merge2Channels(sum, c1, c2, o, 4)
   go chek(o)
   go send(c1, c2)

}

пишу такой код, код не валится, но и не работает. чяднт?
источник

AY

Alexey Yurchenko in Golang Developers — русскоговорящее сообщество
golang merge two channel
в гугле работает
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Артем Зайцев
всем привет, может кто подскажет где я дурачок?
Есть задача принять два канала, принимать из этих каналов инты, выполнить над ними функцию и передать их сумму в другой канал.
package main

import (
   "fmt"
)

func Merge2Channels(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) {
 var chan1 []int;
 var chan2 []int;
 var x int;
 var y int;

 count_n := 0;

 for {
   if count_n == n {
     return
   }
   
   select {
   case first := <- in1:
   fmt.Print(first)
     if len(chan2) > 0 {
       x, chan2 = chan2[len(chan2)-1], chan2[:len(chan2)-1]
       out <- f(x) + f(first)
     } else {
       chan1 = append(chan1, first)
       count_n += 1
     }
     if count_n == n {
       return
     }

   case second := <- in2:
     if len(chan1) > 0 {
       y, chan1 = chan1[len(chan1)-1], chan1[:len(chan1)-1]
       out <- f(y) + f(second)
     } else {
       chan1 = append(chan1, second)
       count_n += 1
     }
     if count_n == n {
       return
     }
   }
 }
}

func sum(i int) int {
 return i + i;
}

func chek(o chan int) {
   for i := range o {
     fmt.Print(i)
   }
}

func send(c1 chan int, c2 chan int) {
   c1 <- 1
   c2 <- 2
   c2 <- 1
}

func main() {
   c1 := make(chan int, 5)
   c2 := make(chan int, 5)
   o := make(chan int, 5)

   go Merge2Channels(sum, c1, c2, o, 4)
   go chek(o)
   go send(c1, c2)

}

пишу такой код, код не валится, но и не работает. чяднт?
У вас горутины не успевают запуститься, так как основная горутина завершается.

Для понимания добавьте в конец функции main эти две строки:
var i int
fmt.Scan(&i)
источник