{"id":73699,"date":"2020-03-11T14:42:33","date_gmt":"2020-03-11T11:42:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/aleksej-najdyonov-itoolabs-kejs-razrabotki-na-go-golang-telefonnoj-platformy-chast-1"},"modified":"2020-03-11T14:42:33","modified_gmt":"2020-03-11T11:42:33","slug":"aleksej-najdyonov-itoolabs-kejs-razrabotki-na-go-golang-telefonnoj-platformy-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/aleksej-najdyonov-itoolabs-kejs-razrabotki-na-go-golang-telefonnoj-platformy-chast-1","title":{"rendered":"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Aleksandr Naidjonov, tegevjuht <noindex><a rel=\"nofollow\" href=\"http:\/\/itoolabs.com\/\">ITooLabs<\/a><\/noindex>, r\u00e4\u00e4gib sideplatvormi arendamisest telekommunikatsiooni operaatoritele Go (Golang) programmeerimiskeeles. Aleksandr jagab ka kogemusi platvormi juurutamisest ja kasutamisest \u00fches Aasia suurimaid telekommunikatsiooni operaatoreid, kes kasutas platvormi h\u00e4\u00e4ls\u00f5numite (VoiceMail) ja Virtuaalse PBX (Cloud PBX) teenuste pakkumiseks.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/02f20af3c002ff83297e057c5e72d8c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Aleksandr Naidjonov (edaspidi \u2013 AN):<\/b> \u2013 Tere k\u00f5igile! Minu nimi on Aleksandr Naidjonov. Olen ITooLabsi direktor. Esiteks tahaksin vastata, mida ma siin teen ja kuidas ma siia sattusin.<\/p>\n<p>Kui vaatate Bitrix24 turuosa (jaotises \u201eTelefonia\u201d), siis 14 rakendust ja 36, mis seal on (40%) \u2013 see oleme meie:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/548721144e4367eca1eadad8ce9c31ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00e4psemalt \u00f6eldes on need meie partner- operaatorid, kuid kogu selle taga on meie platvorm (Platform as a Service) \u2013 see, mida me neile v\u00e4ikese tasu eest m\u00fc\u00fcme. Just platvormi arendamisest ja sellest, kuidas me Go-sse j\u00f5udsime, tahaksin r\u00e4\u00e4kida.<\/p>\n<p>Numbrid meie platvormi kohta praegu:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/d59542f4af58a9735c8384b20d5750c1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n44 operaatorpartnerit, sealhulgas \u00abMegaFon\u00bb. Me oleme \u00fcldiselt v\u00e4ga avatud uutele seiklustele ja meil on tegelik juurdep\u00e4\u00e4s 100 miljonile abonendile 44 operaatorilt siin Venemaal. Seet\u00f5ttu, kui kellelgi on \u00e4riideid, oleme alati valmis kuulama.<\/p>\n<ul>\n<li>5000 kasutajafirmat.<\/li>\n<li>Kokku 20 000 abonenti. K\u00f5ik see on B2B \u2013 me t\u00f6\u00f6tame ainult ettev\u00f5tetega.<\/li>\n<li>300 k\u00f5net minutis p\u00e4evasel ajal.<\/li>\n<li>Eelmisel aastal 100 miljonit k\u00f5netundi (me t\u00e4histasime seda). See ei arvestanud meie platvormil toimuvaid siseseid k\u00f5nesid.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kuidas see k\u00f5ik algas?<\/h3>\n<p>\nKuidas \u00f5iged t\u00fc\u00fcbid oma platvormi looma hakkavad? Tuleb arvestada, et meie ajaloos oli ka 'hardsell-ettev\u00f5tte' arendus, ja veel \u00f5igeaegselt ettev\u00f5tte jaoks! See oli see \u00f5nnelik aeg, kus l\u00e4hed kliendi juurde ja \u00fctled: 'Vajame veel paar serverit.' Ja klient: 'Pole probleemi! Meil on rack'is k\u00fcmneid.'<\/p>\n<p>Seet\u00f5ttu tegelesime Oracle'i, Java, WebSphere'i, Db2 ja muu taolisega. Me valisime loomulikult parimad tarnijate lahendused, integreerisime need ja proovisime nendega t\u00f5usta. Tegime seda omaette. See oli nagu sisemine start-up.<\/p>\n<p>K\u00f5ik see algas 2009. aastal. Alates 2006. aastast oleme tihedalt tegelenud operaatorilahendustega. Valmistasime mitmeid eritellimusel valmistatud virtuaalseid PSTN-i, nagu see, mis meil praegu tellida on: vaatlesime, otsustasime, et see on hea, ja otsustasime luua sisemise start-up'i.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/2d4e4da282ee106a0c8e53154a0b4b00.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV\u00f5tsime VMWare'i. Kuna tegime seda oma vahenditega, pidime kohe loobuma kallist tarnijate salvestusest. Me teame nende kohta k\u00f5ike: lubadused tuleb jagada kolme ja hind korrutada k\u00fcmnega. Seet\u00f5ttu tegime DirDB ja nii edasi.<\/p>\n<p>Siis hakkas see kasvama. Sellele lisandus arveldusteenus, kuna platvorm ei suutnud enam hakkama saada. Siis kolis arvelduse server MySQL-st Mongo-le. Tulemuseks oli t\u00f6\u00f6tav lahendus, mis t\u00f6\u00f6tleb k\u00f5iki sinna k\u00f5ige l\u00e4henenud k\u00f5nesid:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/5428e0c848952142e47adaaf09bc532e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAga kuskil seal sees keerleb see vendor-toode \u2013 peamine, tuumik, mille me kunagi valisime. Umbes 2011. aasta l\u00f5pus m\u00f5istsime, et see toode on meie peamine kitsaskoht \u2013 me j\u00f5uame just sellesse. Me n\u00e4gime end ees seina, mille poole me t\u00e4ies hoos jookseme, kuna kliendid tulid juurde.<br \/>\nSeega pidiime midagi ette v\u00f5tma. Loomulikult tegime \u00fcsna pikka aega erinevate toodete \u2013 nii avatud l\u00e4htekoodiga kui ka vendorite \u2013 uuringuid. Ma ei hakka praegu sellele peatuma \u2013 teema ei ole see. Viimane varuplaan, mille \u00fcle me r\u00e4\u00e4kisime, oli omaenda platvormi loomine.<\/p>\n<p>L\u00f5ppkokkuv\u00f5ttes j\u00f5udsimegi selle valikuni. Miks? Sest k\u00f5ik vendorite ja avatud l\u00e4htekoodiga tooted on loodud 10-aastase taguse probleemide lahendamiseks. Hea k\u00fcll, kui 10 aastat, m\u00f5ned on aga vanemad! Meile osutus valik selgeks: kas loobume oma kaunilt ideest ideaalsest teenusest (partnerite, operaatorite ja enda jaoks), v\u00f5i teeme midagi ise.<\/p>\n<p>Otsustasime teha midagi ise!<\/p>\n<h3>Platvormi n\u00f5uded<\/h3>\n<p>\nKui millegagi pikka aega tegeled (kasutad kellegi teise toodet), siis hakkavad peas tasapisi m\u00f5tted liikuma: kuidas ma teeksin seda ise? Kuna meie ettev\u00f5ttes on k\u00f5ik programmeerijad (v\u00e4lja arvatud m\u00fc\u00fcjad, mitte-programmeerijaid pole), on meil n\u00f5uded juba ammu v\u00e4lja kujunenud ja need on selged:<\/p>\n<ol>\n<li>Kiire arenduskiirus. Valmistooted, mis meid vaevasid, ei sobinud meile eelk\u00f5ige selle p\u00e4rast, et k\u00f5ik toimus aeglaselt ja vaevaliselt. Me soovisime kiiresti \u2013 meil oli palju ideid! Meil on ka praegu palju ideid, kuid tookord oli ideeideede nimekiri niinav\u00f5rd pikk, et tundus nagu oleksime k\u00fcmme aastat ette vaatamas. Praegu on see vaid aasta.<\/li>\n<li>Maksimaalne mitme tuuma kasutamine. See oli meile samuti oluline, kuna n\u00e4gime, et tuumade arv suureneb pidevalt.<\/li>\n<li>K\u00f5rge usaldusv\u00e4\u00e4rsus. See on ka asi, mille p\u00e4rast oleme palju nutnud.<\/li>\n<li>K\u00f5rge t\u00f5rke kindlus.<\/li>\n<li>Soovisime l\u00f5puks j\u00f5uda protsessini, mille korraldamine toimuks igap\u00e4evaste v\u00e4ljalaskepunktide kaudu. Selleks vajasime keele valikut.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/f20740863e9938ac22154d851081f71e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeega, meie endi toodet toetavad n\u00f5uded viivad ilmnevalt loogiliselt keele n\u00f5udeni.<\/p>\n<ol>\n<li>Kui vajame mitme tuuma s\u00fcsteemide tuge, on meil vaja ka paralleelse t\u00e4itmise tuge.<\/li>\n<li>Kui me vajame arenduse kiirust, vajame me keelt, mis toetab konkurentsset arendust, konkurents-programmeerimist. Kui keegi ei ole kunagi kokku puutunud erinevusega, siis see on v\u00e4ga lihtne:\n<ul>\n<li>paralleelprogrammeerimine \u2013 see puudutab kaht erinevat l\u00f5ime, mis t\u00f6\u00f6tavad erinevates tuumades;<\/li>\n<li>konkurentsiline t\u00e4itmine, t\u00e4psemalt konkurentsi toetas \u2013 see on see, kuidas keel (v\u00f5i t\u00f6\u00f6aeg, pole vahet) aitab peita kogu keerukuse, mis tuleneb paralleelsest t\u00e4itmisest.<\/li>\n<\/ul>\n<\/li>\n<li>K\u00f5rge vastupidavus. Ilmselgelt oli meil vaja klastrit, ja see pidanuks olema parem kui see, mis meil oli tarnija tootes.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/9aafc30a637341d71c8550818db2097d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMeil ei olnud tegelikult palju variante, kui meenutada. Esiteks, \u201eErlang\u201c \u2013 me armastame seda ja tunneme seda, see oli minu isiklik, isiklik lemmik. Teiseks, Java \u2013 isegi mitte Java, vaid konkreetne Scala. Kolmandaks, keel, mida me sel hetkel \u00fcldse ei teadnud \u2013 Go. See oli just turule tulnud, t\u00e4psemalt umbes kaks aastat olemas olnud, kuid veel ei olnud avaldanud.<\/p>\n<p>V\u00f5itis Go!<\/p>\n<h3>Go ajalugu<\/h3>\n<p>\nMeie loodud platvorm on sellel. Proovin selgitada, miks.<\/p>\n<p>L\u00fchike ajalugu Go-st. See k\u00e4ivitus 2007. aastal, avati 2009. aastal, esimene versioon ilmus 2012. aastal (see t\u00e4hendab, et me hakkasime t\u00f6\u00f6tama juba enne esimest v\u00e4ljaannet). Algataja oli Google, kes soovis ilmselt Java-d asendada.<\/p>\n<p>Autorid on v\u00e4ga tuntud:<\/p>\n<ul>\n<li>Ken Thompson, kes seisis Unix\u2019i taga, m\u00f5tles v\u00e4lja UTF-8, t\u00f6\u00f6tas Plan 9 s\u00fcsteemi kallal;<\/li>\n<li>Rob Pike, kes koos Keniga m\u00f5tles v\u00e4lja UTF-8, t\u00f6\u00f6tas samuti Plan 9, Inferno ja Limbo kallal Bell Labs\u2019is;<\/li>\n<li>Robert Griesemer, keda me tunneme ja armastame selle eest, et ta m\u00f5tles v\u00e4lja Java HotSpot Compileri ja t\u00f6\u00f6tas V8 (Google\u2019i Javascript\u2019i t\u00f5lgendaja) generaatori kallal;<\/li>\n<li>Ja \u00fcle 700 osaleja, sealhulgas m\u00f5ned meie plaastrid.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/d006ce7da7e94e71695186fbb5a4fa88.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Go: esimene pilk<\/h3>\n<p>\nN\u00e4eme, et keel on enam-v\u00e4hem lihtne ja arusaadav. Meil on ilmseid t\u00fc\u00fcpe: m\u00f5nel juhul tuleb neid deklareerida, m\u00f5nel juhul mitte (see t\u00e4hendab, et t\u00fc\u00fcbid tuletatakse, niikuinii).<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/5d477702756c29b0ec2b74aa6df8098f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOn n\u00e4ha, et struktuure on moes kirjeldada. On n\u00e4ha, et meil on pointeri kontseptsioon (seal, kus on t\u00e4hekene). On n\u00e4ha, et massiivide ja assotsiatiivsete massiivide deklareerimiseks ja initsialiseerimiseks on spetsiaalne tugi.<\/p>\n<p>Umbes selge \u2013 elada on v\u00f5imalik. Proovime kirjutada Hello, world:<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/c9301b0f6c70b6e00a8c0e71cae605b4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMida n\u00e4eme? See on C-sarnane s\u00fcntaks, semikoolon ei ole kohustuslik. See v\u00f5ib olla kahe rea eraldaja, kuid ainult juhul, kui need on kaks konstruktsiooni, mis on t\u00f5epoolest \u00fchel real.<\/p>\n<p>N\u00e4eme, et juhtimistruktuurides (14. reas) on sulud mitte kohustuslikud, kuid s\u00fcklites on need alati vajalikud. N\u00e4eme, et t\u00fc\u00fcpimine on staatiline. Enamikul juhtudel tuletatakse t\u00fc\u00fcp automaatselt. See n\u00e4ide on natuke keerulisem kui tavaline Hello, world \u2013 lihtsalt, et n\u00e4idata, et on olemas teek.<\/p>\n<p>Mida veel olulist n\u00e4eme? Kood on organiseeritud pakettidesse. Ja et pakketti oma koodis kasutada, tuleb see importida import-direktiivi abil \u2013 see on samuti oluline. K\u00e4ivitame \u2013 t\u00f6\u00f6tab. Suurep\u00e4rane!<\/p>\n<p>Proovime edasi midagi keerulisemat: Hello, world, kuid n\u00fc\u00fcd on see http-server. Mida huvitavat siin n\u00e4eme?<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/9543af2b6a59fb26bb7baca49d78052c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsiteks, funktsioon k\u00e4itub parameetrina. See t\u00e4hendab, et funktsioon on meil \u2013 \"esmaklassiline kodanik\" ning sellel on funktsionaalses stiilis palju huvitavat teha. J\u00e4rgmisena n\u00e4eme ootamatut: import direktiiv viitab otse GitHubi hoidurile. K\u00f5ik on \u00f5ige, just nii ongi \u2013 veelgi enam, just nii tulekski teha.<\/p>\n<p>Go keeles on paketi universaalne identifikaator selle hoiduri url. On olemas spetsiaalne t\u00f6\u00f6riist Goget, mis l\u00e4heb l\u00e4bi k\u00f5ikidest s\u00f5ltuvustest, alla laadib need, installib, kompileerib ja valmistab need kasutamiseks ette, kui on vajalik. Samuti teab Goget html-meta kohta. Seega, on v\u00f5imalik hoida http-katalooge, kus on lingid konkreetsetele oma hoidurile (nagu n\u00e4iteks meie teeme).<\/p>\n<p>Mida me veel n\u00e4eme? Http ja Json on standardkasutuses. Omandatud on, ilmselt, introspektsioon \u2013 reflection, mida tuleks kasutada encoding\/json'is, kuna me anname sellele lihtsalt mingi suvalise objekti. <\/p>\n<p>K\u00e4ivitame ja n\u00e4eme, et oleme 20 reaga saanud kasuliku koodi, mis kompileerub, k\u00e4ivitub ja annab v\u00e4lja masina praeguse keskmise koormuse (masinal, kus see on k\u00e4ivitunud).<br \/>\nMis on veel oluline, mida me siin kohe n\u00e4eme? See kompileeritakse \u00fcheks staatiliseks binaariks (buinary). Sellel binaaril pole \u00fcldse mingeid s\u00f5ltuvusi, ei ole raamatukogusid! Seda saab kopeerida igasse s\u00fcsteemi, kohe k\u00e4ivitada ja see t\u00f6\u00f6tab.<\/p>\n<p>Liigume edasi.<\/p>\n<h3>Go: meetodid ja liidesed<\/h3>\n<p>\nGo-l on meetodid. Sa saad deklareerida meetodi igasuguse kasutaja t\u00fc\u00fcbi jaoks. Ja see ei pea olema struktuur, vaid v\u00f5ib olla ka m\u00f5ne t\u00fc\u00fcbi alias. Sa saad deklareerida alias'i N32-le ja kirjutada selle jaoks meetodeid, et teha midagi kasulikku.<\/p>\n<p>Ja siin me esmakordselt saame takistuse... Selgub, et Go-l ei ole klasside m\u00f5istet nagu sellist. Need, kes tunnevad Go-d, v\u00f5ivad \u00f6elda, et seal on t\u00fc\u00fcpide kaasamine, kuid see on hoopis midagi muud. Mida varem arendaja l\u00f5petab selle m\u00f5tlemise kui p\u00e4rimisele, seda parem. Go-s klassid puuduvad ja p\u00e4rimist samuti ei ole.<\/p>\n<p>K\u00fcsimus! Mida on autorite ettev\u00f5te Google'i juhatuses meile andnud, et kuvada kogu selle maailma keerukust? Nad andsid meile liidesed!<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/0af8a70e45ec3addca9599b6aea34fc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLiides on spetsiaalne t\u00fc\u00fcp, mis v\u00f5imaldab kirjutada lihtsalt meetodeid ja meetodite signatuure. Iga t\u00fc\u00fcp, mille jaoks need meetodid eksisteerivad (teostatakse), vastab sellele liidesele. See t\u00e4hendab, et saate lihtsalt kirjeldada vastavat funktsiooni \u00fche t\u00fc\u00fcbi jaoks, teise (mis vastab sellele liidese t\u00fc\u00fcbile) jaoks. Seej\u00e4rel deklareerige muutuja selle liidese t\u00fc\u00fcbina ja m\u00e4\u00e4rake sellele \u00fcksk\u00f5ik milline neist objektidest.<\/p>\n<p>Hardcore'i armastajatele v\u00f5in \u00f6elda, et selles muutujas on tegelikult kaks viidatud: \u00fcks andmete, teine spetsiaalse descriptorite tabeli peale, mis on iseloomulik just sellele konkreetsele t\u00fc\u00fcbile, selle liidese t\u00fc\u00fcbile. See t\u00e4hendab, et kompilaator loob sellised descriptorite tabelid linkimise ajal.<\/p>\n<p>Go-s on loomulikult ka void viidatud. S\u00f5na interface {} (kaks kaarvilist sulgu) on muutuja, mis v\u00f5imaldab viidata p\u00f5him\u00f5tteliselt igale objektile.<br \/>\nSiiani on k\u00f5ik korras, k\u00f5ik on harjumusp\u00e4rane. Pole midagi \u00fcllatavat.<\/p>\n<h3>Go: goroutines<\/h3>\n<p>\nN\u00fc\u00fcd j\u00f5uame sinna, mis k\u00f6itis t\u00e4helepanu: kerged protsessid \u2013 goroutines Go terminoloogias.<\/p>\n<p><img decoding=\"async\" alt=\"Aleksei Naidyonov. ITooLabs. Juhtum Go (Golang) telefoniplatvormi arendusest. Osa 1\" src=\"\/wp-content\/uploads\/2020\/03\/18b756a5a2e5b2bbc25c38236db88bb8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ol>\n<li>Esiteks, need on t\u00f5eliselt kerged (alla 2 KB).<\/li>\n<li>Teiseks, nende gorutiinide loomise kulud on t\u00fchised: neid saab luua kuni tuhat sekundis \u2013 midagi ei juhtu.<\/li>\n<li>Nendega tegeleb nende enda ajakava, mis lihtsalt edastab juhtimise \u00fchelt gorutiinilt teisele.<\/li>\n<li>Juhtimine edastatakse j\u00e4rgmistel juhtudel:\n<ul>\n<li>kui kohtub go v\u00e4ljendiga (kui gorutiin k\u00e4ivitab j\u00e4rgmise gorutiini);<\/li>\n<li>kui aktiveeritakse blokeeriv sisendi\/v\u00e4lja kutsumine;<\/li>\n<li>kui algatatakse pr\u00fcgi kogumine;<\/li>\n<li>kui k\u00e4ivitatakse m\u00f5ni operatsioon kanalitega.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\nSee t\u00e4hendab, et iga kord, kui Go programm k\u00e4ivitatakse arvutis, m\u00e4\u00e4rab see s\u00fcsteemi tuumade arvu, k\u00e4ivitab vajalike l\u00f5imede arvu (nii palju tuumasid s\u00fcsteemis v\u00f5i nii palju kui teie selle m\u00e4\u00e4rate). Vastavalt sellele k\u00e4ivitab ajakava k\u00f5ik need kerged t\u00e4itmisvood k\u00f5igis vajalikest operatsioonis\u00fcsteemi l\u00f5imedes igas tuumas.<\/p>\n<p>Oluline on m\u00e4rkida, et see on k\u00f5ige t\u00f5husam viis riistvara k\u00e4itlemiseks. Lisaks sellele pakume me veel palju muud. N\u00e4iteks arendame DPI-s\u00fcsteeme, mis v\u00f5imaldavad \u00fches \u00fchikus hallata 40 gigabitti (s\u00f5ltuvalt, mis toimub nende ridade sees).<\/p>\n<p>Seal kasutasime juba Go eel sama skeemi just sellel p\u00f5hjusel: see aitab s\u00e4ilitada protsessori vahem\u00e4lu lokaalsust ning m\u00e4rgatavalt v\u00e4hendada operatiiv s\u00fcsteemi kontekstit\u00fchjendusi (mis samuti v\u00f5tab palju aega). Kordan: see on k\u00f5ige t\u00f5husam viis riistvara kasutamiseks.<\/p>\n<p>See lihtne 21-realine n\u00e4ide on n\u00e4iteks, mis loob lihtsalt echo-serveri. Pange t\u00e4hele, et funktsioon serve on \u00e4\u00e4rmiselt lihtne ja lineaarne. Seal ei ole \u00fchtegi tagasisidet, mingit vajadust muretseda ja m\u00f5elda... Sa lihtsalt loed ja kirjutad!<\/p>\n<p>Samuti, kui sa loed ja kirjutad, peaks see tegelikult blokeerima \u2013 see gorutiin pannakse lihtsalt ootej\u00e4rjekorda ja selle t\u00f5mbab planeerija v\u00e4lja siis, kui see uuesti t\u00e4itmiseks v\u00f5imalikult muutub. Seega v\u00f5ib see lihtne kood t\u00f6\u00f6tada echo-serverina nii palju \u00fchendusi, kui operatsioonis\u00fcsteem sellel masinal lubab.<\/p>\n<p>Peagi on see tulemas\u2026<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"HoEn7lXNQOU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/HoEn7lXNQOU\/hqdefault.jpg\" alt=\"Vaata videot\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Veidi reklaami \ud83d\ude42<\/h3>\n<p>\nAit\u00e4h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite n\u00e4ha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse v\u00f5i soovitades meid tuttavatele. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">pilve VPS arendajatele alates $4,99<\/a><\/noindex>, <b>ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks v\u00e4lja m\u00f5elnud:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Kogu t\u00f5de VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps alates $19 v\u00f5i kuidas \u00f5ieti serverit jagada?<\/a><\/noindex> (saadaval on RAID1 ja RAID10 variandid, kuni 24 s\u00fcdamikku ja kuni 40GB DDR4).<\/p>\n<p><b>Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis?<\/b> Ainult meie juures <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB alates $199<\/a><\/noindex> Hollandi turul! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 alates $99!<\/b><\/b> Lugege, kuidas <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Luua ettev\u00f5tte tasemel infrastruktuur Dell R730xd E5-2650 v4 serveritega, mille hind on 9000 eurot, madala hinnaga?<\/a><\/noindex><br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/491652\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432, CEO ITooLabs, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Go (Golang). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u0430\u0437\u0438\u0430\u0442\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u0447\u0442\u044b (VoiceMail) \u0438 \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0410\u0422\u0421 (Cloud PBX). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2013 \u0410\u041d): \u2013 \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":73700,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-73699","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432, CEO ITooLabs, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Go (Golang). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u0430\u0437\u0438\u0430\u0442\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u0447\u0442\u044b (VoiceMail) \u0438 \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0410\u0422\u0421 (Cloud PBX). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2013 \u0410\u041d): \u2013 \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/aleksej-najdyonov-itoolabs-kejs-razrabotki-na-go-golang-telefonnoj-platformy-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432. ITooLabs. \u041a\u0435\u0439\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 Go (Golang) \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432, CEO ITooLabs, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Go (Golang). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u0430\u0437\u0438\u0430\u0442\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u0447\u0442\u044b (VoiceMail) \u0438 \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0410\u0422\u0421 (Cloud PBX). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2013 \u0410\u041d): \u2013 \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/aleksej-najdyonov-itoolabs-kejs-razrabotki-na-go-golang-telefonnoj-platformy-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-11T11:42:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-11T11:42:33+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Aleksei Naidj\u00ebnov. ITooLabs. Go (Golang) telefoniplatvormi arendamise juhtum. Osa 1 | ProHoster","description":"Aleksei Naidj\u00ebnov, ITooLabs'i tegevjuht, r\u00e4\u00e4gib telekommunikatsiooniplatvormi arendamisest sideoperaatoritele programmeerimiskeeles Go (Golang). Aleksei jagab ka kogemusi platvormi juurutamisest ja kasutamisest \u00fches suurimas Aasia sideoperaatoris, kes kasutas platvormi h\u00e4\u00e4ls\u00f5numite (VoiceMail) ja virtuaalse PBX (Cloud PBX) teenuste pakkumiseks. Aleksei Naidj\u00ebnov (edaspidi \u2013 AN): \u2013 Tere k\u00f5igile! Mina","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/aleksej-najdyonov-itoolabs-kejs-razrabotki-na-go-golang-telefonnoj-platformy-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432. ITooLabs. \u041a\u0435\u0439\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 Go (Golang) \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432, CEO ITooLabs, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Go (Golang). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0445 \u0430\u0437\u0438\u0430\u0442\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0443\u0441\u043b\u0443\u0433 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u043f\u043e\u0447\u0442\u044b (VoiceMail) \u0438 \u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0410\u0422\u0421 (Cloud PBX). \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041d\u0430\u0439\u0434\u0451\u043d\u043e\u0432 (\u0434\u0430\u043b\u0435\u0435 \u2013 \u0410\u041d): \u2013 \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/aleksej-najdyonov-itoolabs-kejs-razrabotki-na-go-golang-telefonnoj-platformy-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-11T11:42:33+00:00","article:modified_time":"2020-03-11T11:42:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"73699","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:28:29","updated":"2022-09-29 09:08:44"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/73699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=73699"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/73699\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/73700"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=73699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=73699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=73699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}