Don't worry -- Go will let you shoot yourself in the foot if you really want to :-)
Go is not like Erlang, which might be what you are getting at with the question.
x := 1
x = 2
allocates one variable, x
, with a value of 1
, then reassigns it to 2
-- no additional memory is allocated here.
As you note, strings are immutable, so doing a string manipulation can result in making copies. If you find that you want to do in-place modifications to character data, you'll probably want to operate on variables of []byte
via the bytes
package.
Russ Cox's post about this should answer most of your questions about basic data structures: http://research.swtch.com/2009/11/go-data-structures.html
As other commenters noted, you'll want to look at the value semantics of Go functions -- they might be a little surprising at first.
If you have the following function:
func (t MyType) myFunc() {
// do something to set a field in t
}
and you call in your code
myVar.myFunc()
you might be surprised to see that this doesn't do what you want because the t
that is seen in myFunc()
is really a copy of myVar
.
But, the following will work:
func (t *myType) myFunc() {
// do something to set a field in t
}
because the function has a copy of the pointer and can access the underlying structure via that pointer.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…