sigchanyzer: statikus analizátor jelenteni a nem csomagolt jelcsatornák használatát a jelzéshez. Tájékoztatás arról, hogy melyek veszíthetnek jeleket

(Cuong Manh Le) (2020. december 1.)

TL; DR: Statikus analizátort fejlesztettünk ki „ sigchanyzer ”, amelyek jelenteni fogják, hogy a nem pufferelt csatornák jelbe kerülnek. Értesítsen: jó forgatókönyv hibaként figyelmeztetett, ami a jel nem adását okozhatja. Ezt a bérletet a Go projektnek adományozzuk, és minden egyes Go fejlesztő go vet vagy go test automatikusan bekapcsolja

elveszett jel 🙁

Motiváció

Annak érdekében, hogy programjai reagáljanak a felhasználói bemenetekre és a rendszer, akkor valószínűleg azt szeretné, ha programjai képesek lennének kezelni a UNIX jeleket, például:

  • A HTTP-kiszolgáló kecses leállítása a SIGTERM fogadásakor
  • A parancssori futtatható leáll további bevitel feldolgozása a SIGINT fogadásakor
  • Minden adatbázis-kapcsolat bezárása a takarítás és leállítás előtt

A Go jelet ad. Értesítsen a jelek ilyen továbbításának elvégzéséhez, például:

jelben. Értesítsen példát

Probléma a végrehajtás elmulasztása miatt:

Bár meglehetősen egyszerű használni, könnyű neked is lábba lőni. A jel dokumentumai. Értesítsen kifejezetten:

jel. Értesítés

Amint az a fenti godoc-ban és az előző példában is látható, a jelcsatornát pufferolni kell a program megfelelő működéséhez. Minden rendben, de sajnos a Go szokásos könyvtári eszközeinek nincsenek végrehajtási lehetőségei annak megakadályozására, hogy a felhasználók ezt a hibát betöltsék 🙁 Még egy probléma is felmerülhet ez a check to go vet.

Még a Go szabványos könyvtár kódjában is megtalálható ez a hiba: = (2 fontos helyen, a CL 274332

További vizsgálat

Már volt bizonyítéka a hiba gyakori előfordulására, de mivel kapcsolatban voltunk a SourceGraph barátainkkal egy nem kapcsolódó kódkeresésről és néhány ötletről, kaptunk néhányat útmutatás a SourceGraph használatával történő interakcióról és keresésről, és ezt a lekérdezést futtattuk a konzoljukon, a Github 100 legnépszerűbb Go tárházát keresve a make(chan os.Signal)

repogroup:go-gh-100
not file:test
not file:Godeps
not file:vendormake(chan os.Signal)
t keresése a Github

sigchanyzer tetejére keresse a 100 legmagasabb szintű tárhelyet…

Ezt a statikus analizátort „sigchanyzer” -et belsőleg építettük az Orijtech, Inc.-nél, és amikor a külvilágban futtattuk, riasztottunk, hogy mennyire gyakori ez a hiba, így ez nekünk adott további lendület a nyílt forráskódú adományozáshoz és a Go projekt adományozásához.

Használat:

Fontolja meg ezt a hibás programot:

hibajel értesítő program

Futtassa rajta a sigchanyzer t:

sigchanyzer futtatás

Eddig nagyon jó, a sigchanyzer hibát jelent a sorban 11 , amely a signal.Notify.

sigchanyzer hívása, szintén megoldhatja a problémát az Ön számára:

sigchanyzer kijavította!

És a programod most már biztonságos és jól működik.

A sigchanyzer segítségével tudtunk szállítani egy csomó javítás néhány adattárhoz:

Ezenkívül ezt a Go projektnek is felajánljuk, és t CL-be tettünk hogy ezt a jelszót hozzáadja az tools / go / analysis / pass fájlhoz, és végül minden olyan go felhasználó, amely go vet vagy go test fut, képes használni és kijavítani a kódot.

Következtetés

A Go programozási nyelvet úgy tervezték, hogy könnyen írható, könnyen olvasható, könnyen karbantartható legyen, és amennyire csak lehetséges, minimalizálja a programozó erőfeszítéseit. Az Orijtech, Inc.-nél a Go-t a mindennapi munkánk során alkalmazzuk, és arra összpontosítunk, hogy javítsuk a Go-fejlesztők által írt Go-kód minőségét, és segítsünk nekünk biztonságosabb, karbantarthatóbb Go-kódot biztosítani.

Ezt megszerezheti passzol ma futással:

get github.com/orijtech/sigchanyzer/cmd/sigchanyzer

Kérjük, ossza meg barátaival, adjon visszajelzést, jelentse a hibákat és élvezze!

Köszönjük, hogy elolvastad eddig.

Üdvözlettel:

Cuong Manh Le , Emmanuel T Odeke

Mérnöki Osztály @ Orijtech, Inc.