Extracting substrings in Go
Go strings are not null terminated, and to remove the last char of a string you can simply do:
s = s[:len(s)-1]
This is the simple one to perform substring in Go
package main
import "fmt"
var p = fmt.Println
func main() {
value := "address;bar"
// Take substring from index 2 to length of string
substring := value[2:len(value)]
p(substring)
}
WARNING: operating on strings alone will only work with ASCII and will count wrong when input is a non-ASCII UTF-8 encoded character, and will probably even corrupt characters since it cuts multibyte chars mid-sequence.
Here's a UTF-8-aware version:
// NOTE: this isn't multi-Unicode-codepoint aware, like specifying skintone or
// gender of an emoji: https://unicode.org/emoji/charts/full-emoji-modifiers.html
func substr(input string, start int, length int) string {
asRunes := []rune(input)
if start >= len(asRunes) {
return ""
}
if start+length > len(asRunes) {
length = len(asRunes) - start
}
return string(asRunes[start : start+length])
}
It looks like you're confused by the working of slices and the string storage format, which is different from what you have in C.
- any slice in Go stores the length (in bytes), so you don't have to care about the cost of the
len
operation : there is no need to count - Go strings aren't null terminated, so you don't have to remove a null byte, and you don't have to add
1
after slicing by adding an empty string.
To remove the last char (if it's a one byte char), simply do
inputFmt:=input[:len(input)-1]