i := 123 s := string(i) s is 'E', but what I want is "123"
Please tell me how can I get "123".
And in Java, I can do in this way:
String s = "ab" + "c" // s is "abc" how can I concat two strings in Go?
10 Answers
Answer recommended by Go Language
Use the strconv package's Itoa function.
For example:
package main import ( "strconv" "fmt" ) func main() { t := strconv.Itoa(123) fmt.Println(t) } You can concat strings simply by +'ing them, or by using the Join function of the strings package.
fmt.Sprintf("%v",value); If you know the specific type of value use the corresponding formatter for example %d for int
More info - fmt
3fmt.Sprintf, strconv.Itoa and strconv.FormatInt will do the job. But Sprintf will use the package reflect, and it will allocate one more object, so it's not an efficient choice.
It is interesting to note that strconv.Itoa is shorthand for
func FormatInt(i int64, base int) string with base 10
For Example:
strconv.Itoa(123) is equivalent to
strconv.FormatInt(int64(123), 10) 1You can use fmt.Sprintf or strconv.FormatFloat
For example
package main import ( "fmt" ) func main() { val := 14.7 s := fmt.Sprintf("%f", val) fmt.Println(s) } 0In this case both strconv and fmt.Sprintf do the same job but using the strconv package's Itoa function is the best choice, because fmt.Sprintf allocate one more object during conversion.
Converting int64:
n := int64(32) str := strconv.FormatInt(n, 10) fmt.Println(str) // Prints "32" ok,most of them have shown you something good. Let'me give you this:
// ToString Change arg to string func ToString(arg interface{}, timeFormat ...string) string { if len(timeFormat) > 1 { log.SetFlags(log.Llongfile | log.LstdFlags) log.Println(errors.New(fmt.Sprintf("timeFormat's length should be one"))) } var tmp = reflect.Indirect(reflect.ValueOf(arg)).Interface() switch v := tmp.(type) { case int: return strconv.Itoa(v) case int8: return strconv.FormatInt(int64(v), 10) case int16: return strconv.FormatInt(int64(v), 10) case int32: return strconv.FormatInt(int64(v), 10) case int64: return strconv.FormatInt(v, 10) case string: return v case float32: return strconv.FormatFloat(float64(v), 'f', -1, 32) case float64: return strconv.FormatFloat(v, 'f', -1, 64) case time.Time: if len(timeFormat) == 1 { return v.Format(timeFormat[0]) } return v.Format("2006-01-02 15:04:05") case jsoncrack.Time: if len(timeFormat) == 1 { return v.Time().Format(timeFormat[0]) } return v.Time().Format("2006-01-02 15:04:05") case fmt.Stringer: return v.String() case reflect.Value: return ToString(v.Interface(), timeFormat...) default: return "" } } 2Another option:
package main import "fmt" func main() { n := 123 s := fmt.Sprint(n) fmt.Println(s == "123") } package main import ( "fmt" "strconv" ) func main(){ //First question: how to get int string? intValue := 123 // keeping it in separate variable : strValue := strconv.Itoa(intValue) fmt.Println(strValue) //Second question: how to concat two strings? firstStr := "ab" secondStr := "c" s := firstStr + secondStr fmt.Println(s) } 
