645
i := 123
s := string(i) 

s 是'E',但我想要的是“123”

请告诉我如何获得“123”。

在Java中,我可以这样做:

String s = "ab" + "c"  // s is "abc"

我如何concat在 Go 中使用两个字符串?

4

10 回答 10

1005

使用strconv包的Itoa功能。

例如:

package main

import (
    "strconv"
    "fmt"
)

func main() {
    t := strconv.Itoa(123)
    fmt.Println(t)
}

+您可以简单地通过'ing 或使用包的Join功能来连接字符串strings

于 2012-04-11T12:33:55.287 回答
171
fmt.Sprintf("%v",value);

%d如果您知道特定类型的值,请使用相应的格式化程序,例如int

更多信息 - fmt

于 2014-03-25T05:59:08.797 回答
69

fmt.Sprintfstrconv.Itoa并将strconv.FormatInt完成这项工作。但是Sprintf会使用 package reflect,并且会多分配一个对象,所以这不是一个有效的选择。

在此处输入图像描述

于 2016-05-31T10:04:07.370 回答
64

有趣的是strconv.Itoa

func FormatInt(i int64, base int) string

以 10 为底

例如:

strconv.Itoa(123)

相当于

strconv.FormatInt(int64(123), 10)
于 2015-01-17T15:10:48.717 回答
43

您可以使用fmt.Sprintfstrconv.FormatFloat

例如

package main

import (
    "fmt"
)

func main() {
    val := 14.7
    s := fmt.Sprintf("%f", val)
    fmt.Println(s)
}
于 2012-04-11T21:26:31.613 回答
30

在这种情况下,两者都strconvfmt.Sprintf同样的工作,但使用strconv包的Itoa功能是最好的选择,因为fmt.Sprintf在转换过程中会多分配一个对象。

检查两者的基准结果 在此处检查基准:https ://gist.github.com/evalphobia/caee1602969a640a4530

例如,请参见https://play.golang.org/p/hlaz_rMa0D

于 2016-06-28T13:24:42.050 回答
14

转换int64

n := int64(32)
str := strconv.FormatInt(n, 10)

fmt.Println(str)
// Prints "32"
于 2018-10-03T11:17:20.730 回答
6

好的,他们中的大多数都向您展示了一些好东西。让我给你这个:

// 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 ""
    }
}
于 2019-02-28T06:29:37.350 回答
3

另外一个选项:

package main
import "fmt"

func main() {
   n := 123
   s := fmt.Sprint(n)
   fmt.Println(s == "123")
}

https://golang.org/pkg/fmt#Sprint

于 2021-05-23T03:38:12.450 回答
2
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)
}
于 2019-02-27T17:46:49.810 回答