Язык программирования golang. Список полезных материалов Golang разработчика

Go (сокращёние от Golang) – это компилируемый многопоточный язык программирования с открытым исходным кодом. Его основной средой применения являются веб-сервисы и клиент-серверные приложения. В конце 2021 года Golang вошёл в топ 5 самых востребованных языков программирования.

Только начали изучать Go? Или никогда не пробовали программировать? Ничего страшного! Сегодня я предоставлю вам целый список полезных материалов, которыми я пользуюсь сам.

Ниже представлен порядок, которому я бы рекомендовал следовать при изучении языка Go:

  1. Tour of Go – ознакомьтесь с самыми базовыми азами Go
  2. How to Write Go Code – изучите объяснение того, как программировать на Go
  3. Effective go – источник, благодаря которому вы сможете ознакомиться со всеми основными понятиями
  4. Go 101 – одновременно с предыдущими источниками, вы можете начать знакомиться с книгой “Go 101” (600 страниц, содержащих полезные знания)
  5. Попробуйте самостоятельно написать небольшую программу
  6. Go Code Review Comments – прочитайте список проблем, которые могут возникать со стилем
  7. The Go Programming Language Specification – спецификация языка Golang, позволяющая заполнить все оставшиеся пробелы
  8. Go standard library – ознакомьтесь со стандартной библиотекой Golang
  9. Learning Go – можете прочитать это полезное пособие (тогда вам придётся его купить)
  10. Bonzai™ command tree  – попробуйте создать дерево команд (очень полезный опыт)

Вам как можно скорее нужно начать разрабатывать свой собственный проект, который будет доставлять вам удовольствие. Это необходимо для поддерживания уровня мотивации учиться. Очевидно, что вы будете писать много своего собственного кода в промежутках между чтением книг. Но к тому времени, когда вы прочтете все это, одновременно занимаясь программированием, вы наверняка будете на пути к тому, чтобы стать мастером Go.

Я не буду перечислять здесь ничего, что имеет какой-либо платный доступ, включая книги, которые вы должны приобрести . Не каждый может найти деньги, чтобы платить за книги.

Образовательные ресурсы

Группа новостей USENET Go-Nuts.
https://groups.google.com/g/golang-nuts

Именно здесь создатели и руководители проекта Go регулярно отвечают на вопросы и обсуждают направление развития языка. Этот ресурс намного лучше, чем Reddit и даже официальный канал Go Discord (который вы можете найти на https://go.dev). Имейте в виду, что все, что когда-либо написано здесь, сохраняется навсегда, навсегда. Я предпочитаю это, потому что все материалы проходят модерацию, и люди на самом деле тратят время на то, чтобы обдумать то, что они пишут, прежде чем публиковать ядовитую чушь (в отличие от Reddit и Discord и т. д.).

Руководство Beej по сетевому программированию
https://beej.us/guide/bgnet

Книга написана на C, но многое из программирования на Go пересекается с этой областью — особенно с микросервисами — что чтение этой книги должно быть обязательным для разработчиков Go (или любого разработчика). Он охватывает такие вещи, как правильные семафоры файловой системы UNIX и другие проблемы архитектурного дизайна, о которых большинство людей, приходящих к программированию из академических кругов или иным образом, просто не думают интуитивно.


https://kristoff.it/blog/why-go-and-not-rust>

Это очень стоический и объективный взгляд на то, почему Go является языком корпоративных и облачных вычислений и почему он никогда не уступит эту позицию кому-то другому — особенно Rust. Я признаюсь, что раз или два подумал «ну да ладно», пока читал его, но многим новичкам и ветеранам может понадобиться прочитать очень практическую причину, почему Go — лучший инструмент для большинства вещей, а Rust, возможно, лучший. лучший инструмент для нескольких изолированных вещей, вот почему все самые важные программные приложения эпохи облаков и контейнеров были написаны на Go, а не на Rust, и, соответственно, почему существует множество рабочих мест для Go и почти нет для разработчиков Rust.

Protocol Buffers
https://developers.google.com/protocol-buffers

Формат Protobuf является обязательным для изучения для любого серьезного разработчика Go, желающего заняться микросервисами.

Другие полезные ресурсы.

  • 🌳 Go Bonzai™ Composite Commander
    https://github.com/rwxrob/bonzaiA truly unique commander with recursive tab completion; no exported shell code required for completion; command aliases; multicall or monolith mode; rich embedded command documentation with markdown and templating; library of completers (files, dates, calculator); localized, modular configuration management; persisted variables to user local cache
  • 🌳 Go Bonzai™ Composite Command Example
    https://github.com/rwxrob/bonzai-exampleA GitHub template you can copy and get started with creating your own monoliths and multicall binaries composed of your favorite Bonzai branches
  • 🌳 Personal Bonzai Command Tree Monolith
    https://github.com/rwxrob/zMy own meticulously manicured monolith (my z command) that I use hundreds of times a day. It’s becoming almost like a BusyBox Linux distro as more branches are added to it. Everything I write now is a Bonzai branch with a standalone, a high-level function library, and a composable branch Cmd. I can easily copy my z to any system so I have all my favorite “scripts” — including bundled configurations for vimtmuxlynx and such (dot). By 2023, I hope to be 100% script free.
  • 🌳 Help Docs with Templates, Like man Pages
    https://github.com/rwxrob/helpBundle your documentation with your Bonzai branch or tree with help.Cmd; supports BonzaiMark, CommonMark templates (text/template) with full set of common template functions; like Hugo for terminal apps. Includes pager detection with color support.
  • 🌳 Persist Variables to Portable Local Cache
    https://github.com/rwxrob/varsBetter than environment variables; add scoped, persistent variables to any of your Bonzai branch or tree; .key=value properties value form for fastest-possible parsing (way faster than YAML/JSON; single file; standard user cache location; includes high-level pkg for use without bonzai
  • 🌳 Local Configuration Management with YAML/JSON
    https://github.com/rwxrob/confBuilt on the highly popular and performant yaml.v3 and yqlib; add persistent, manageable configuration to any Bonzai branch or tree; single file; edit with preferred local editor; includes high-level pkg for use without bonzai
  • 🌳 Common Web Requests
    https://github.com/rwxrob/webDrop-dead simple web requests with a strong high-level function pkg as well; never miss curl again; (eventually, planned to take the place of lynx for terminal based web browsing as well, built with tview)
  • 🌳 GitHub Common Tasks (API)
    https://github.com/rwxrob/githubJust a collection of my personal favorite and most needed GitHub API queries and gh wrappers. Most people will want to use the amazing gh GitHub CLI instead (which can be extended for most things, just not these). Includes latest and release pushing, and more.
  • 🌳 KEG, Knowledge Exchange Graph PKG Utility
    https://github.com/rwxrob/kegRethinking knowledge management and the Web from the perspective of lessons learned from software development over the last two decades. Provides lightning fast mind-mapping, creative zettelkasten note taking, indexing, publishing, and sharing with the KEG community of your choosing in any number of ways. If you love the command line, and need a CLI mind-mapping tool that works to produce GitHub compatible files and expands into full publications then you should really have a look.
  • 🌳 Go Helper Commands and Tasks
    https://github.com/rwxrob/goodBuilding for multiple targets from build.yaml file.
  • Easy Date/Time Formats with Duration Spans
    https://github.com/rwxrob/dtimeThis package makes date and time offsets and durations drop-dead simple to calculate and enter from the command line or just tapped with thumbs into a phone. Uses PEG to define it’s grammar (and was the inspiration to create PEGN later).
  • Easy Input-Output Test Specifications in YAML
    https://github.com/rwxrob/tinoutDesigned to make testing a large number of variations kept in a YAML file that also serve as documentation (inspired by the CommonMark specification and testing).
  • Pure Go secure shell (SSH) functions
    https://github.com/rwxrob/sshCollection of functions employing the crypto/ssh package with sensible defaults enabling pure Go secure shell remote command calls.
  • Buffered Rune Scanner
    https://github.com/rwxrob/scanA simple, highly performant buffered rune scanner; optimized for infinite lookahead/behind; designed with grammar creation in mind; optional trace logs to help debug complex scans
  • Functional Programming with Go Generics
    https://github.com/rwxrob/fnMy own collection of map/filter/reduce/each-like things; great for rapid (replacing shell scripts) development; includes a terse fn.A functional array type, library of map functions (mapf), map transformations (maps), and UNIX filters (filt); (also see https://github.com/samber/lo
  • File and Directory Utilities
    https://github.com/rwxrob/fsSupplements the standard filesystem functions with simplifications and extras that make rapid application development slightly less annoying in Go; be sure to use lockedfile from https://github.com/rogpeppe/go-internal) for system-wide file locking. Includes extracting and caching embed.FS file systems. Includes transactional preservation. Includes multipart file marshaling.
  • Embed and Encapsulate Java JAR, Class, Java Files
    https://github.com/rwxrob/javaImport and use Java directly into Go programs by embedding Java artifacts and extracting and caching them deterministically so that the only dependency is java on the system running the Go code. Make quick work of distributing Java applications with go install. Used to encapsulate the OpenAPITools generator.
  • 🌳 Java OpenAPI Generator Encapsulated in Go
    https://github.com/rwxrob/openapiThis Bonzai branch includes the latest openapi-generator-cli embedded and cached within it along with an optional Dockerfile for building a container to work with OpenAPI 3.0 specifications and code and documentation generation.
  • JSON Done Right with Remote Source Marshaling
    https://github.com/rwxrob/jsonFixes the very broken defaults in encoding/json; includes AsJSON interface; unmarshaling JSON directly from web via HTTP requests into any type that can be passed to json.Unmarshal by leveraging yaml.v3 inline (learned from the Kind project)
  • Marshal Anything as YAML
    https://github.com/rwxrob/yamlA personal commitment to first marshal everything in YAML since yaml.v3 is so superior to anything available for JSON — especially yaml:",inline". I prefer to YAML all the config things and Protobuf all the performant data serialization things. JSON is unavoidable when consuming web APIs, however.
  • VT100 ANSI Terminal Utilities
    https://github.com/rwxrob/termVT100 ANSI terminal escapes; no wasteful function calls just to change colors or terminal state; interactive terminal detection; window size queries; read visible and hidden user input
  • Bash select for Generic Slices
    https://github.com/rwxrob/chooseIncludes sample fmt.Stringer implementation for different struct types.
  • Slug generator
    https://github.com/rwxrob/slugBest of breed slug generation encapsulating the very popular simplego/slug.
  • Converter Utility Functions
    https://github.com/rwxrob/toTransformations I find myself doing so much that they warrant their own to package module; string -> lines, etc.
  • Hybrid Data Structures with Generics
    https://github.com/rwxrob/structsI use this everywhere. Having proper data structures is main reason I maintain a Bonzai command tree instead of a bunch of shell scripts. qstack is usually better than Go slices for most applications; tree is perfect for making ASTs and domain specific language parsing combined with https://github.com/rwxrob/scan)
  • 🌳 Universal Unique Identifiers
    https://github.com/rwxrob/uniqThe usual universal unique identifiers: uuidisosecepochbase32hex; includes high-level pkg library; essential for cobbling together flat-file data stores, etc.
  • 🌳 YAML to JSON Converter
    https://github.com/rwxrob/y2jYAML to JSON conversion without the unnecessary encoding/json escapes (see rwxrob/json above); includes pkg with high-level Convert function
  • 🌳 Popular YAML Query Utility
    https://github.com/rwxrob/yqThis is a duplicate of the yq tool (with the same yqlib dependency); includes pkg with high-level Evaluate and EvaluateToString functions with reasonable defaults; can be called from other Bonzai commands; dropped Cobra dependency

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *