Go курсының қырық үшінші сабағы. Оқырман қойындыны жапты — өңдеуші мұны өзі біледі: екі жүз миллисекундтан кейін жұмысты тастайтыны өлшенді. Дерекқорға берілген мерзім, жолдың орнына өз типіндегі кілт және кірген адамның сұраныс контекстіне уәде етілген көшуі.
Go курсының қырық екінші сабағы. Сервер HTTP сабағынан бері конкурентті, әрі мұны сіз таңдаған жоқсыз: әр сұраныс — өз горутинасы. Құлыпсыз санауыш алдымен бес жүзден бір оқылымды жоғалтатыны, сосын бүкіл серверді құлататыны және go test -race мұны алдын ала табатыны өлшенді.
Go курсының қырық бірінші сабағы. 10-сабақта уәде етілген кесте: жағдайлар тізімге салынады, t.Run әрқайсысына ат береді, ал құлау қай жағдай сынғанын бірден айтады. Оның үстіне өңдеушіні сервер көтермей тексеру және -cover не көрсететіні туралы адал әңгіме.
Go курсының қырқыншы сабағы. Ішінде файл жүретін форма және файл дискіге жатпай тұрып тексерілетін төрт нәрсе: өлшемі, мазмұны бойынша түрі, жіберілгеннің орнына өз аты және оны қоятын орын. Қоса /static-ты ретке келтіреміз: brand, css, images, js, uploads.
Go курсының отыз тоғызыншы сабағы. Бетіңіздегі бөтен скрипт және оқырманыңыздың атынан форма жіберетін бөтен сайт. html/template-тің орнына қарай — мәтінде, сілтемеде және script ішінде — қалай экрандайтыны және жетонның сіздің формаңызды бөтеннен қалай ажырататыны өлшенді.
Go курсының отыз сегізінші сабағы. Батырманы жасыру — қорғаныс емес: бөтен адам батырманы көрмей тұрып, тікелей сұраныспен мақалаңызды қалай түзететіні өлшенді. Тексеру өңдеушіде әрі бір жерде тұрады, ал бас тартулар әртүрлі: қонақты кіруге, бөтенге 403, жоғына 404.
Go курсының отыз жетінші сабағы. HTTP ештеңе есте сақтамайды: әр сұраныс бейтаныс адамнан келеді. Пайдаланушы нөмірі жазылған cookie бір секундта қолдан жасалады. Сондықтан браузерге кездейсоқ токен, дерекқорға оның хеші кетеді, ал бәрін үш сөз жабады: HttpOnly, Secure, SameSite.
Go курсының отыз алтыншы сабағы. Құпиясөз дерекқорда сақталмайды — тұзы ішінде, құны сыртында тұрған bcrypt хеші сақталады. Өлшенді: sha256 секундына тоғыз миллион хеш береді, bcrypt оны. Оның үстіне 72 байт шегі, оған қазақ құпиясөзі отыз жетінші әріпте-ақ тіреледі.
Go курсының отыз бесінші сабағы. Блогтың жеті үлгісі беттің бір басталуының жеті көшірмесін ұстап отыр. Бүгін бір жақтау қалады: блоктары бар base, pages пен partials қалталары, семантикалық белгілеу — әрі өлшенген тұзақ, соның кесірінен адамдарда барлық бет кенет біреуін көрсетеді.
Go курсының отыз төртінші сабағы. Блогта жұмыс істейтін іздеу: FTS5 виртуалды кестесі, үш триггер, реттеу және табылғанды бояу. Әрі өлшенген тосын жайт: параметр инъекциядан қорғайды, бірақ адам іздеу жолағына OR деп терсе — қорғамайды.
Go курсының отыз үшінші сабағы. Мақалада тег көп, тегте мақала көп — әрі бұл бағандағы тізім емес, бөлек кесте болып сақталады. Құрама кілт, id үшін on conflict, өшіргендегі каскад. Әрі уәде етілген нәрсе: қатенің мәтінін оқымай, кодын сұрау жолы.
Go курсының отыз екінші сабағы. Дерекқорды бүтін ұстайтын екі ереже. Дерек сұраныс мәтініне жабыстырылмайды: қолдан жасалған мекенжай бір емес, үш жол қайтарады, ал параметр арқылы — нөл. Бірге болуға тиіс нәрсе транзакцияға оралады: онсыз санауыш болмаған көшу үшін өсіп кеткен.
Go курсының отыз бірінші сабағы. Схеманы енді бағдарлама қосылғанда жасамайды: нөмірленген көші-қон файлдары, журнал және «бір рет» ережесі пайда болады. Оның үстіне өлшенген тұзақ: default-сыз not null бағанын бос дерекқор қабылдайды, жұмыстағысы қабылдамайды.
Go курсының отызыншы сабағы. Мақалалар тілімнен дерекқорға көшеді әрі қайта қосудан аман қалады. Дерекқорды қалған кодтан жасыратын Store типі, мақала үстіндегі төрт әрекет және бөлімге тұрарлық бір нәрсе: жоқ нәрсені жаңарту — қате емес, оны тек RowsAffected айтады.
Go курсының жиырма сегізінші сабағы. Мақалаға пікірлер келеді, ал олар оның ішіне сыймайды. Екінші кесте және олардың арасындағы кілт, join мен left join, каскадты өшіру және сыртқы кілттерді үнсіз қалдырып, жолдарды жетім ететін SQLite тұзағы.
Go курсының жиырма жетінші сабағы. Мақалалар ақыры қайта қосудан аман қалады. Курста неге Postgres емес, SQLite, кестені қалай жасап, оған жолды қалай салу керек: RETURNING-пен insert, WHERE мен ORDER BY-мен select, WHERE ұмытылған update және = null мен is null айырмасы.
Go курсының жиырма тоғызыншы сабағы. Блог ақыры мақалаларды дерекқор файлынан оқиды. Пакет пен драйвер, sql.Open неге ештеңе ашпайды, қосылымдар пулы деген не және сыртқы кілттер туралы прагманы неге бөлек сұраныс емес, қосылу жолына жазады. Сонымен қатар ErrNoRows және циклден кейінгі тексеру.
Go курсының жиырма алтыншы сабағы. Мекенжай, дерекқор файлы және қолтаңба кілті кодтан кетеді. flag пакеті мен -h беретін анықтама, орта айнымалысын флагтың әдепкі мәні ету, бос айнымалының берілмегеннен несімен өзгешелігі және міндетті баптау болмаса неге іске қосылғанда құлау керек.