• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Strings in Go

 
Harald Schlindwein
Greenhorn
Posts: 2
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,


in Java it is a known problem to change strings at runtime especially in loops and very often.
That lead to StringBuilder/Buffer.

How does Go handle that problem or is there any for Go at all?

Given
var s string = "Some text"
var t string = "Some text"
would mean at runtime s == t in Java (afaik)
Also in Go? Because the byte field is the same and the compiler could/should know it...

Harald
 
Mark Summerfield
author
Ranch Hand
Posts: 37
Linux VI Editor Windows
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Harald,

In Go, strings are immutable just as they are in Java and Python. This has many benefits both in terms of performance and for writing robust concurrent programs.

Given
var s string = "Some text"
var t string = "Some text"
would mean at runtime s == t in Java (afaik)


This is an implementation detail that may or may not be true for any given JVM. The same applies in Python. In Go, s == t is true (== sensibly does the string comparison), but &s != &t (i.e., each has a different address so each string is unique). However, the address uniqueness is still just an implementation detail and shouldn't be assumed.

Go's equivalent to Java's StringBuilder is bytes.Buffer:



This assumes you have some readStringFromSomewhere() function that returns an empty string when it is finished. A slightly more sophisticated example is shown in "Programming in Go" on page 88.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic