想要串入int吗?

时间:2018-08-22 14:45:37

标签: go

我真的以为这很简单:

string(myInt)

似乎没有。

我正在编写一个函数,该函数采用一片int,并将每个int附加到字符串中,并在每个int之间添加分隔符。这是我的代码。

func(xis *Int16Slice) ConvertToStringWithSeparator(separator string) string{
    var buffer bytes.Buffer
    for i, value := range *xis{
        buffer.WriteString(string(value))
        if i != len(*xis) -1 {
            buffer.WriteString(separator)
        }
    }
    return buffer.String()
}

请阅读以下句子。这不是How to convert an int value to string in Go?的重复-因为: 我知道诸如strconv.Itoa函数之类的内容,但似乎只能在“常规” int上使用。它不支持int16

3 个答案:

答案 0 :(得分:4)

您可以通过简单地将int16转换为intint64来使用strconv.Itoa(如果对性能至关重要,则可以使用strconv.FormatInt,例如({ {3}}):

x := uint16(123)
strconv.Itoa(int(x))            // => "123"
strconv.FormatInt(int64(x), 10) // => "123"

请注意,根据简单的基准测试,strconv.FormatInt(...)可能会稍微快一些:

// itoa_test.go
package main

import (
  "strconv"
  "testing"
)

const x = int16(123)

func Benchmark_Itoa(b *testing.B) {
  for i := 0; i < b.N; i++ {
    strconv.Itoa(int(x))
  }
}

func Benchmark_FormatInt(b *testing.B) {
  for i := 0; i < b.N; i++ {
    strconv.FormatInt(int64(x), 10)
  }
}

$ go test -bench=. ./itoa_test.go身份运行:

goos: darwin
goarch: amd64
Benchmark_Itoa-8            50000000            30.3 ns/op
Benchmark_FormatInt-8       50000000            27.8 ns/op
PASS
ok      command-line-arguments  2.976s

答案 1 :(得分:3)

您可以使用Sprintf:

  num := 33
  str := fmt.Sprintf("%d", num)
  fmt.Println(str)

或Itoa

str := strconv.Itoa(3)

答案 2 :(得分:0)

您可以将int16转换为int,然后使用strconv.Itoa函数将int16转换为字符串。

例如:https://play.golang.org/p/pToOjqDKEoi