golang book 6

func rrr (line string, times int) {} package main import "fmt" func paintWall(width float64, height float64) { area := width * height fmt.Printf("%.2f litters need\n", area/10.0) } func main() { paintWall(4.2, 3.0) paintWall(5.2, 3.5) paintWall(5.0, 3.3) } возврат из функций, в конце скобок пишем, какой тип возвращает, и обязательно должна вернуть func rrr (number int) int { return number*2 } import errors err := errors.New("eee") fmt.Println(err.Error()) fmt.Println(err) log.Fatal(err) err := fmt.Errorf("eee %0.2f", 3.5) fmt.Println(err.Error()) fmt.Println(err) возврат нескольких значений func rrr() (int, bool,string) { return 1, true, "hello" } myInt, myBool, myString := rrr() еще для возвращаемых значений можно задать имя, как подсказки, но возврат не изменится func rrr() (number int, a bool, b string) { func paintWall(width float64, height float64) (float64, error) { if width < 0 { return 0, fmt.Errorf("width < 0 %0.2f", width) } area := width * height return area/10.0, nil } указатели адреса &a amount := 6 fmt.Println(amount) fmt.Println(&amount) // 0x1040a124 можно прочитать тип указателя fmt.Println(reflect.TypeOf(&myInt)) // *int *float64 *bool var myIntPointer *int // эта переменная для хранения указателя myIntPointer = &myInt myIntPointer := &myInt // значение по адресу *myIntPointer myInt := 4 myIntPointer = &myInt fmt.Println(myIntPointer) // 0x104a123 fmt.Println(*myIntPointer) // 4 *myIntPointer = 8 так же обновляется переменная, с которой взят указатель возврат указателя с функции func createPointer() *float64 { myFloat := 98.5 return &myFloat } func main() { var myFloatPointer *float64 = createPointer() fmt.Println(*myFloatPointer) } func printPointer(point *int) { fmt.Println(*point) *point += 1 } показать адрес &a вывести с адреса *b хранения адресов в формате *int функция приёма float с клавиатуры inputFloat() (float64, error) { reader := bufio.NewReader(os.Stdin) input, err := reader.RiadString('\n') if err != nil { return 0, err } input = strings.TrimSpace(input) number, err := strconv.ParseFloat(input, 64) if err != nil { return 0, err } return number, nil } go в папке польз в ней bin тут откомп код самой программы pkg тут откомпил код пакетов src для хранения исходного кода пакеты должны быть обязательно в папках src/my/my.go package my src/hi/main.go основная прога названия пакетов только в нижнем регистре, лучше, чтоб оно состояло из одного слова, если слов несколько, то пишем слитно в едином регистре (strconv) Не используйте переменные, которые называются как пакеты ib/go/src/consoleinput/consoleinput.go package consoleinput import ( "bufio" "os" "strconv" "strings" ) func InputFloat() (float64, error) { reader := bufio.NewReader(os.Stdin) input, err := reader.ReadString('\n') if err != nil { return 0, err } input = strings.TrimSpace(input) number, err := strconv.ParseFloat(input, 64) if err != nil { return 0, err } return number, nil } константы const Ttt int = 3 const Ttt = 3 у них нет := и обычно обьявляются на уровне пакета