Golang Note - 10

Strings

Change a character

  • How to change a character in a string

    str:="hello"
    c:=[]byte(s)
    c[0]=’c’
    s2:= string(c) // s2 == "cello"
    

Substring

  • How to take a part(substring) of a string str

    substr := str[n:m]
    

for-loop

  • How to loop over a string str with for or for-range:

    // gives only the bytes:
    for i:=0; i < len(str); i++ {
     … = str[i]
    }
    // gives the Unicode characters:
    for ix, ch := range str {
    // …
    } 
    

bytes of str

  • Number of bytes in a string str

    len(str)
    
  • Number of characters in a string str

    utf8.RuneCountInString(str) // FATEST 
    len([]int(str))
    

Concat strings

  • Best performance with byte buffer

    var buffer bytes.Buffer
    for {
        if s, ok := getNextString(); ok { //method getNextString() not shown here
            buffer.WriteString(s)
        } else {
            break
        }
    }
    
  • Simple way

    strings.Join()
    

Command-line args

  • Use flag and os package

Array

Cut the last element

  • How to cut the last element of an array or slice line

    line = line[:len(line)-1]
    

Loop over the array

  • for-loop

    for i:=0; i < len(arr); i++ {
    … = arr[i]
    }
    
  • for range

    for ix, value := range arr {
    …
    }
    

Search value in 2D array

found := false
Found: for row := range arr2Dim {
    for column := range arr2Dim[row] {
        if arr2Dim[row][column] == V {
            found = true
            break Found
        }
    }
}

Reverse

func ReverseInts(s []int) {
    first := 0
    last := len(s) - 1
    for first < last {
        s[first], s[last] = s[last], s[first]
        first++
        last--
    }
}

Maps

loop with range

for key, value := range map1 {
… 
}

Test if key exists

val1, isPresent = map1[key1]
// which gives: val or zero-value, true or false

Deleting a key in a map

delete(map1, key1)