Как уже упоминалось ранее, вы должны преобразовать каждый столбец в строку и затем использовать оператор плюс для объединения двух столбцов строки. Вы можете получить большое улучшение производительности, используя NumPy.
%timeit df['Year'].values.astype(str) + df.quarter
71.1 ms ± 3.76 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit df['Year'].astype(str) + df['quarter']
565 ms ± 22.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Обновление в мае 2013 года: официальная документация находится в разделе « Организация кода »
Код Go должен храниться внутри рабочей области. Рабочее пространство представляет собой иерархию каталогов с тремя директориями в своем корне:
blockquote>
src
содержит исходные файлы Go, организованные в пакеты (один пакет для каталога),pkg
содержит объекты пакета, аbin
содержит исполняемые команды.
go tool
создает исходные пакеты и устанавливает полученные двоичные файлы в каталогиpkg
иbin
.Подкаталог
blockquote>src
обычно содержит несколько репозиториев управления версиями (например, для Git или Mercurial), которые отслеживают разработку одного или нескольких исходных пакетов.bin/ streak # command executable todo # command executable pkg/ linux_amd64/ code.google.com/p/goauth2/ oauth.a # package object github.com/nf/todo/ task.a # package object src/ code.google.com/p/goauth2/ .hg/ # mercurial repository metadata oauth/ oauth.go # package source oauth_test.go # test source
Обновление Июль 2014: см. « Структурирование приложений в Go » из Бен Джонсон
Это статья включает следующие советы:
Отделите свой бинарный файл от вашего приложения
, объединяющий файл
main.go
, и моя логика приложения в том же пакете имеет два следствия:
- Это делает мое приложение непригодным для использования в качестве библиотеки.
[g1 2] У меня может быть только одно бинарное приложение.Лучший способ найти это - просто использовать в моем проекте каталог «
blockquote>cmd
», где каждый из его подкаталоговcamlistore/ cmd/ camget/ main.go cammount/ main.go camput/ main.go camtool/ main.go
Разработка с использованием библиотеки
Перенос файла
main.go
из вашего корня позволяет вам создавать приложение из перспектива библиотеки. Бинарный файл приложения - это просто клиент библиотеки вашего приложения.Иногда вам может потребоваться, чтобы пользователи взаимодействовали несколькими способами, поэтому вы создаете несколько двоичных файлов. Например, если у вас есть пакет «
blockquote>adder
», который позволяет пользователям добавлять номера вместе, вы можете захотеть выпустить версию командной строки, а также веб-версию. Вы можете легко сделать это, организовав свой проект следующим образом:adder/ adder.go cmd/ adder/ main.go adder-server/ main.go
Пользователи могут установить бинарные файлы приложений «сумматора» с помощью «go get» с помощью многоточия:
blockquote>$ go get github.com/benbjohnson/adder/...
И у вас есть у пользователя «
blockquote>adder
» и «adder-server
»Не сходите с ума subpackages
Обычно типы моего проекта очень взаимосвязаны, поэтому он лучше подходит для удобства использования и API. Эти типы также могут использовать вызовы, не поддерживаемые между ними, что делает API небольшим и понятным.
- Связанные с группой типы и код вместе в каждом файле. Если ваши типы и функции хорошо организованы, я обнаружил, что файлы, как правило, составляют от 200 до 500 SLOC. Это может показаться много, но мне легко ориентироваться. 1000 SLOC обычно является моим верхним пределом для одного файла.
- Упорядочить наиболее важный тип в верхней части файла и добавить типы в уменьшающемся значении в нижней части файла.
- blockquote>
Примечание: эта последняя практика не всегда хороша:
]Извините, я просто не могу согласиться с этой практикой. Разделение типа на файлы помогает управлять кодом, читабельности, материнствам, тестируемости. Это может также обеспечить единую ответственность и следовать принципу открытого / закрытого ... Правило не допускать круговой зависимости состоит в том, чтобы заставить нас иметь четкую структуру пакетов.
blockquote>
(Альтернатива Февраль 2013 г., только в отношении
src
). Вы можете найти классический макет, представленный в « макета кода GitHub »:Приложение и обе библиотеки живут на Github, каждый в своем собственном репозитории.
$GOPATH
- это корень проекта - каждый из ваших репозиториев Github будет проверен несколькими папками ниже$GOPATH
.Схема вашего кода будет выглядеть так:
blockquote>$GOPATH/ src/ github.com/ jmcvetta/ useless/ .git/ useless.go useless_test.go README.md uselessd/ .git/ uselessd.go uselessd_test.go README.md
Каждая папка в папке
blockquote>src/github.com/jmcvetta/
является корнем отдельного git checkout.Это привлекло некоторые критические замечания, хотя на этой странице reddit :
Я настоятельно рекомендую не структурировать репо, как вы , он сломается «
go get
», что является одной из самых полезных вещей о Go. Гораздо лучше написать свой код для людей, которые знают Go, поскольку они, скорее всего, будут их компиляцией. И для людей, которые этого не делают, они, по крайней мере, почувствуют язык.Поместите основной пакет в корень репо. У вас есть активы в подкаталоге (чтобы все было аккуратно). Храните мясо кода в субпакете (в случае, если кто-то захочет повторно использовать его вне вашего двоичного файла). Включите скрипт установки в корень репо, чтобы его было легко найти.
Это все еще только двухэтапный процесс для загрузки, сборки, установки и настройки .:
BLOCKQUOTE>
- "
go get <your repo path>
": загружает и устанавливает код go, с поддиретом для активов$GOPATH/<your repo path>/setup.sh
: распределяет активы в нужном месте и устанавливает службу
Существует рекомендуемый подход от авторов Golang, который определяет, как лучше всего использовать ваш код для работы с инструментами go и поддерживать системы управления версиями
Я предполагаю, что с «проектом» вы не имеете в виду пакет Go, а разрабатываете программное обеспечение. В противном случае вы можете получить здесь здесь и здесь . Однако это не так сильно отличается от написания пакетов для Go: используйте пакеты, создайте папку для каждого пакета и объедините эти пакеты в своем приложении.
Чтобы создать собственное мнение, вы можете посмотреть на тренды Go репозиториев на github: https://github.com/trending/go . Известными примерами являются cayley и zeus .
Наиболее популярная схема, вероятно, имеет основной файл Go и множество модулей и подмодулей в своих собственных каталогах. Если у вас много метафайлов (doc, license, templates, ...), вы можете захотеть поместить исходный код в подкаталог. Это то, что я сделал до сих пор.
Вероятно, вы также должны изучить этот репо. Он показывает много идей о том, как структурировать приложения: https://github.com/golang-standards/project-layout