// Пакет tempconv выполняет вычисления температур // по Цельсию (Celsius) и по Фаренгейту (Fahrenheit). package main import ( "fmt" ) type Celsius float64 type Fahrenheit float64 const ( AbsoluteZeroC Celsius = -273.15 FreezingC Celsius = 0 BoilingC Celsius = 100 ) func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) } func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) } func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) } func main() { fmt.Printf("%g\n", BoilingC-FreezingC) // 100 boilingF := CToF(BoilingC) fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // 180 //fmt.Printf("%g\n", boilingF-FreezingC) // Ошибка компиляции: несоответствие типов var c Celsius var f Fahrenheit fmt.Println(c == 0) // true fmt.Println(f >= 0) // true fmt.Println(c == Celsius(f)) // true ! потому что c и f равны 0 //fmt.Println(c == f) // Ошибка компиляции: несоответствие типов c = FToC(212.0) fmt.Println(c.String()) // 100°C fmt.Printf("%v\n", c) // 100°C; явный вызов String не нужен fmt.Printf("%s\n", c) // 100°C; явный вызов String не нужен fmt.Println(c) // 100°C; явный вызов String не нужен fmt.Printf("%g\n", c) // 100; не вызывает String fmt.Println(float64(c)) // 100; не вызывает String }