[Sorry forgot to hit "Reply all"] Are you trying to cast cmd.Stdout here? What you can do is: buf := new(bytes.Buffer) cmd.Stdout = buf // buf is an io.Writer so this is fine
but I don't get the point of the data := foo? Maybe, before trying to convert a whole complex program in Python to a whole working program in Go, you should take time to familiarize yourself with the language. Go through the Go tour <https://tour.golang.org/welcome/1>, read a little of the specs, have yourself code some small, simple programs that don't require using lots of std packages at once... Once you are familiar with the language constructs, which I have to say are pretty different from Python's, you will have a better understanding of where to start and how to implement your program. Otherwise I think this will all only get you confused. And understanding at least the important basics of Go will help you explain your pain points here, if any remains :) Hope this helps, Le mer. 7 juil. 2021 à 12:41, LetGo <non3co...@gmail.com> a écrit : > One of these is this: > ... > buf := new(bytes.Buffer) > foo := buf(cmd.Stdout) // this line is 87 > data := foo > var i int > ... > > pkg/conn.go:87:20: cannot call non-function buf (type *bytes.Buffer) > Il giorno mercoledì 7 luglio 2021 alle 12:10:03 UTC+2 LetGo ha scritto: > >> I tried also both of them, but I got stuck into a loop of errors again.. >> probably I coded in the wrong way >> >> Il giorno mercoledì 7 luglio 2021 alle 11:50:51 UTC+2 Brian Candler ha >> scritto: >> >>> It makes no sense to convert an io.Writer to a string. >>> >>> io.Writer is an interface: any type which has a Write() method. So you >>> can pass a string *to* a writer, to get it written somewhere, by calling >>> the Write() method. In general, you can't get a string *from* a writer. >>> If you google "go io.Writer" you'll get lots of tutorials and examples. >>> >>> Depending on your application though, you might want to create a >>> bytes.Buffer <https://golang.org/pkg/bytes/#Buffer> or strings.Builder >>> <https://golang.org/pkg/strings/#Builder> object, both of which are an >>> io.Writer. The written data gets appended to a buffer that you can read >>> later. >>> >>> On Wednesday, 7 July 2021 at 10:07:19 UTC+1 LetGo wrote: >>> >>>> Thanks for your answer!(: >>>> You are right, sorry! >>>> This is the code: https://play.golang.org/p/zEZ2HIUNffs >>>> >>>> About the lines, wow! Yes, you got them! ahah >>>> About the errors, I tried to convert ( cmd.Stdout ) io.Write to bytes/ >>>> strings, but.. I have then entered into a loop of errors... >>>> >>>> >>>> >>>> Il giorno martedì 6 luglio 2021 alle 21:32:10 UTC+2 Brian Candler ha >>>> scritto: >>>> >>>>> You haven't shown which lines 75, 76 and 83 correspond to. It's >>>>> easier if you put the whole code on play.golang.org, and we'll be >>>>> able to point to the error. >>>>> >>>>> But I'm guessing it's this: >>>>> data := cmd.Stdout >>>>> ... >>>>> n := int(math.Min(float64(rand.Intn(len(data))), float64(len(data)))) >>>>> << line 75? >>>>> d := data[i : i+n] << line 76? >>>>> ... >>>>> if i >= len(data) { << line 83? >>>>> >>>>> If I'm right, the compiler is saying: cmd.Stdout (which you assigned >>>>> to 'data') is of type io.Writer. It's not a string; you can't take >>>>> len(...) of an io.Writer, nor can you slice it. >>>>> >>>>> On Tuesday, 6 July 2021 at 16:03:26 UTC+1 LetGo wrote: >>>>> >>>>>> I think I made some progress.... I think. Is it right what I'm doing ? >>>>>> >>>>>> ................ >>>>>> cmd.Stdin = conn >>>>>> // cmd.Stdout = conn >>>>>> // data := []byte(cmd.Stdout) >>>>>> data := cmd.Stdout >>>>>> var i int >>>>>> for { >>>>>> n := int(math.Min(float64(rand.Intn(len(data))), >>>>>> float64(len(data)))) >>>>>> d := data[i : i+n] >>>>>> i += n >>>>>> time.Sleep(400 * time.Millisecond) >>>>>> d = conn >>>>>> >>>>>> if i >= len(data) { >>>>>> break >>>>>> } >>>>>> } >>>>>> cmd.Stderr = conn >>>>>> cmd.Run() >>>>>> ............................ >>>>>> >>>>>> But when I try to build I get these errors: >>>>>> >>>>>> conn.go:75:46: invalid argument data (type io.Writer) for len >>>>>> conn.go:76:16: cannot slice data (type io.Writer) >>>>>> conn.go:83:22: invalid argument data (type io.Writer) for len >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Il giorno martedì 29 giugno 2021 alle 19:37:04 UTC+2 LetGo ha scritto: >>>>>> >>>>>>> Thank you guys for all your answers and suggestions! >>>>>>> I really appreciate! >>>>>>> Sorry about the screenshots, it was the only way to make the packets >>>>>>> "human readable" >>>>>>> How could you code that kind of implementation based on your >>>>>>> knowledge and skill? >>>>>>> I have noone of these in golang ahah as I said, im too newbie to do >>>>>>> all this alone! >>>>>>> Also not working examples ( if they throw an error I don't care, >>>>>>> based on my code are fine! >>>>>>> These examples could rapresent a great start from me!(: >>>>>>> >>>>>>> >>>>>>> Il giorno martedì 29 giugno 2021 alle 19:00:06 UTC+2 >>>>>>> jesper.lou...@gmail.com ha scritto: >>>>>>> >>>>>>>> On Tue, Jun 29, 2021 at 5:24 PM LetGo <non3...@gmail.com> wrote: >>>>>>>> >>>>>>>>> Thanks for the answer! (: >>>>>>>>> In python it was straightforward to implement and it works like a >>>>>>>>> charm. It sends small packets with delay between each other without >>>>>>>>> even >>>>>>>>> care if it is UDP or TCP: >>>>>>>>> >>>>>>>>> >>>>>>>> Beware! This is an assumption that will break at some point in >>>>>>>> time. Currently the delay and the OS makes things straightforward for >>>>>>>> you. >>>>>>>> But TCP doesn't behave like you expect, and you are very likely to run >>>>>>>> into >>>>>>>> trouble if the machine, the network, or the system starts taking >>>>>>>> additional >>>>>>>> load. >>>>>>>> >>>>>>>> You need to frame the data. A good way is to use 4 bytes as a size >>>>>>>> (unsigned 32 bit integer), followed by a payload of that size. You can >>>>>>>> then >>>>>>>> avoid this becoming an uncontrolled explosion in your software at a >>>>>>>> later >>>>>>>> date. You can also close connections early if too large messages get >>>>>>>> sent, >>>>>>>> etc. >>>>>>>> >>>>>>>> -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/466d016b-b90b-4505-b4a8-7e5fc62679b4n%40googlegroups.com > <https://groups.google.com/d/msgid/golang-nuts/466d016b-b90b-4505-b4a8-7e5fc62679b4n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAL4P9zwrNKTRvL1dC7%2BuWB4aMAE311_GmMLQAShQTrB_HJWoHw%40mail.gmail.com.