8

Как преобразовать int в строку в Go?

1

Проблема с преобразованием числа в строку в Go

Я столкнулся с проблемой в Go при попытке преобразовать целое число в строку. Вот мой код:

i := 123
s := string(i) 

В результате переменная s содержит символ 'E', но я хочу получить строку "123".

Как я могу получить строку "123"?

Также, в Java я делаю это следующим образом:

String s = "ab" + "c";  // s будет "abc"

Как я могу объединить две строки в Go?

4 ответ(ов)

0

Еще один вариант:

package main

import "fmt"

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

В этом примере используется функция fmt.Sprint(), которая преобразует целое число n (в данном случае 123) в строку. Затем мы сравниваем полученную строку s с исходной строкой "123" и выводим результат сравнения. Функция fmt.Sprint() позволяет удобно конвертировать различные типы данных в строку, и в этом случае она работает как ожидалось, возвращая строку "123". Вы можете найти дополнительную информацию о fmt.Sprint() в документации по ссылке: https://golang.org/pkg/fmt#Sprint.

0

Чтобы преобразовать int64 в строку в Go, вы можете использовать функцию strconv.FormatInt. Вот пример кода, который демонстрирует это:

package main

import (
	"fmt"
	"strconv"
)

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

	fmt.Println(str)
	// Выведет "32"
}

В этом примере переменная n содержит значение 32 типа int64. Функция strconv.FormatInt(n, 10) преобразует это значение в строку в десятичной системе счисления. Результат сохраняется в переменной str, которая затем выводится на экран.

0

Ваша функция ToString выглядит довольно хорошо, но в ней есть некоторые моменты, на которые стоит обратить внимание. Вот некоторые рекомендации и пояснения по коду:

  1. Проверка длины timeFormat: Вы проверяете, что длина timeFormat больше 1, и в этом случае выводите ошибку. Возможно, стоит изменить условие на len(timeFormat) != 1, чтобы учесть случай, когда аргумент вообще не передан.

  2. Использование reflect: Вы используете reflect.Indirect, чтобы получить значение, которое может быть указателем. Это нормально, однако стоит быть осторожным с производительностью, так как рефлексия может замедлить работу программы. Если возможно, старайтесь избегать рефлексии.

  3. Переопределение default возвращаемого значения: В случае, если тип не совпадает ни с одним из перечисленных, вы просто возвращаете пустую строку. Возможно, стоит добавить логирование или возвращать ошибку, чтобы было проще отлаживать код.

  4. Форматирование времени: Установленный вами формат времени по умолчанию ("2006-01-02 15:04:05") — это стандарт, но вы можете сделать его более настраиваемым, если это требует функционал вашей программы.

  5. Упрощение обработки аргументов: Вы можете рассмотреть возможность использования метода switch более компактно, если порядок типов допускает подобную оптимизацию.

Пример улучшенного кода:

func ToString(arg interface{}, timeFormat ...string) string {
    if len(timeFormat) != 1 {
        log.SetFlags(log.Llongfile | log.LstdFlags)
        log.Println(errors.New("timeFormat's length should be one"))
    }
    
    var value = reflect.Indirect(reflect.ValueOf(arg)).Interface()
    
    switch v := value.(type) {
    case int, int8, int16, int32, int64, string, float32, float64:
        return strconv.FormatFloat(float64(v.(interface{})), '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 fmt.Stringer:
        return v.String()
    default:
        log.Printf("Unsupported type: %T", v)
        return ""
    }
}

С таким подходом код станет более читабельным и управляемым. Надеюсь, это поможет вам в дальнейшей работе!

0

В вашем коде вы задаете два вопроса, которые уже имеют решения. Давайте рассмотрим их по отдельности.

  1. Как получить строку из целого числа?

    Для преобразования целого числа в строку вы можете использовать функцию strconv.Itoa(), которая принимает целое число и возвращает его строковое представление. В вашем примере это сделано правильно:

    intValue := 123
    strValue := strconv.Itoa(intValue)
    fmt.Println(strValue) // Вывод: "123"
    
  2. Как соединить две строки?

    В Go вы можете просто использовать оператор + для конкатенации двух строк. В вашем коде это тоже сделано верно:

    firstStr := "ab"
    secondStr := "c"
    s := firstStr + secondStr
    fmt.Println(s) // Вывод: "abc"
    

Таким образом, ваш код отвечает на оба вопроса правильно и компилируется без ошибок. Если у вас возникли дополнительные вопросы, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь