Како израдити плуг-плуг Голанг апликацију и искористити АВС Ламбда Слојеве.

Голанг - зашто је вредна ваше пажње?

Голанг је програмски језик отвореног кода који је дизајнирао и имплементирао Гоогле. Веома се користи у модерним апликацијама посебно у облаку. Најкарактеристичније карактеристике су:

  • Голанг је статички откуцан - пружа мању флексибилност, али штити вас од грешака,
  • Није објектно оријентисана. Међутим, можете да креирате структуре и интерфејсе који вам дају 3 од 4 ООП принципа: апстракција података, енкапсулација и полиморфизам. Наслеђивање је једино које недостаје,
  • Гороутинес! - највећа примена светлосних нити које сам икада користио. Омогућава вам да креирате нову нит на супер лак начин користећи го оператор и комуницирате између различитих гороутина користећи канале,
  • Компилира се у јединствени бинарни формат са свим зависностима - нема више сукоба пакета!

Лично, Голанг сматрам највећим језиком који користим свакодневно. Међутим, у овом се чланку неће радити о стварању прве функције или штампању "Хелло Ворлд". Показаћу вам мало напредније ствари. Ако сте почетник и желите да сазнате више о Голангу, посетите његову главну страницу.

АВС Ламбда & Голанг

АВС Ламбда је један од најпопуларнијих рачунарских сервиса без сервера у јавном облаку, који је у новембру 2014. објавио Амазон Веб Сервицес. Омогућава вам да покренете свој код као одговор на догађаје попут окидача ДинамоДБ, СНС или ХТТП без обезбеђивања или управљања серверима! Знате ли шта је заиста сјајно? Од јануара 2018. подржава Голанг вријеме извођења. Рад са АВС Ламбда је заиста једноставан - само пренесите зиппед пакет са својим кодом и свим зависностима (појединачни бинарни систем када користите Голанг).

Брзо напријед, 4 године касније у 2018. години ре: Инвент АВС објављује Ламбда Слојеве који вам омогућавају да похраните и управљате подацима који се дијеле на различите функције у једном или чак више АВС налога! На пример, док користите Питхон, све зависности можете ставити у додатни слој који ће касније користити други Ламбдас. Више нема потребе стављати различите зависности у сваки компримирани пакет! У свету Голанг ситуација је другачија јер АВС Ламбда захтева да пошаљете састављене бинарне датотеке. Како можемо имати користи од АВС Ламбда Слојева? Одговор је једноставан - направите модуларну апликацију помоћу Голанг додатака!

Голанг додаци - начин за изградњу модуларне апликације

Голанг Плугинс је функција објављена у Го1.8 која вам омогућава динамично учитавање дељених библиотека (.со датотека). Пружа вам могућност да неки свој код извезите у засебну библиотеку или користите додатак који је припремио и саставио неко други. Обећава, међутим, постоји неколико ограничења:

  • Ваш додатак мора бити један главни модул,
  • Можете учитати само функције и променљиве које се извозе као ЕЛФ симболи,
  • Због статичког куцања, сваки уметнути симбол морате да убаците у одговарајући тип. У најгорем сценарију, морате да дефинишете исправан интерфејс у ​​вашем коду,
  • Ради само за Линук и МацОС. Ја то лично не сматрам недостатком :)

Израда и тестирање вашег првог додатка

Сада направимо наш први додатак. Као пример, направићемо једноставан модул за шифровање низа. Вратимо се основама и имплементирамо 2 једноставна алгоритма за шифровање - Цеасар и Верман.

  • Цезар шифра је алгоритам који су први користили Јулиус Цеасес. Свако слово у тексту помиче за фиксни број позиција. На пример, ако желите да шифрујете реч голанг кључем 4, добићете ктпек. Дешифровање делује на исти начин. Само морате померати слова у супротном смеру.
  • Верман шифра је слична Цеасер-у, заснована на истој идеји померања, разлика је у томе што свако слово мењате за различит број позиција. Да бисте дешифровали текст, морате да имате кључ који садржи положаје који се користе за шифровање текста. На пример, ако желите да шифрујете реч голанг кључем [-1, 4, 7, 20, 4, -2], добићете будућност.

Потпуна примена овог примера доступна је овде.

Имплементација додатка

Следећи исјечак садржи имплементацију два горе споменута алгоритма. За сваку имплементирамо 2 начина шифрирања и дешифровања нашег текста:

Као што видите, извезли смо овде 3 различита симбола (Голанг извози само ове идентификаторе који почињу са горњим словом):

  • ЕнцриптЦеасар - низ фунц (инт, стринг) који шифрира текст помоћу алгоритма Цеасар,
  • ДецриптЦеасер - фунц (инт, стринг) низ који дешифрује текст помоћу алгоритма Цаесер,
  • ВерманЦипхер - променљива типа верманЦипхер која примењује 2 методе: Шифрирање: стринг фунц (стринг) и Дешифрирање: фунц () (* стринг, грешка)

Да бисте саставили овај додатак, морате покренути следећу наредбу:

го буилд -буилдмоде = плугин -о плугин / ципхер.со плугин / ципхер.го

За сада нема ништа посебно - направљено је неколико једноставних функција и модул је састављен као додатак додавањем аргумента -буилдмоде = плугин.

Учитајте и тестирајте додатак

Забава почиње када желимо да користимо састављени додатак у нашој апликацији. Креирајмо једноставан пример:

Прво, морате да увежете пакет плуга за голанг. Садржи само две функције - прва је за учитавање дељене библиотеке, а друга за проналажење извезеног симбола. Да бисте учитали библиотеку, морате да отворите функцију која захтева давање пута до вашег дељеног додатка и враћа променљиву врсту додатка. Ако учитавање библиотеке није могуће (нпр. Погрешан пут или оштећена датотека), ова функција враћа грешку коју треба обрадити.

Сљедећи корак је учитавање сваког извезеног симбола методом Лоокуп. Мала неугодност је што требате да учитате сваку извезену функцију одвојено. Међутим, можете комбиновати више функција заједно на исти начин као што је то учињено за симбол ВерманЦипхер. Када унесете све симболе које желите да употребите, морате их бацити у одговарајући тип. Голанг је језик статички типкан, тако да не постоји други начин да се ови симболи користе без кастинга. Запамтите, када извозите променљиву која имплементира неколико метода, морате да је додате на одговарајући тип интерфејса (морао сам да дефинишем енцриптионЕнгине интерфејс да бих се носио са тим). \ Невлине \ невлине

За састављање и покретање апликације користите следећу наредбу:

го буилд апп.го
./апликација

У излазу бисте требали видети шифрирани и дешифрирани текст као доказ да алгоритам исправно ради.

Користите додатак у АВС ламбда

Да бисмо користили наш додатак у АВС Ламбда, потребно је извршити неколико измена у нашој апликацији:

  • АВС Ламбда монтира слојеве у / опт директоријум у ламбда контејнеру, тако да морамо учитати наш додатак из овог директорија.
  • Морамо да направимо функцију руковања коју ће Ламбда мотор користити за обраду нашег тестног догађаја.

Следећи исјечак садржи нашу апликацију прилагођену да користи Ламбда:

Као што видите имплементација је врло слична претходној. Променили смо само директориј из кога смо учитали додатак и додали одговор функције уместо штампања вредности. Ако желите да сазнате више о писању Ламбдас-а на голангу, молимо погледајте АВС документацију.

АВС Ламбда примена

Постоје два начина примене АВС Ламбда функција и слојева. Зиппед пакет можете креирати и ручно користити или користити напреднији оквир који га чини много лакшим и бржим. За већину својих пројеката користим оквир без сервера, тако да сам већ припремио једноставну конфигурациону датотеку серверлесс.имл помоћу ове алатке:

услуга: ципхерСервице
ФрамеворкВерсион: "> = 1.28.0 <2.0.0"
провајдер:
  име: авс
  рунтиме: го1.к
слојеви:
  ципхерЛаиер:
    путања: бин / плугин
    компатибилниРунтимес:
      - го1.к
функције:
  мотор:
    руковатељ: канта / шифраЕнгине
    пакет:
      искључити:
        - ./**
      укључују:
        - ./бин/ципхерЕнгине
    слојеви:
      - {Реф: ЦипхерЛаиерЛамбдаЛаиер}

У одељку слојева дефинисали смо један слој са путањом до већ створеног додатка - он ће бити распоређен заједно са ламбда функцијом. Можете одредити до 5 различитих слојева који је редослед заиста важан. Монтирани су на исти / опт директоријум, тако да слојеви са већим бројем могу пребрисати датотеке из претходно монтираних слојева. За сваки слој морате навести најмање 2 параметра: стазу до директорија који садржи извор нивоа (пут до бинарног додатка у вашем случају) и листу компатибилних времена извођења.

Следећи одељак о функцијама је место где дефинишете листу функција које ће се распоредити. За сваку функцију морате навести најмање путању до састављене апликације. Поред тога, морамо дефинирати параметар слојева с референцама на горе дефинирани слој. Ово ће аутоматски повезати слој са нашом Ламбда функцијом током размештања. Смијешна ствар је што морате да претворите своје име ламбда слоја у ТитлеЦасед и додате ЛамбдаЛаиер суфикс ако желите да се обратите том ресурсу. Чини се да га је тим без сервера имплементирао на тај начин да реши сукоб у односу на различите врсте ресурса.

Једном када је наша конфигурациона датотека серверлесс.имл спремна, последња ствар коју треба да урадите је да саставите нашу апликацију, додате је и активирамо. За то можемо користити једноставан Макефиле:

.ПХОНИ: изградите буилдПлугин цлеан имплементирати
градити:
 деп осигурати -в
 енв ГООС = линук го буилд -лдфлагс = "- с -в" -о бин / ципхерЕнгине ципхерЕнгине / маин.го
буилдПлугин:
 енв ГООС = линук го буилд -лдфлагс = "- с -в" -буилдмоде = плугин -о бин / плугин / ципхер.со ../плугин/ципхер.го
чист:
 рм -рф ./бин ./вендор Гопкг.лоцк
имплементирати: очистити буилдПлугин буилд
 слс имплементирати --вербосе

Можете да изградите и имплементирате своју функцију извођењем следеће наредбе:

направити имплементацију

Тест АВС Ламбда

Као што сам раније напоменуо, АВС Ламбда извршава код у одговору на догађај. Међутим, нисмо конфигурисали ниједан окидач догађаја, тако да се он неће позивати без наше помоћи. То морамо да урадимо ручно користећи Серверлесс оквир или авсцли алат:

слс призива -ф фунцтион_наме
авс ламбда инвоке - име-функције фунцтион_наме оутпут_филе

У одговору бисте требали видјети исти излаз као и прије, што доказује да наша ламбда функција исправно ради и учитава додатак из додатног слоја. Сада можете да креирате друге функције које ће користити исти слој или их чак делити са другим АВС налогима.

Резиме

Било је забавно користити Голанг модуле и тестирати како их интегрисати са ново изданим АВС Ламбда Слојевима. Библиотека додатака је заиста феноменална, али због својих ограничења и Голанг спецификације може се користити само у неким посебним сценаријима. Мислим да за већину програмера који раде на стандардним пројектима неће бити потребна или је чак и могућа употреба додатака. У обзир ми падају само два разлога:

  • Имплементација сложених алгоритама које могу користити и друге апликације, нпр. алгоритми за кодирање или шифровање видео записа.
  • Дељење алгоритма са другима без објављивања његовог кода.