Complete code on play.golang.org is much easier to understand. At the moment I don't think your code will do anything useful. For example
buf := new(bytes.Buffer) ... bizz := buf.Bytes() will always set bizz to an empty slice; since you never modify bizz, len(bizz) will always be zero. Also, kk := io.Writer(z) creates an io.Writer variable with a particular value, but never uses that value, because 2 lines later you replace it with a different value. I can't say for sure without seeing the whole program, but I don't think that's where the error is occurring; I think it's the later line ("kk = conn"), because you don't seem to use that value. It's as if you wrote a program like this: func main() { i := 1 i = 2 } i.e. you just return and never use the value of "i". I think the previous advice given was good. Do the go tour, several times if required; look at the tutorials at https://golang.org/doc/, look for interesting articles at https://blog.golang.org/index; after you pick up the core concepts, find some example sockets-based code, run it, modify it. Stringing together statements, if you don't understand what each individual statement does, is unlikely to give a useful result. On Thursday, 8 July 2021 at 18:54:29 UTC+1 LetGo wrote: > I thought that after getting the bytes, chunk the data, I need to have the > io.writer back before send the chunked data > So far I came up with this: > > ... > cmd.Stdin = conn > buf := new(bytes.Buffer) > cmd.Stdout = buf > > bizz := buf.Bytes() > > var i int > for { > n := int(math.Min(float64(rand.Intn(len(bizz))), float64(len(bizz)))) > d := bizz[i : i+n] > i += n > > > z := bytes.NewBuffer(d) > > kk := io.Writer(z) > //this line creates the error > > time.Sleep(400 * time.Millisecond) > > kk = conn > > > if i >= len(bizz) { > break > } > } > cmd.Stderr = conn > cmd.Run() > ..... > > But know I get this error: > > conn.go:95:21: kk declared but not used > Il giorno mercoledì 7 luglio 2021 alle 15:49:56 UTC+2 mlevi...@gmail.com > ha scritto: > >> You cannot *per se* convert an interface or a struct to a builtin like >> []byte >> You might wanna have a look at the Bytes method >> <https://golang.org/pkg/bytes/#Buffer.Bytes> of *bytes.Buffer, which >> returns the internal buffer of the type as a slice of bytes. Normally that >> would have been a good exercise to let you find it yourself, and I don't >> know if it is really "help" to give it to you directly, but as I said, once >> you are done with your small tool, the next step for you will be to go back >> from the basic Go constructs :) >> >> Glad I could help, and don't bother with the comments, the best "thank >> you" I can wish for is that we continue learning together ;) >> Hope the following adventures of your Go journey are as interesting as >> they are for me! >> >> Cheers >> >> Le mer. 7 juil. 2021 à 15:08, LetGo <non3...@gmail.com> a écrit : >> >>> Thanks for your answer!(: >>> You are right, but I just wanted to have this one little tool in Go and >>> I have never thought that could be that hard... ahahah >>> >>> By the way, it works as you said, it fixed the error! ( obviously.. ) >>> the only thing left is to convert type *bytes.Buffer to []byte * I think* >>> and then I will be almost done. >>> Im already searching how to do that. >>> >>> Once it will work as I wish, I will add your names to my comments ( I >>> think this is better than any "thank you" ) in the code, to remind me of >>> your kind help(: >>> >>> >>> >>> Il giorno mercoledì 7 luglio 2021 alle 14:01:33 UTC+2 mlevi...@gmail.com >>> ha scritto: >>> >>>> [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 <non3...@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...@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...@googlegroups.com. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/golang-nuts/0f12076e-f325-4583-ba85-857084aec83dn%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/golang-nuts/0f12076e-f325-4583-ba85-857084aec83dn%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/82e7e7fc-f54a-41a3-9a86-e0c8189e11aen%40googlegroups.com.