i := 123
s := string(i)
s - это "E", но я хочу "123"
Подскажите, пожалуйста, как мне получить "123".
А в Java я могу сделать так:
String s = "ab" + "c" // s is "abc"
как я могу concat
две строки в Go?
i := 123
s := string(i)
s - это "E", но я хочу "123"
Подскажите, пожалуйста, как мне получить "123".
А в Java я могу сделать так:
String s = "ab" + "c" // s is "abc"
как я могу concat
две строки в Go?
Используйте функцию Itoa
пакета strconv
.
Например:
package main
import (
"strconv"
"fmt"
)
func main() {
t := strconv.Itoa(123)
fmt.Println(t)
}
Вы можете объединить строки, просто +
' их или используя Join
функцию strings
упаковка.
bytes.Buffer
кусает ваши пальцы, если вы продолжите его использовать. Вместо этого используйте strings.Builder
.
- person Erikas; 21.12.2018
Itoa
делает только return FormatInt(int64(i), 10)
. ИМО, функция FormatInt
не является ни загадочным, ни плохим дизайном. И мне очень нравится, как здесь ярлык, т.е. Itoa
- это дань тому же методу в C.
- person kapad; 21.08.2020
fmt.Sprintf("%v",value);
Если вам известен конкретный тип значения, используйте соответствующее средство форматирования, например %d
для int
Дополнительная информация - fmt
%d
для int - это
- person scniro; 04.06.2018
Интересно отметить, что strconv.Itoa
- это сокращение для
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
выполняют одну и ту же работу, но использование функции Itoa
пакета strconv
- лучший выбор, потому что fmt.Sprintf
выделяет еще один объект во время преобразования.
проверьте эталон здесь: https://gist.github.com/evalphobia/caee1602969a640a4530
см., например, https://play.golang.org/p/hlaz_rMa0D.
fmt.Sprintf
и strconv.iota
схожи с точки зрения простоты использования, а приведенные выше данные показывают, что йота работает быстрее с меньшим влиянием на сборщик мусора, похоже, что iota
следует использовать в целом, когда нужно преобразовать одно целое число.
- person Edward; 14.11.2018
Преобразование 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 ""
}
}
Другой вариант:
package main
import "fmt"
func main() {
n := 123
s := fmt.Sprint(n)
fmt.Println(s == "123")
}
https://golang.org/pkg/fmt#Sprint
strconv.Itoa(i)
(от int до ASCII), чтобы установить int в строку. См. stackoverflow.com/a/62737936/12817546.strconv.Atoi(s)
(от ASCII до int), чтобы установить строку в int. См. stackoverflow.com/a/62740786/12817546. - person Tom L   schedule 09.07.2020