i := 123
s := string(i)
s 是'E',但我想要的是“123”
请告诉我如何获得“123”。
在Java中,我可以这样做:
String s = "ab" + "c" // s is "abc"
我如何在 Go 中concat
两个字符串?
strconv.Itoa(i)
(int 到 ASCII)将 int 设置为字符串。请参阅stackoverflow.com/a/62737936/12817546。 strconv.Atoi(s)
(ASCII 到 int)将字符串设置为 int。见stackoverflow.com/a/62740786/12817546。
使用 strconv
包的 Itoa
函数。
例如:
package main
import (
"strconv"
"fmt"
)
func main() {
t := strconv.Itoa(123)
fmt.Println(t)
}
您可以简单地通过 +
或使用 strings
包的 Join
函数来连接字符串。
fmt.Sprintf("%v",value);
如果您知道特定类型的值,请使用相应的格式化程序,例如 %d
用于 int
更多信息 - fmt
%d
用于 int - 这
fmt.Sprintf
、strconv.Itoa
和 strconv.FormatInt
将完成这项工作。但是 Sprintf
将使用包 reflect
,它会多分配一个对象,所以这不是一个有效的选择。
https://i.stack.imgur.com/daIIz.png
有趣的是,strconv.Itoa
是 shorthand
func FormatInt(i int64, base int) string
以 10 为底
例如:
strconv.Itoa(123)
相当于
strconv.FormatInt(int64(123), 10)
您可以使用 fmt.Sprintf 或 strconv.FormatFloat
例如
package main
import (
"fmt"
)
func main() {
val := 14.7
s := fmt.Sprintf("%f", val)
fmt.Println(s)
}
在这种情况下,strconv
和 fmt.Sprintf
都执行相同的工作,但使用 strconv
包的 Itoa
函数是最佳选择,因为 fmt.Sprintf
在转换过程中会多分配一个对象。
https://i.stack.imgur.com/qd7EP.png
例如,参见 https://play.golang.org/p/hlaz_rMa0D。
fmt.Sprintf
和 strconv.iota
在易用性方面相似,并且上述数据显示 iota 速度更快,GC 影响更小,因此当单个整数需要转换时,通常应该使用 iota
。
转换 int64
:
n := int64(32)
str := strconv.FormatInt(n, 10)
fmt.Println(str)
// Prints "32"
好的,他们中的大多数都向您展示了一些好东西。让我给你这个:
// 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 ""
}
}
fmt.Sprint
(除了 time.Time
和 jsoncrack.Time
(一个会添加我从未听说过的依赖项的包)值)。
另外的选择:
package main
import "fmt"
func main() {
n := 123
s := fmt.Sprint(n)
fmt.Println(s == "123")
}
https://golang.org/pkg/fmt#Sprint
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)
}