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
у них нет :=
и обычно обьявляются на уровне пакета