Веб рутирање је техника додељивања ХТТП захтева функцијама руковаоца које раде на наведеној УРЛ путањи. Рутирање се често користи за прављење апликација на једној страници (СПА) и АПИ-ја. У рутеру, код дефинише редослед радњи које прате захтев корисника.

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

Почетак рада са рутирањем у Го

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

Многи Го веб оквири имплементирају неке од ових пакета за рутирање.

Ево једноставног модела структуре за ЈСОН одговор који ћете вратити клијенту у овом водичу.

тип Инфо струцт {
Порука низ`јсон:"порука"`
Опис низ`јсон:"опис"`
}

Већина Го рутера и даље користи нет/хттп РеспонсеВритер и Захтев методе као параметри у функцијама руковаоца.

instagram viewer
фунцЗдраво(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
// пословна логика функције руковаоца овде
}

Такође, мораћете да покренете сервер са ЛистенАндСерве метод за покретање сервера у већини пакета.

ерр := хттп. ЛистенАндСерве(":8000“, рутер)

ако ерр != нула {
повратак
}

Ево неких од популарних пакета за рутирање у Го екосистему.

1. Горилла Мук рутер

Горилла Мук пакет имплементира и рутер захтева и диспечер захтева за ХТТП захтеве. То је као хттп. СервеМук метода, али са додатном функционалношћу.

Горилла Мук рутер имплементира хттп. Хандлер интерфејс и његове методе су компатибилни са СервеМук методом. Пакет такође имплементира више шема УРЛ-а и можете користити рутере као подрутере (угнежђене руте) да бисте дефинисали сличне руте.

Тхе Горилла Мук пакет је део Горилла веб алата. Комплет алата укључује пакете везане за веб за решавање многих проблема задржавање корисника пријављених са Сессионс за складиштење података помоћу колачића.

Покрените ову команду у терминалу свог радног простора да бисте инсталирали пакет Горилла Мук.

иди гет -у гитхуб.цом/горилла/мук

Ево како можете да подесите а ДОБИТИ захтева руту до функције руковаоца која кодира до ЈСОН одговора са пакетом Горилла Мук.

увоз (
"кодирање/јсон"
"гитхуб.цом/горилла/мук"
"Пријава"
"нет/хттп"
)

фунцЗдраво(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
одговор := Инфо {
Порука: "Успех",
Опис: "Успешно сте писали клијенту",
}

ерр := јсон. НевЕнцодер (писац).Енцоде (одговор)

ако ерр != нула {
Пријава. Фаталн (ерр)
}
}

фунцглавни() {
рутер := мук. НевРоутер()
рутер. ХандлеФунц("/здраво", здраво).Методе("ГЕТ")
ерр := хттп. ЛистенАндСерве(":8000“, рутер)

ако ерр != нула {
повратак
}
}

Тхе Здраво функција руковаоца кодира структуру у ЈСОН користећи Енцоде методом НевЕнцодер струцт.

Тхе главни функција додељује нову инстанцу рутера Горилла Мук рутер променљива. Затим позива ХандлеФунц метод за мапирање руте до функције руковаоца. Можете користити Методе метод за одређивање типа захтева.

2. Цхи Роутер

Тхе Цхи Роутер је лаган, брз рутер који се може саставити за прављење веб услуга заснованих на ХТТП-у у Го. Цхи рутер је компатибилан са хттп пакет, и не постоје спољне зависности за рутер.

За разлику од многих рутера, Цхи обезбеђује контролу контекста са контекст пакет за благовремено обраду захтева.

Инсталирајте Цхи рутер на своје Го модуле помоћу ове команде.

иди преузми гитхуб.цом/иди-цхи/цхи

Рутирање са Горилла Мук рутером и Цхи рутером је веома слично. Ево како можете да подесите слично ДОБИТИ захтев који кодира структуру у ЈСОН као одговор.

увоз (
"кодирање/јсон"
"гитхуб.цом/иди-цхи/цхи/в5"
"Пријава"
"нет/хттп"
)

фунцглавни() {
рутер := цхи. НевРоутер()
рутер. Гет("/здраво", здраво)
ерр := хттп. ЛистенАндСерве(":8000“, рутер)

ако ерр != нула {
повратак
}
}

фунцЗдраво(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
одговор := Инфо {
Порука: "Успех",
Опис: "Успешно сте писали клијенту",
}

ерр := јсон. НевЕнцодер (писац).Енцоде (одговор)

ако ерр != нула {
Пријава. Фаталн (ерр)
}
}

Тхе Здраво функција руковаоца је функција руковаоца за ДОБИТИ захтев.

У главни функција, тхе рутер променљива је инстанца Цхи рутера. Можете одредити метод захтева са именом методе; у овом случају, Добити узима идентификатор руте и функције руковаоца као параметре.

3. ХттпРоутер пакет

Тхе ХттпРоутер пакет је веома ефикасан, лаган мултиплексер захтева. Пружа више функционалности од СервеМук имплементација хттп пакета.

ХттпРоутер пакет има мали меморијски отисак, високе перформансе и добру скалабилност. То је један од најстаријих и најчешће коришћених рутера у Го екосистему, имплементиран у многима популарни Го оквири, укључујући библиотека Гин.

Покретање ове команде на терминалу вашег радног директоријума ће инсталирати ХттпРоутер пакет.

иди набавите гитхуб.цом/јулиенсцхмидт/хттпроутер

Рутирање помоћу ХттпРоутера мало се разликује од рутера Цхи и Горилла Мук.

Ево како можете да подесите једноставан ГЕТ захтев са ХттпРоутер пакетом.

увоз (
"кодирање/јсон"
"гитхуб.цом/јулиенсцхмидт/хттпроутер"
"Пријава"
"нет/хттп"
)

фунцглавни() {
рутер := хттпроутер. Нова()
рутер. ГЕТ("/здраво", здраво)
ерр := хттп. ЛистенАндСерве(":8000“, рутер)

ако ерр != нула {
повратак
}
}

фунцЗдраво(писац хттп. РеспонсеВритер, захтев *хттп. Захтев, _ хттпроутер. Парамс) {
одговор := Инфо {
Порука: "Успех",
Опис: "Успешно сте погодили АПИ крајњу тачку",
}

ерр := јсон. НевЕнцодер (писац).Енцоде (одговор)

ако ерр != нула {
Пријава. Фаталн (ерр)
}
}

Функције руковаоца за пакет ХттпРоутер морају имати Парамс методом ХТТП рутера.

Тхе рутер променљива је инстанца ХттпРоутер-а. Можете подесити ГЕТ захтев помоћу ДОБИТИ метод који узима руту и ​​идентификатор функције руковаоца.

4. Пат Роутер

Пат је мултиплексер ХТТП захтева у Синатрином стилу који ради са Го-овим нет/хттп пакетом. Пат рутер нема никакве функције осим рутирања.

Покрените ову команду у свом радном директоријуму да бисте инсталирали Пат Роутер

иди набавите гитхуб.цом/бмизерани/пат

Пат рутер имплементира сличне функционалности као СервеМук методом.

Ево како можете да управљате усмеравањем захтева помоћу пат пакет.

увоз (
"кодирање/јсон"
"гитхуб.цом/бмизерани/пат"
"Пријава"
"нет/хттп"
)

фунцЗдраво(писац хттп. РеспонсеВритер, захтев *хттп. Захтев) {
одговор := Инфо {
Порука: "Успех",
Опис: "Успешно сте погодили крајњу тачку",
}

ерр := јсон. НевЕнцодер (писац).Енцоде (одговор)

ако ерр != нула {
Пријава. Фаталн("грешка")
}
}

фунцглавни() {
рутер := пат. Нова() // инстанца рутера
рутер. Гет("/здраво", хттп. ХандлерФунц (здраво))
хттп. Ручица ("/", рутер)
ерр := хттп. ЛистенАндСерве(":12345", нула)

ако ерр != нула {
Пријава. Фатал("ЛистенАндСерве: ", ерр)
}
}

Тхе Нова метода враћа инстанцу рутера. Мораћете да умотате функцију руковаоца са ХандлерФунц методом. Затим можете користити Дршка метод да одредите роот путању и монтирате инстанцу рутера пре покретања сервера.

Прављење рутера није тако тешко

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

Оквири као што су Гин и Фибер укључују функционалност рутирања из мрежног пакета или екстерних пакета који је имплементирају.