Памятка по синтаксису Go в примерах.
Подборка полезных и бесплатных ресурсов для изучения Go на русском языке:
- Эффективный Go - перевод официальной документации Effective Go (не завершен и устарел).
- Эффективный Go - перевод от сентября 2024 года.
- Go в примерах - исходный код для сборки статического сайта Go в примерах (форк gobyexample).
- Введение в программирование на Go (веб-версия) - перевод книги An Introduction to Programming in Go.
- Маленькая книга о Go - перевод The Little Go Book.
- Паттерны параллельного программирования Go.
- Курс по изучению Golang для начинающих.
- Обучение программированию на языке Go в тренажере (онлайн компилятор).
- Руководство по языку Go от Metanit.
- Шпаргалка по Go (перевод с Немецкого языка).
- GUI на Golang на GTK+ 3.
- Гайды Uber по написанию кода на Go - русский перевод оригинального репозитория.
- Разработка веб-сервисов на Golang - курс по Go от Mail.Ru на платформе Coursera.
- Основы Go - бесплатный курс от Яндекс Практикум.
- Основы Go - бесплатный курс от Хек Слет (34 урока, 97 тестов и 37 упражнений в тренажере).
- Бесплатные курсы от Stepik с получением сертификата:
- Go - первое знакомство - 42 урока, 110 тестов, 45 задач (20к учащихся, рейтинг: 4.9).
- PRO Go. Основы программирования - 38 урока, 121 тестов, 191 задач (13к учащихся, рейтинг: 4.8).
- Программирование на Golang - 35 урока, 64 тестов, 94 задач (65к учащихся, рейтинг: 4.7).
- Быстрые шпаргалки:
Вы можете использовать онлайн компилятор на официальном сайте для запуска блоков кода, а также пройти интерактивный тур.
Переменные и типы данных
package main
import "fmt"
func main()
Массивы и слайсы
package main
import "fmt"
func main()
Функции
package main
import "fmt"
// Функция сложения двух чисел
func add(a int, b int) int
// Функция с несколькими возвращаемыми значениями
func divide(a, b int) (int, int)
func main()
Условия и циклы
package main
import "fmt"
// Функция, возвращающая название месяца через условную конструкцию switch
func getMonthName(month int) string
// Второй вариант функции через классическое условие по индеку массива
func getMonthName2(month int) string
func main()
Обработка ошибок
package main
import (
"errors"
"fmt"
)
func divide(a, b int) (int, error)
func main()
Горутины
package main
import (
"fmt"
"time"
)
func goRun()
func main()
Каналы и селекторы
package main
import (
"fmt"
"time"
"sync"
)
func goRun(ch chan string)
func goRunThree(ch chan string)
func printMessage(msg string, wg *sync.WaitGroup)
func main()
Регулярные выражения
Основные элементы синтаксиса регулярных выражений:
.
— любой символ, кроме символа новой строки.*
— 0 или более повторений.+
— 1 или более повторений.{n}
— точноn
повторений (например,a{3}
, соответствует:"aaa"
).{n,}
— минимумn
повторений (например,a{2,}
, соответствует:"aa"
,"aaa"
и т.д.).{n,m}
— от n до m повторений (например,a{2,4}
, соответствует:"aa"
,"aaa"
,"aaaa"
).?
— 0 или 1 повторений.^
— начало строки.$
— конец строки.[]
— группа символов (например,[a-z]
).\s
— любой пробельный символ (пробел, табуляция, новая строка и другие пробельные символы).\d
— любая цифра (эквивалентно[0-9]
).\D
— любой символ, который не является цифрой (эквивалентно[^0-9]
).\w
— любой буквенно-цифровой символ (буквы, цифры и символ подчеркивания, эквивалентно[a-zA-Z0-9_]
).\W
— любой символ, не являющийся буквенно-цифровым (эквивалентно[^a-zA-Z0-9_]
).\b
— граница целого слова (например,\bword\b
, соответствует только целому словосочетанию"word"
, и не подхоит слово"wordy"
).(?i)
— делает регулярное выражение нечувствительным к регистру (игнорирует большие и маленькие буквы).\
— экранирует специальные символы.()
— группа захвата.|
— логическое ИЛИ (например,a|b
).(?=...)
— позитивный просмотр вперёд (positive lookahead), проверяет, что за текущей позицией идет то, что описано в скобках.\d(?=\s)
— находит цифры, за которыми идет пробел (но сам пробел не входит в результат).(?!...)
— негативный просмотр вперёд (negative lookahead), проверяет, что за текущей позицией не идет то, что описано в скобках.\d(?!\s)
— находит цифры, за которыми не идет пробел.(?<=...)
— позитивный просмотр назад (positive lookbehind), проверяет, что перед текущей позицией находится то, что описано в скобках.(?<=@)\w+
— находит слово, стоящее после символа"@"
(например доменное имя, в адресах электронной почты).(?<!...)
— негативный просмотр назад (negative lookbehind), проверяет, что перед текущей позицией не находится то, что описано в скобках.(?<!@)\w+
— находит слово, перед которым не стоит символ"@"
.
Основные функции пакета regexp
:
regexp.MatchString
— проверяет, соответствует ли строка регулярному выражению.
package main
import (
"fmt"
"regexp"
)
func main()
regexp.Compile
— компилирует регулярное выражение и возвращает объект типа*regexp.Regexp
, если выражение корректное, или возвращается ошибка.
package main
import (
"fmt"
"regexp"
)
func main()
regexp.FindAllString
— находит все подстроки в строке, которые соответствуют регулярному выражению, и возвращает их в виде среза строк.
package main
import (
"fmt"
"regexp"
)
func main()
regexp.ReplaceAllString
— заменяет все соответствующие части строки.
package main
import (
"fmt"
"regexp"
)
func main()
- Группы захвата
package main
import (
"fmt"
"regexp"
)
func main()
- Извлечение логина и домена из почтовых адресов
package main
import (
"fmt"
"regexp"
)
func main()
Математические вычисления
package main
import (
"fmt"
"math"
)
func customCeil(numerator int, denominator int) int
func main()
HTTP
HTTP запрос к GitHub API для получения последней версии релиза указаного репозитория.
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
// Структура для ответа от GitHub API
type GitHubRelease struct
func main()
OS
Проверка доступности всех хостов в указанной подсети (асинхронный ICMP опрос).
package main
import (
"fmt"
"os"
"os/exec"
"strings"
"sync"
)
func pingHost(ip string, wg *sync.WaitGroup)
func main()
go run main.go 192.168.3.0