День 16 · дополнительные материалы

День 16 — глубже

Всё здесь необязательно. Материалы на английском помечены.


Срезы от авторов языка (англ.)

Точные правила индексов (англ.)

Срез строк

Попробуйте сейчас: срез не только из чисел.

Цель: увидеть, что срез бывает из любого типа и печатается так же.

✎ Наберите в файл scratch/main.go
package main

import "fmt"

func main() {
	names := []string{"болт", "гайка", "шайба"}
	fmt.Println(names, len(names), names[1])
}
▶ Выполните
cd ~/gocourse/day16/scratch
go run .

Что должно получиться:

Вывод · это печатает программа, набирать не нужно
[болт гайка шайба] 3 гайка

Допишите names = append(names, "винт") и напечатайте срез ещё раз. Попробуйте дописать в него число — какое сообщение даст компилятор?

Готово, когда: срез из четырёх названий напечатан, а сообщение про число записано в словарик. Проверка дня этот опыт не сверяет.

Как печатать срез

Попробуйте сейчас: срез в Printf.

Цель: узнать, как Printf печатает срез и чем пустой срез отличается от объявленного через var.

✎ Наберите в файл scratch/main.go
package main

import "fmt"

func main() {
	stock := []int{12, 40, 5}
	fmt.Printf("%d\n", stock)
	fmt.Printf("%v\n", stock)
	var empty []int
	fmt.Println(empty, len(empty))
	other := []int{}
	fmt.Println(other, len(other))
}
▶ Выполните
cd ~/gocourse/day16/scratch
go run .

Что должно получиться:

Вывод · это печатает программа, набирать не нужно
[12 40 5]
[12 40 5]
[] 0
[] 0

%d применяется к каждому элементу, %v — «как есть». Два пустых среза печатаются одинаково. Разница между ними всё же есть — она называется nil и разбирается в день 17.

Готово, когда: вывод совпал. Проверка дня этот опыт не сверяет.

Задачи на закрепление