LearnGoDonovan/ch2/tempconv0.go

44 строки
1.5 KiB
Go
Исходник Постоянная ссылка Обычный вид История

2022-01-10 20:04:08 +00:00
// Пакет 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) }
2022-01-11 16:09:53 +00:00
func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) }
2022-01-10 20:04:08 +00:00
func main() {
2022-01-11 16:09:53 +00:00
fmt.Printf("%g\n", BoilingC-FreezingC) // 100
2022-01-10 20:04:08 +00:00
boilingF := CToF(BoilingC)
2022-01-11 16:09:53 +00:00
fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // 180
//fmt.Printf("%g\n", boilingF-FreezingC) // Ошибка компиляции: несоответствие типов
var c Celsius
var f Fahrenheit
2022-01-11 16:20:42 +00:00
fmt.Println(c == 0) // true
fmt.Println(f >= 0) // true
2022-01-11 16:09:53 +00:00
fmt.Println(c == Celsius(f)) // true ! потому что c и f равны 0
2022-01-11 16:20:42 +00:00
//fmt.Println(c == f) // Ошибка компиляции: несоответствие типов
2022-01-11 16:09:53 +00:00
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
2022-01-10 20:04:08 +00:00
}