Search code examples
gosubstring

Extracting substrings in Go


I'm trying to read an entire line from the console (including whitespace), then process it. Using bufio.ReadString, the newline character is read together with the input, so I came up with the following code to trim the newline character:

input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string

Is there a more idiomatic way to do this? That is, is there already a library that takes care of the ending null byte when extracting substrings for you?

(Yes, I know there is already a way to read a line without the newline character in go readline -> string but I'm looking more for elegant string manipulation.)


Solution

  • 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]