ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Go 中将 int 值转换为字符串?

i := 123
s := string(i) 

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

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

在Java中,我可以这样做:

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

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

第二个问题(字符串连接)具有涵盖效率的 an answer elsewhere
strconv.Itoa(i)(int 到 ASCII)将 int 设置为字符串。请参阅stackoverflow.com/a/62737936/12817546strconv.Atoi(s)(ASCII 到 int)将字符串设置为 int。见stackoverflow.com/a/62740786/12817546

K
Klaus Byskov Pedersen

使用 strconv 包的 Itoa 函数。

例如:

package main

import (
    "strconv"
    "fmt"
)

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

您可以简单地通过 + 或使用 strings 包的 Join 函数来连接字符串。


为什么语言设计者认为像“Itoa”这样的神秘函数名称比可能更具描述性的名称更可取?
@luke 它来自 C 遗产,整个机器可能有 256K 内存;为了适应更多的功能,牺牲了可用性。围棋的创造者都深深地植根于这种传统中,并且对这些名字感到完全满意。
将历史置于可访问性和易于学习之上是糟糕的设计 IMO。 :(
@Luke 取决于您的目标用户是谁以及约定的强度。一些 UI 仍然有一个软盘作为保存图标 :)
便于记住名称 ItoA - 整数到 ASCII
J
Jasmeet Singh
fmt.Sprintf("%v",value);

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

更多信息 - fmt


%d 用于 int - 这
我不建议这样做,因为它使用反射,因此效率远低于其他转换方法。
很棒的评论@RicardoSouza。我在这里引用了你stackoverflow.com/a/62725637/12817546
S
StartupGuy

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

https://i.stack.imgur.com/daIIz.png


u
unclemeat

有趣的是,strconv.Itoashorthand

func FormatInt(i int64, base int) string

以 10 为底

例如:

strconv.Itoa(123)

相当于

strconv.FormatInt(int64(123), 10)

有趣的是,根据 stackoverflow.com/a/38077508/968244 的基准,直接调用 FormatInt() 而不是 Itoa() 可以节省 0.1 纳秒
l
lazy1

您可以使用 fmt.Sprintfstrconv.FormatFloat

例如

package main

import (
    "fmt"
)

func main() {
    val := 14.7
    s := fmt.Sprintf("%f", val)
    fmt.Println(s)
}

m
manigandand

在这种情况下,strconvfmt.Sprintf 都执行相同的工作,但使用 strconv 包的 Itoa 函数是最佳选择,因为 fmt.Sprintf 在转换过程中会多分配一个对象。

https://i.stack.imgur.com/qd7EP.png

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


@Boon 对您的应用有明显的影响?一如既往 - 这取决于。另一个对象意味着除了明显的临时小内存命中之外,还有一个对象需要进行垃圾回收。如果您以高速率调用该函数,例如作为从某个地方收到消息时使用的某些序列化过程的一部分,它可能会产生重大影响。由于 fmt.Sprintfstrconv.iota 在易用性方面相似,并且上述数据显示 iota 速度更快,GC 影响更小,因此当单个整数需要转换时,通常应该使用 iota
对我来说,这么快就想到这个级别似乎是过早的优化。最好是先编写可读的代码。
@Boon 它们同样具有可读性。还不如使用更快的。另外,一个新的 Golang 程序员不是从做很多这些转换的东西开始的,怎么说呢?我是一位经验丰富的程序员,现在正在编写我的第一个 Golang 代码,并且处于这种情况。
C
Cae Vecchi

转换 int64

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

fmt.Println(str)
// Prints "32"

f
fwhez

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

// 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 ""
    }
}

这很棒!您可以包含 uint+uint8-64 以获得完整列表
或者您可以只使用执行相同操作的 fmt.Sprint(除了 time.Timejsoncrack.Time(一个会添加我从未听说过的依赖项的包)值)。
Z
Zombo

另外的选择:

package main
import "fmt"

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

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


S
Sagiruddin Mondal
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)
}