INTERCLOUD BLOG
Interconnect. Smarter.

 

Recent Posts

Go Booby Traps Part 1

Go programming language is easy to learn, but there are some tricky traps. This article series is trying to show these booby traps so that you avoid them.

Trap#1

Let’s consider this code (code on the Playground):




In this example, we send an array by value to a function that modifies it. As we sent it by value, original value is not modified. Thus when we run it, we have:

Now let’s replace our array with a slice (code on the Playground):

When we run this example:

This might sound strange as we sent the slice by value, original should not have been modified!

Take five minutes to try to figure out why this happens and then have a look at the explanation below.

Explanation

When we send a slice by value, everything happens as if we had send it by reference. Slices behave as if we passed an array by reference (code on the Playground):

Which behaves as slices:

The explanation is quite simple: slices are structures that contain a reference to an array, as we can see in source code for slices:

Thus, when you pass a slice by value, the structure is copied, and the array is the same, and when you modify the array, the original slice points to the same array, and it is also modified


Trap#2

Let’s say we want to upper case first letter of names in User, as follows (code on the Playground):

If we run this code, we see that it doesn’t work as expected:

Why is this code not working? How could we fix it?

Explanation

This code doesn’t work as expected because in each loop, we copy struct User and thus when we modify it, original value is not updated.

We can fix it as follows (code on the Playground):

We modify the original value and thus it works as expected:

Conclusion

You should be aware that when we loop with range, we copy values and thus if we modify them, the original one is not.

Enjoy!

InterCloud Team

Cloud innovation brings the IT agility digital businesses need to grow and scale. At InterCloud, we believe it is high time for cloud networking to deliver on this promise as well. The massive migration of IT resources out of corporate data centers to the Cloud paved the way for new IT production methods.

AWS & InterCloud

Your Comments :

SCHNEIDER CTA.png

Read more of what you like.