1

ok so yes im new to golang, but not to coding, I'm a bit confused with the way functions are working with golang, in this 2 weeks I have 9 times out or 10 I had an issue it was related to funtions... I'm no lazy I have search all over for examples to inspire me, but they are all under one main() funtion. I'm trying to have a http.get in one funtion and many other functions call this funtion everytime we need to use http.get so we dont repeat code over and over.. example:(this is not the actual code)

func myfunction(site) []byte {
        resp, err := client.Get(site) // client is because Im tunneling thing on a proxy TOR and had to create some helpers.. but this is working ok.

        return resp
}

func magic(staff) string {
        // do things and create websiteurl with staff and onther contants
        site := myfunction(website)
        contents, err := html.Parse(site.Body)
        //....
        //....
        return  result
}

main() {

        //... stuff happens :)
}

well the error is for example because I keep changing things around and getting different errors. or not at all.. but then no result..

cannot use resp.Body (type io.ReadCloser) as type []byte in return argument ./gobot.go:71: cannot use site (type []byte) as type io.Reader in argument to html.Parse:

when I do not get an error that is how I did it the first time the Site.Body will do nothing when parsing... I put a couple of debug prints to STDOUT and I had results like two sequence of numbers.

so basically how do I return a "result" of my query from one function to the original so it can then be parse and used? I hate to repeat code so trying to keep the repetitive code in one function and have it get it call when needed it.

thanks

3
  • 2
    return io.ReadCloser instead of return []byte. I strongly suggest running through tour.golang.org from start to finish. Commented Feb 2, 2016 at 4:31
  • 1
    You should take more time to write better question and code. The functions' signatures aren't even correct without the argument's type. Commented Feb 2, 2016 at 4:38
  • pie it was just a on the fly example to not actually copy paste the real stuff. but thanks to your response below I got it working. thanks. Commented Feb 3, 2016 at 2:30

1 Answer 1

2

myfunction has the wrong return type. Instead of []byte it should return *http.Response.

func myfunction(site string) *http.Response {
        resp, err := client.Get(site) 
        if err != nil {
                log.Fatal(err)
        }

        return resp
}
Sign up to request clarification or add additional context in comments.

2 Comments

thanks! that was it :) now I understand this better. thank you.
@cfernandezlinux please accept it as the answer thanks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.