Документация: go doc
Функций в стандартной библиотеке тысячи, и помнить их не нужно: нужно уметь за полминуты узнать, что функция принимает и что возвращает. Документация уже лежит на вашей машине, интернет не нужен.
Ситуация: какой аргумент первый?
Вы пишете strings.Repeat и не помните, что идёт первым — строка или число. Угадывать — значит ловить cannot use ... as ... value. Спросите Go:
stagiaire@lab:~/gocourse/day04$ go doc strings.Repeat
package strings // import "strings"
func Repeat(s string, count int) string
Repeat returns a new string consisting of count copies of the string s.
It panics if count is negative or if the result of (len(s) * count)
overflows.
go doc принимает пакет и имя через точку — как в коде, только без скобок.
Как читать сигнатуру
Строка func Repeat(s string, count int) string — сигнатура. В ней всё, что нужно для вызова:
| Кусок | Что значит |
|---|---|
func |
это функция |
Repeat |
имя |
(s string, count int) |
параметры по порядку: первый s типа string, второй count типа int. Сначала имя, потом тип |
string после скобок |
тип результата |
Значит, вызов — строка, запятая, целое число: strings.Repeat("=", 16). Имена параметров в вызове не пишутся. Ещё сигнатуры функций дня, разобранные по частям, — в course extra 04.
Описание под сигнатурой — по-английски. Слова, которые встречаются в нём постоянно:
| Слово | Что значит |
|---|---|
| returns | возвращает |
| reports whether | сообщает, верно ли — результат bool |
| panics if | программа аварийно остановится, если… |
It panics if count is negative — не пустые слова: вызов strings.Repeat("-", -1) соберётся, а при запуске программа упадёт. Как выглядит такая паника, — в course extra 04.
Попробуйте сейчас: две справки go doc.
Цель: найти в ответе
go docсигнатуру и прочитать по ней параметры и результат.В терминале:
▶ Выполнитеgo doc strings.Repeat go doc strings.ToUpperНайдите во втором ответе сигнатуру: сколько у
ToUpperпараметров, какого они типа и что она возвращает?Готово, когда: в ответе найдена строка, которая начинается с
func ToUpper, и по ней названы число параметров, их тип и тип результата (пункт проверкиt_godoc).
Встроенные функции и целый пакет
len не принадлежит никакому пакету: это встроенная функция, и описание таких функций лежит в разделе builtin — go doc builtin.len. Сегодня из него важна одна строка: String: the number of bytes in v. Это ловушка четвёртой страницы, записанная в документации.
go doc strings без имени функции покажет описание пакета и список всех его функций — 67 строк. Незнакомые типы вроде []string или rune пока пропускайте. Для utf8 можно писать короткое имя: go doc utf8.RuneCountInString найдёт unicode/utf8 сам. Регистр для go doc неважен, а в коде важен всегда.
Что может пойти не так
| Что видите | Что это значит | Что делать |
|---|---|---|
doc: no symbol Upper in package strings |
в пакете нет такого имени | go doc strings — список всех функций |
doc: symbol string is not a type in package main installed in "day04/fix1" |
опечатка в имени пакета: string вместо strings. go doc решил, что вы ищете что-то в своей программе |
проверить имя пакета |
panic: strings: negative Repeat count и путь в /usr/local/go/src/strings |
в Repeat попало отрицательное число; путь — файл библиотеки, а не ваш |
свою строку искать ниже, по main.go:N |
| вывод уехал за экран | пакет большой | прокрутить терминал колесом мыши |
Попробуйте сейчас: шесть справок и сверка этикетки.
Цель: прочитать сигнатуры функций дня, найти пару к
HasPrefixи проверить типы аргументов в этикетке.Выполните по очереди и найдите в каждом ответе сигнатуру:
▶ Выполнитеgo doc strings.CutPrefix go doc math.Ceil go doc math.Round go doc strconv.Itoa go doc utf8.RuneCountInString go doc stringsВ списке
go doc stringsнайдите функцию, которая проверяет, кончается ли строка на заданный кусок, — пару кHasPrefix. Потом сверьте этикеткуlabel: вmath.Roundиmath.Ceilпередаётсяfloat64?Готово, когда: в каждом из шести ответов найдена строка с
func, найдена пара кHasPrefix, а вlabelоба вызоваmathполучаютfloat64(пунктыt_godocиt_godoc2).
Попробуйте сейчас: первая починка fix1.
Цель:
fix1печатает то, что обещано в комментарии в начале файла, после точечной правки.▶ Выполнитеcd ~/gocourse/day04/fix1 go run .Что программа должна напечатать, написано в комментарии в начале файла. Компилятор выдаст два сообщения — оба про одну строку. Прочитайте их, откройте
go docтой функции, о которой они говорят, и сравните сигнатуру с вызовом. Здесь хватает одной строки; проверка принимает не больше двух.Готово, когда:
go run .печатает остаток между двумя чертами, как в комментарии, а изменено не больше двух строк (пунктfix1— он же сверит размер правки).
Дальше: как читать чужую программу — course next