You would have to do it by reference if you were passing the value around, as otherwise receivers would get a copy of the original. In this case, `msg` is the value itself, not a copy, so changing it will overwrite its value: 

```go
func main() {
	log.Printf("No pointers:\t%#v", newMessageWithoutPointer())
	log.Printf("With pointers:\t%#v", newMessageWithPointer())
}

func newMessageWithoutPointer() Message {
	msg := Message{Color: green, Content: "original content"}
	msg.Color = red
	msg.Content = "updated content"

	return msg
}
func newMessageWithPointer() Message {
	msg := &Message{Color: green, Content: "original content"}
	msg.Color = red
	msg.Content = "updated content"

	return *msg
}
// Output:
// 2009/11/10 23:00:00 No pointers:    main.Message{Color:"0;31", Content:"updated content"}
// 2009/11/10 23:00:00 With pointers:  main.Message{Color:"0;31", Content:"updated content"}
```
http://play.golang.org/p/yq4-O4MIbc