diff --git a/chapter6/average/main.go b/chapter6/average/main.go new file mode 100644 index 0000000..7a39cc9 --- /dev/null +++ b/chapter6/average/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "fmt" + "headfirstgo/headfirstgo/chapter6/datafile" + "log" +) + +func main() { + numbers, err := datafile.GetFloats("data.txt") + if err != nil { + log.Fatal(err) + } + var sum float64 = 0 + for _, number := range numbers { + sum += number + } + sampleCount := float64(len(numbers)) + fmt.Printf("Average: %.2f\n", sum/sampleCount) +} diff --git a/chapter6/average2/main.go b/chapter6/average2/main.go new file mode 100644 index 0000000..417e0bc --- /dev/null +++ b/chapter6/average2/main.go @@ -0,0 +1,10 @@ +package main + +import ( + "fmt" + "os" +) + +func main() { + fmt.Println(os.Args) +} diff --git a/chapter6/data.txt b/chapter6/data.txt new file mode 100644 index 0000000..90f488d --- /dev/null +++ b/chapter6/data.txt @@ -0,0 +1,6 @@ +97.62 +82.14 +56.73 +88.17 +70.93 +82.12 diff --git a/chapter6/datafile/floats.go b/chapter6/datafile/floats.go new file mode 100644 index 0000000..d6bf275 --- /dev/null +++ b/chapter6/datafile/floats.go @@ -0,0 +1,31 @@ +package datafile + +import ( + "bufio" + "os" + "strconv" +) + +func GetFloats(fileName string) ([]float64, error) { + var numbers []float64 + file, err := os.Open(fileName) + if err != nil { + return nil, err + } + scanner := bufio.NewScanner(file) + for scanner.Scan() { + number, err := strconv.ParseFloat(scanner.Text(), 64) + if err != nil { + return nil, err + } + numbers = append(numbers, number) + } + err = file.Close() + if err != nil { + return nil, err + } + if scanner.Err() != nil { + return nil, scanner.Err() + } + return numbers, nil +} diff --git a/chapter6/slice/main.go b/chapter6/slice/main.go index e69de29..94938f7 100644 --- a/chapter6/slice/main.go +++ b/chapter6/slice/main.go @@ -0,0 +1,38 @@ +package main + +import "fmt" + +func main() { + // slice - серуктура данных на основе массива, в которую можно добавлять данные в конец + // Объявление slice (объявление переменной не приводит к созданию slice, в отличии от массива) + var mySlice []int + + // создание slice + mySlice = make([]int, 5) + // присваивание значения + mySlice[0] = 42 + + // короткое объявление slice + slc2 := make([]string, 3) + slc2[0] = "Hello " + slc2[1] = "World" + slc2[2] = "!" + + // можно использовать литералы slice + slc3 := []int{ + 2, + 3, + 5, + } + slc4 := []bool{false, true} + + fmt.Printf("mySlice = %#v, slc2 = %#v\n", mySlice, slc2) + fmt.Println(len(slc2)) + + for _, val := range slc2 { + fmt.Print(val) + } + fmt.Println() + + fmt.Printf("slc3 = %#v, slc4 = %#v", slc3, slc4) +}