Djam36
@Djam36

Почему не работает пример?

Привет, читаю книгу по GO Донован.А Керниган.Б, раздел 2.5 Приведение типов, есть пример из книги про преобразование температур
package main

import (
	"fmt"
)


type Celsius float64 
type Fahrenheit float64

var c Celsius
var f Fahrenheit

const (
AbsoluteZeroC Celsius = -273.15 
FreezingC Celsius = 0 
BoilingC Celsius = 100
)

func (с Celsius) String() string { 
return fmt.Sprintf("%g°C", c) 
}
func FToC(f Fahrenheit) Celsius { 
return Celsius((f - 32) * 5 / 9) 
}


func CToF(c Celsius) Fahrenheit { 
return Fahrenheit(c*9/5 + 32) 
}

func main() {
c := FToC(212.0)
fmt.Println(c.String())
}

По идее при вызове c := FToC(212.0) - мы должны получить температуру в цельсии т.е 100C, а в итоге я получаю 0, в книге тот же самый пример и там все работает. Смотря на код не вижу явно какой-то проблемы, уже код крутил/курил так и не понял в чем затык, Может кто накинуть подсказку где мой косяк
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
У вас тут "с" — русский символ, где (c Celsius)
А в fmt.Sprintf("%g°C", c) уже английский, поэтому возвращается не значение типа, а глобальная переменная c, которая непонятно почему у вас объявлена вообще.
func (с Celsius) String() string { 
    return fmt.Sprintf("%g°C", c) 
}


Должно быть так: https://play.golang.org/p/WH2G3yMiA4o
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы