Поскольку fmt.Println
не принимает флаги формата, он печатает каждую переменную в зависимости от ее типа.
crc16.Checksum
возвращает int16, поэтому fmt.Println
отобразит целочисленное значение вашей шестнадцатеричной строки, равное 55772
.
Если вы хотите, чтобы fmt.Println
печатал D9DC
вместо целочисленного значения, у вас есть несколько вариантов выбора.
- Преобразуйте ваше целое число в строку, содержащую шестнадцатеричное значение (что означает, что если вы измените свое целое число, вам нужно будет преобразовать его в строку перед использованием
- Создайте свой собственный тип с помощью метода
String()
, который является целым числом, но при печати представлен шестнадцатеричным значением.
Для второго варианта ваш тип может выглядеть примерно так:
type Hex int16
func (h Hex) String() string {
return strconv.FormatInt(int64(h), 16)
}
fmt.Println
будет автоматически использовать этот метод, поскольку это означает, что тип Hex
реализует интерфейс Stringer
. Для получения дополнительной информации об этом, вот некоторые ресурсы: