Golang : Increment string example
Problem:
You need to create "copies" of a file, prevent user from overwriting files accidentally or need duplicate database content which has unique titles or slugs. Having increment string function is helpful in this kind of situation. How to do that?
Solution:
Increments a string by appending a number to it or increasing the number.
Below is a function to increment the string value that you can use or adapt to your own Golang code.
package main
import (
"fmt"
"os"
"strconv"
"strings"
)
func incrementString(str string, separator string, first int) string {
// set default values
// see https://www.socketloop.com/tutorials/golang-proper-way-to-set-function-argument-default-value
if separator == "" {
separator = "_"
}
if first == 0 || first < 0 {
first = 1
}
// test to see if str already has integer suffix(ends with _#)
test := strings.SplitN(str, separator, 2)
if len(test) >= 2 {
// increase file counter by 1
i, err := strconv.Atoi(test[1])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
increased := i + first
return test[0] + separator + strconv.Itoa(increased)
} else {
return str + separator + strconv.Itoa(first)
}
}
func main() {
result := incrementString("file", "_", 0)
fmt.Println(result)
result = incrementString("file", "-", 2)
fmt.Println(result)
// increase by 1
result = incrementString("file_2", "", 1)
fmt.Println(result)
// increase by 2
result = incrementString("file_2", "", 2)
fmt.Println(result)
// increase by 100
result = incrementString("file_3", "", 100)
fmt.Println(result)
// change separator to # sign
result = incrementString("imagefiles", "#", 10)
fmt.Println(result)
// will NOT accept negative number. will change to default value of 1
result = incrementString("imagefiles", "#", -99)
fmt.Println(result)
}
Output:
file_1
file-2
file_3
file_4
file_103
imagefiles#10
imagefiles#1
Happy coding!
References:
See also : Golang : How to check if a string starts or ends with certain characters or words?
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+11k Golang : Encrypt and decrypt data with x509 crypto
+28.9k Golang : Generate random string
+7.3k Android Studio : Import third-party library or package into Gradle Scripts
+19.7k Golang : For loop continue,break and range
+9.7k Golang : Generate random elements without repetition or duplicate
+8.9k Golang : Convert octal value to string to deal with leading zero problem
+8.5k Golang : Eroding and dilating image with OpenCV example
+16.4k Convert JSON to CSV in Golang
+10.1k Golang : Find age or leap age from date of birth example
+15.9k Golang : Check if IP address is version 4 or 6
+6.1k Golang : Accessing dataframe-go element by row, column and name example
+4.8k Linux : Disable and enable IPv4 forwarding