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 <non3co...@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+unsubscr...@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/CAL4P9zxaYtD6MvpFFcmC2-AaV4niKEozTuavhfKsAys8CeGzKw%40mail.gmail.com.

Reply via email to