Up to Main Index Up to Journal for October, 2012 JOURNAL FOR MONDAY 29TH OCTOBER, 2012 ______________________________________________________________________________ SUBJECT: Insidiously sliced bugs DATE: Mon Oct 29 21:33:14 GMT 2012 When coding in Go one thing that keeps tripping me up is unintentional modification of slice data when passing slices as parameters to functions and methods. I wish I could use something like: f(x []string) f(x *[]string) However I know this wouldn't work because slices contain references. When you pass a slice it contains a pointer to the underlying array data, the slices length and capacity. This makes passing slices fast. It also means that although a slice is passed by value you can still modify the underlying array through the slice's reference - although you cannot modify the length or capacity unless the slice is passed as a pointer. There is a good article by Andrew Gerrand on the Go blog here: https://blog.golang.org/2011/01/go-slices-usage-and-internals.html So why do I bring this up? I've been writing a lot of test cases for WolfMUD using table driven tests[1]. I've also spent the last 3 hours or so debugging an instance where a New function was modifying a slice passed as a parameter. The result was it was modifying the test data and corrupting the table for all the rest of the tests. Not time well spent when I'm trying to get everything ready for releasing the prototype. All fixed now - 1 day left to go... -- Diddymus [1] See this Go wiki entry: https://code.google.com/p/go-wiki/wiki/TableDrivenTests Up to Main Index Up to Journal for October, 2012