golang book 8
Сегменты
тот же массив, но без размера
var mySlice []string
mySlice = make([]string, 7)
example := make([]int, 5)
example[0] = 1
len(example)
litters := []string{"a", "b"}
из массива можно доставать части в сегменты
mySlice := myArray[1:3]
с какого индекса по какой (до второго индекса, не включая его) достать
если часть не указывать
myArray[:3]
myArray[:]
то с начала до конца массива
сегмент, это как отрезок массива
при изменении сегмента или массива, они видны в обеих случаях
append
прибавляет в коней сегмента
slice = append(slice, "d")
но там есть жоп
если с одного сегмента создаются разные, и в последнем что-то меняется, то изменения будут только в родителе
поэтому лучше при добавлении в сегмент присваивать в тот же сегмент..
так же можно добавлять сразу несколько
slice = append(slice, "d", "v")
если создать сегмент и не создавать в нем переменные, то сам сегмент вернет nil
package main
import (
"bufio"
"fmt"
"log"
"os"
"strconv"
)
func main() {
var numbers []float64
file, err := os.Open("data.txt")
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
//fmt.Println(scanner.Text())
number, err := strconv.ParseFloat(scanner.>
if err != nil {
log.Fatal(err)
}
numbers = append(numbers, number)
}
err = file.Close()
if err != nil {
log.Fatal(err)
}
if scanner.Err() != nil {
log.Fatal(scanner.Err())
}
fmt.Printf("%#v\n", numbers)
}
в случае ошибок с функций, необходимо возвращать пустое значение того же формата и саму ошибку,
либо nil вместо пустого значения
Аргументы командной строки
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args)
}
0 аргумент - всегда путь к программе
если надо исключить, то
os.Args[1:]
Как делать функции с большим количеством параметров?
добавить ... перед последним типом
func zzz(p1 int, p2 ...string)
в p2 передается сегмент
package main
import (
"fmt"
)
func sredn(numbers ...float64) float64 {
var sum float64 = 0
for _, number := range numbers {
sum += number
}
return sum / float64(len(numbers))
}
func main() {
fmt.Println(sredn(100, 50))
fmt.Println(sredn(90.7, 89.7, 98.5, 92.3))
}
если вы хотите вставить сегмент вместо нескольких аргументов, то используйте многоточие, после сегмента
intSlice := []int{5, 10, 15}
myFunc(intSlice...)