Wednesday 25 December 2013

Passing arguments to functions in Golang

Functions wouldn't be much use if we couldn't pass parameters to them. Rewriting our previous example, we might decide to create a function that takes a string as it's single argument.
package main

import "fmt"

func saySomething(somethingToSay string) {
    fmt.Println(somethingToSay)
}

func main() {
    saySomething("Hello")
    saySomething("world")
}
We've declared a function saySomething that takes a single argument. The argument is a string type and is called somethingToSay. We then use our new function, calling it twice from our main func to output:
Hello
wordl
Go also provides first class functions. This means we can pass a function as an argument into another function. For example:
package main

import "fmt"

func hello(aFunc func(words string) string) {
    fmt.Println(aFunc("Hello"))
}


func main() {

    var x = func(words string) string {
        return words + " world"
    }
    hello(x)

}
Again, all our program does is print
Hello world
, though in a roundabout way. We've defined a function hello which accepts as its argument another function - note that the argument defines the signature of the function we expect to receive - in this case, a function that takes one string argument and returns a string. Moving into our main function, we define x to be a function that will append " world" onto whatever string is passed in. This is rather convoluted, but illustrates the point. Now, if we fancy, we can define a goodbye function as well - to wit:
package main

import "fmt"

func goodbye(aFunc func(words string) string) {
    fmt.Println(aFunc("Goodbye"))
}

func hello(aFunc func(words string) string) {
    fmt.Println(aFunc("Hello"))
}


func main() {

    var x = func(words string) string {
        return words + " world"
    }
    hello(x)
    goodbye(x)

}
Now our program outputs the following:
Hello world
Goodbye world
Now our code is ripe for a refactor - we have duplicate argument definitions, which we can code out - but we will leave that to another post.

Monday 23 December 2013

Variables in golang

Declaring a variable in Go is a matter of using the var keyword. Let's follow on from our last piece of code and create a string, assign a value to it and then print it out.
package main

import "fmt"

func helloWorld() {
    var x string
    x = "Hello world"
    fmt.Println(x)
}
 
func main() {
    helloWorld()
}
Again, nothing spectacular here - we are simply printing out "Hello world", however, it illustrates simple variable declaration and assignment.
var x string
declares a variable for us and lets the compiler know we want it to be of type string. Next, we assign the string "Hello world" to variable x
x = "Hello world"
and finally, we print it out - just as we did before. Go is statically typed and compiled, however Go does borrow a little from dynamically typed languages by exposing a syntax that removes the need to name the variable's type. The Go compiler's ability to infer types allows us to short-cut our variable declarations. To wit, we can re-write our helloWorld function as follows:
func helloWorld() {
    x := "Hello world
    fmt.Println(x)
}
When we compile our code, Go will use type inference to assign a type to our variable for us. We are left with the security of a strongly typed language while still having the convenience of a more dynamically typed syntax. One more for the road; if you prefer to explicitly type your variable, but still enjoy assigning them immediately, the following variant of our helloWorld function will see you right:
func helloWorld() {
    var x string = "Hello world"
    fmt.Println(x)
}

Sunday 22 December 2013

Creating a function in golang

Our first piece of code had only one function - main. Let's create a new function in our code and call it from within the main function.
package main

import "fmt"

func helloWorld() {
    fmt.Println("Hello World")
}

func main() {
    helloWorld()
}
This piece of code does the same thing as our first hello world in go from the end user experience. The big difference is we are calling a function. Declaring a new function in go is simple - use the func keyword to begin declaring your function. Then, as in many other languages, include a pair of parentheses. Our hellWorld function takes no arguments at the moment so we leave the parentheses empty. Similarly, helloWorld doesn't return anything, so we can forget about giving our function a return type for the moment. Golang has some C inspired syntax so functions are enclosed in curly braces. The rest of the hellWorld function should look familiar since we are simply calling printing some text to standard out as we did before. Calling a function is equally familiar to anyone with some coding under their belt - as demonstrated in main above where we call our newly defined helloWorld func.

Friday 20 December 2013

Dissecting Hello World in Go

In the first post, we wrote a simple hello world application in go. Let's examine it a bit and figure out what all the moving parts are. For reference, here's the code again:
package main
 
import "fmt"
 
func main() {
    fmt.Println("Hello World from Golang")
}
We begin our code with the
package main
command. Packages are exactly what they sound like - discreet pieces of code with a name. You can think of the package command as wrapping up your code into a little bundle so it is ready to be delivered and used by another piece of code. Specifying
package main
tells the compiler that this is the entry point of your code. Our import statement allows us to access other packages - it pulls in or imports other bits of code. Here we import the "fmt" package. This package allows us to create formatted input and output. The setup out of the way, we get to the meat and potatoes our
main
function - as the name suggest, main is the function that will get executed. It is the master control point for us to instruct the computer using golang. Our functionality here relies on the fmt.Println function - this prints a line of text to the standard output of the computer (your screen most likely) and appends a new line. And that's it. One super simple go program

Tuesday 10 December 2013

Hello World from Golang

Every journey into code begins with "Hello World". I don't know why, but that's what we do. It's a safe way of checking that you've got your language installed correctly and can at least run the most basic of basics - that of outputting something (in this case, some text) to the user. Golang, being C-Syntax inspired language, should look fairly familiar to pretty much anyone in the computer sciences. A nice simple Hello World application can be written as follows:
package main

import "fmt"

func main() {
    fmt.Println("Hello World from Golang")
}
Saving the above code as 'hello.go' and then typing the following on the command line:
go run hello.go
should net you a lovely little message:
Hello World from Golang