diff --git a/chapter3/format/format.go b/chapter3/format/format.go new file mode 100644 index 0000000..74d5f23 --- /dev/null +++ b/chapter3/format/format.go @@ -0,0 +1,31 @@ +package main + +import "fmt" + +func main() { + // функция Printf выводит форматированную строку + fmt.Printf("About one third %0.2f\n", 1.0/3.0) + + // Функция Sprintf возвращает форматированную строку + resultString := fmt.Sprintf("About one third %0.2f\n", 1.0/3.0) + fmt.Printf(resultString) + + // Формат %v не выводит спецсимволы + fmt.Printf("%v %v %v", "", "\n", "\t") + // Формат %#v выводит спецсимволы + fmt.Printf("%#v %#v %#v", "", "\n", "\t") + fmt.Println("") + + // Форматирование в виде таблицы + fmt.Printf("%12s | %s\n", "Product", "Cost in Cents") + fmt.Println("-------------+-------------------") + fmt.Printf("%12s | %2d\n", "Stamps", 50) + fmt.Printf("%12s | %2d\n", "Paper CLips", 5) + fmt.Printf("%12s | %2d\n", "Tape", 99) + + fmt.Println("") + // Дробный формат %5.3f - %: спецификатор, 5:минимальная ширина всего числа, .3: ширина дробной части, f: тип формата + fmt.Printf("%%7.1f: %7.1f\n", 12.34567) + // В формате дробной части цифры не округляются, а просто отбрасываются + +} diff --git a/chapter3/func/func.go b/chapter3/func/func.go new file mode 100644 index 0000000..170d86c --- /dev/null +++ b/chapter3/func/func.go @@ -0,0 +1,51 @@ +package main + +import "fmt" + +// Обявление функции (первая строчка до фигурных скобок - сигнатура функции) +// line и times - параметры функции +func repeatLine(line string, times int) { + for i := 0; i < times; i++ { + fmt.Println(line) + } +} + +func paintNeeded(width float64, height float64) (float64, error) { + if width < 0 { + return 0, fmt.Errorf("A width of %.2f is invalid", width) + } + if height < 0 { + return 0, fmt.Errorf("A height of %.2f is invalid", height) + } + area := width * height + return area / 10.0, nil +} + +// Функция возвращающая значение (тип возврата - второй float64) и обязательно return +func double(num float64) float64 { + return num * 2 +} + +// Множественный возврат из функци +func manyReturns() (int, bool, string) { + return 1, true, "hello" +} + +func main() { + + // Вызов функции( параметры становятся аргументами функции) + repeatLine("hello", 4) + + // paintNeeded(4.2, 3.0) + // paintNeeded(5.2, 3.5) + // paintNeeded(5.0, 3.3) + amount, err := paintNeeded(4.2, -3.0) + fmt.Println(err) + fmt.Printf("%.2f liters needed\n", amount) + + result := double(6.4) // Присвоение значения возврату из функции + fmt.Print(result, "\n") + + myNum, myBool, myString := manyReturns() + fmt.Printf("Num: %d, Bool: %t, String: %s\n", myNum, myBool, myString) +}