Я познакомился с го в 2012 году, а систематически изучать и развивать систему начал в 2014. Изучение языка го также является одной из моих важных задач в 2014 году. один из итогов в конце года.
1. Причины и мотивы обучения идут:
1> У меня был 2-летний опыт разработки Unix c, у меня особое чувство к языку C, go особенно подходит для моего аппетита, и я не могу оторваться от него после его использования;
2> Команда разработчиков языка go слишком великолепна и мощна: лауреат премии Томпсона Тьюринга, соавтор Unix и C; главный разработчик операционной системы Pike PLAN9, изобретатель UTF-8; Роберт
Гриземер участвовал в Java's HotSpot, разработчике движка js v8;
3> Настоятельно рекомендуется отечественными евангелистами: вышли брат Сюй Шивэй, брат Се Мэнцзюнь и другие сильные рекомендации и связанные с ними книги;
2. Учебные материалы: Книги: «Программирование на языке Go» Лао Сюй, «Веб-программирование на Go» Лао Се, «Заметки по изучению языка на Go» Юкена, «Эффективный Go» на golang.org, «Спецификация языка программирования на Go», стандартная библиотека go и множество библиотек с открытым исходным кодом на github
Неизвестный видеоурок, конечно, тоже очень подходит новичкам, следуйте ему, чтобы набрать код и получить в два раза больше результата с половиной усилий.
3.опыт обучения:
Базовые знания языка go очень просты, его можно выучить за несколько дней и можно приступать к разработке, но чтобы стать профессионалом, трудно достичь без определенного количества кода и нескольких лет опыта. вы должны испытать, единственное, что вы можете сделать, это: продолжать писать код, продолжать думать, продолжать обобщать, продолжать читать код других людей и спрашивать совета у экспертов;
4. Трудности в обучении Go, укажите трудности, с которыми я столкнулся при обучении, и соответствующие справочные материалы. Эти знания немного сложны для новых учащихся, но для разработчиков, которые хотят полностью овладеть навыками Go, я думаю, что это очень ценно. Эти знания точки обнаруживаются отдельными людьми после обучения шаг за шагом и прохождения ямы:
- go map slice string array interface Базовая модель данных, где массив и срез являются источником путаницы; см. очень классическую статью Расса Кокса
Arrays, slices (and strings): The mechanics of 'append'
- go defer panic repair уникален для go, ошибки в go — это ошибки, исключения — это исключения, и они не перепутаны. это на самом деле скрывает слишком много проблем. (Два механизма обработки ошибок: механизм генерирования исключения - механизм обработки кода ошибки)
Несколько сценариев использования Defer
- Базовый механизм реализации интерфейса интерфейса go (можно углубиться в исходный код) (глубокое понимание: назначение интерфейса, преобразование интерфейса, утверждение интерфейса и динамика go); go — это программирование, ориентированное на интерфейс и композицию. язык.Не будет преувеличением сказать, что интерфейс — это душа;
См.: Лао Сюй «Программирование на языке Go», глава 9, раздел 9.5 Механизм интерфейса.
Участие: Написано иностранным боссом:How to use interfaces in Go
Смотрите также:interfaces_and_types
Смотрите также:Learning Go - Interfaces & Reflections
- Система типов go: Это очень важно для освоения языка: статический тип (уровень языка — язык статических типов), динамический тип (динамический тип для интерфейсов), базовый тип (базовый тип для приведения и присвоения); система типов go является относительно кратким и чистым, и все они являются типами значений.Даже если срез, карта, канал, функция и т. д. кажутся ссылочными типами, на самом деле они являются типами значений, но их внутренние структуры данных инкапсулируют указатели, в отличие от JAVA, который имеет два типа: основной Это тип значения, объект является ссылочным типом, а в середине есть упаковка, распаковка и более экзотические строки;
Смотрите также:The Go Programming Language Specification-type
Смотрите также:Learning Go - Types
- функция go : многозначный возврат; использование именованных возвращаемых параметров; замыкания; функции являются гражданами первого класса; функции более высокого порядка; функции также являются базовым типом, а тип xxx func может определять новый тип для функции; параллельный go использует функцию h в качестве несущей;Объекты — это данные с прикрепленным поведением, а замыкания — это поведение с присоединенными данными.
Смотрите иностранных больших коров:Function Types in Go (golang)
иди закрытие:Закрытие функционального программирования (Closure) Язык Go (Golang) - Замыкания
перейти на функциональное программирование:пройти практику функционального программирования
- передача параметров go: все параметры функции передаются по значению: даже если передается указатель, передается копия указателя; замыкания ссылаются на внешние переменные как на ссылки
Указатель: *a передается как параметр внутри функции, значение *a изменяется внутри функции, и значение, на которое указывает внешний a, также изменяется;
Смотрите также:Передача аргументов и передача по ссылке в GoЭта статья - редкая хорошая статья, когда анализ на месте
- механизм обработки ошибок go, взаимосвязь между ошибкой и nil, см.
nil value и nil of type error в Go
Эти две зарубежные статьи также хорошо написаны и учат вас, как настроить ошибку, чтобы возвращать более конкретную ошибку;
- go nil всегда был камнем преткновения для изучающих го
Существует ошибка, связанная со статьей выше.
Вот нулевая статья об интерфейсе Чена Ихуэя.golang: подробно объясните интерфейс и nilСтатьи брата Чена о го очень приземленные, и я рекомендую прочитать их все.
- пакет go, глобальный const (константа), var (переменная) порядок загрузки и механизм ссылок на пакеты:
- go Reflect: Reflection — это мощное оружие, которое необходимо новичку, чтобы стать ветераном.Это также способ метапрограммирования, и его производительность относительно низкая (гибкость также приводит к проблемам с производительностью).
Смотрите также: официальная версияlaws-of-reflection
Переведенная версия:The-laws-of-reflectionЯ думаю, что это лучшая переведенная статья, включающая в себя мысли и идеи автора.
Также есть моя сокращенная версия, которая больше похожа на руководство по API:The laws of reflection
Навыки проверки рефлексии: см.Вызов функции по имени в GOLANGДругие статьи, переведенные Mikespook, также очень хороши.
Классическая библиотека DI, используемая фреймворком martini:injectУчебник Office реализует инъекцию
Код библиотеки для инъекций очень неясен, вы можете обратиться к классической статье брата Чена здесь.golang: анализ исходного кода инъекций MartiniЭта статья очень проста и хорошо написана
Отражение тесно связано с интерфейсом и системой типов go, Reflect.TypeOf возвращает динамический тип интерфейса, func (v Value) Type() Type возвращает тип значения, а Reflect.Type выражает базовый тип.
- Как использовать канал go и горутон, режим параллельного программирования, принцип реализации Если язык go описывается как корона, горутина и канал являются жемчужинами короны, то go является практиком и реформатором теории параллельного программирования CSB; сложность была уменьшена на порядок, и параллельное программирование больше не является патентом некоторых самопровозглашенных «технарей»; мир должен быть таким простым, а язык и компиляторы могут делать вещи хорошо, так что не позволяйте программистам заниматься, это это го философия;
Связанные ссылки:
См. "go concurrentprogramming" (честно говоря, эта книга не достигла уровня моих ожиданий, в ней все основное, язык немного многословен, и копание достаточно глубоко, но тяга не высока, так называемое вытягивание не высоко.Введение в System Concurrent Design Patterns)
видетьСистемные знания, лежащие в основе горутин
модель памятианглийская версия Китайская версияАнглийский должен быть выше стены, который немного неясен и труден для понимания.Эта китайская статья очень хорошо написана и интегрирована в собственное мышление переводчика.Рекомендуется к прочтению;
Красота параллелизма на языке goЭта статья очень хорошо написана и простыми словами объясняет распространенные шаблоны параллелизма Это очень толстая книга "go concurrency Programming", в которой нет этого содержания.
Несколько статей Дэниела на конференции Google IO (со стенами)
Concurrency is not ParallelismВот переводПараллелизм — это не параллелизм
Advanced Go Concurrency Patterns
Go Concurrency Patterns: Pipelines and cancellationВот перевод:Шаблоны параллелизма в Go: конвейеры и явная отмена
- модель планировщика go, управление памятью go, GC, отладка и анализ производительности go, кроссплатформенность — все это расширенные предложения Когда программа сталкивается с проблемами производительности, вам может потребоваться понять механизм реализации параллелизма go, найти проблему и избежать Либо улучшите, либо найдите альтернативы, средний программист не будет читать всю реализацию среды выполнения, если у вас нет сильного любопытства.
См. примечания к исследованию шрамов от дождя
The Go schedulerВот переводиди планировщик
Али Скунесколько статейОчень ярко написано про процесс планировщика
"go concurrentprogramming" также обсуждает планирование go.
иностранныйЭтот РРТТоже хорошо написано.еще один
На гитхабе есть электронная книгаНаписана очень подробно, глубокий анализ реализации нескольких ключевых моментов го, очень хорошая статья
5. Рамочное обучение:
Выучил Се ДаbeegoFramework, beego очень легко начать, модульная конструкция и модули очень полные, г-н Се более восторженный, группа QQ более активна, и две мои небольшие системы разработаны на основе beego;Гид Сяо ХэяХорошая новость для тех, кто хочет увидеть исходный код фреймворка;
Мартини только что прочитал вводную часть, надеюсь, у вас будет время поближе познакомиться с мартини и насладиться 2015 годом.
6. Ожидайте
Я с нетерпением жду выхода отличной книги, в которой рассказывается, как проектировать большие системы на языке Go. Шаблон проектирования языка go сильно отличается от шаблона объектно-ориентированного проектирования, у Лао Сюй есть PPT, в котором представлен язык Go, ориентированный на соединение и композицию, с семью Масштаб системы крупного рогатого скота должен иметь возможность абстрагировать набор закономерностей Кто-нибудь делал это? Паттерны проектирования, связанные с параллелизмом, в интернете много статей, но они не очень систематизированы, надеюсь, кто-то встанет на это в 2015 году, чтобы мы могли встать на плечи гигантов и продолжать двигаться вперед.
На самом деле он не для обучения: большую часть своего времени я трачу на разработку, понимание стандартной библиотеки и обучение, когда я сталкиваюсь с относительно большим общим модулем, я иду на github, чтобы узнать, реализован ли он. вы считаете, что ваш рерайтинг лучше оригинального автора, вы можете запросить запрос.Конечно, если вы столкнетесь с белыми пятнами в своих знаниях во время разработки, вам нужно иметь дух специального исследования.Если вы это понимаете, ваша технология естественным образом улучшится , обратитесь к.
http://www.laktek.com/2012/01/27/learning-go-types/