搜尋
首頁後端開發Golang為什麼我們為 Golang 黑客馬拉鬆建立迷你語言

又是黑客馬拉松?

到目前為止,我已經參加了9 場黑客馬拉松,其中一場是國際比賽,甚至在4 場比賽中獲勝。話又說回來,當我的學弟 Dhruv 和 Tushar 告訴我關於 Golang Specific 的黑客馬拉松時,我把 Harsh 也拉了過來,因為為什麼不呢。不只是 Harsh,我還拉了我們 Point Blank 團隊的 40 個人一起參加,這最終讓黑客馬拉松變成了我們自己的內部競賽,哈哈。

我們團隊中的所有人GoGoingGone(lmao)都有使用 Golang 的良好經驗,但我們想做的不僅僅是建立另一個工具。我們想要創新。就在那時,這個想法突然出現—讓我們建立一個迷你語言來定義動態、可設定的資料管道。

介紹

我是 Akash Singh,來自班加羅爾的三年級工程專業學生和開源貢獻者。
這是我的 LinkedIn、GitHub 和 Twitter

Why we Built a Mini-Language for a Golang Hackathon

我在網路上的名字是SkySingh04。

介紹分形

Fractal 最初是一種資料處理工具,用於從遺留系統(例如 SQL 資料庫和 CSV 檔案)無縫遷移到現代平台,例如 MongoDBAWS S3。但我們想要的不僅僅是另一個 ETL 工具。我們的想法是使其高度靈活且用戶友好,允許用戶使用簡單的聲明性語法(一種迷你語言)定義驗證轉換規則在工具內。

為什麼是迷你語言?

我們觀察到資料管道空間中的大多數工具都依賴嚴格的配置或自訂腳本。這種方法通常需要大量的程式設計專業知識,這限制了非開發人員的可訪問性。聲明性迷你語言提供:

  1. 簡單性:使用者以直覺、人類可讀的格式定義規則。
  2. 靈活性:它適應廣泛的用例,從基本驗證到複雜轉換。
  3. 可擴充性:迷你語言可以隨著新需求的出現而發展。

這種迷你語言不是要重新發明輪子,而是要提供一個抽象來簡化資料轉換和驗證。

當這與簡單的 yaml 檔案配置相結合時,我們認為我們已經達到了目標,即創建一個易於配置的資料管道,可以大規模地將資料從一個來源處理到另一個來源。

Why we Built a Mini-Language for a Golang Hackathon

核心:驗證和轉換語法

我們將文法設計得簡單而富有表現力,並專注於兩個主要操作:

  1. 驗證規則 這些確保傳入的資料在進一步處理之前滿足特定的品質標準。例如:
  1. 轉換規則 這些可以實現資料豐富或重組。例如:

這種抽象允許使用者以最少的努力處理不同的資料集,從而提高生產力並降低複雜性。

在弄清楚如何製作這種語言的詞法分析器和解析器的過程中,GoFr.dev 的團隊帶我們上樓參加了一次減壓課程,其中充滿了深夜的 sharayis 和即興演奏!

在黑客馬拉鬆上建立分形

黑客馬拉松不只是為了創造迷你語言。我們也必須建造周圍的基礎設施,確保分形:

  1. 可擴充:支援多種輸入/輸出格式,如 JSON、CSV、SQL 資料庫和訊息佇列。
  2. 可設定:基於 YAML 的配置,用於定義管道工作流程,無縫整合迷你語言。
  3. 魯棒:使用 LOG_AND_CONTINUE 或 STOP 等選項優雅地處理錯誤。

我們將工作分為四個模組:

  • 迷你語言實作:設計詞法分析器和解析器來解釋自訂語法。
  • 資料整合:新增對常見資料來源和目標的支援。
  • 管線引擎:編排驗證、轉換與錯誤處理。
  • CLI 介面:提供定義和運行管道的簡單介面。

我們面臨的挑戰

  1. 設計語法 在簡單性和靈活性之間取得平衡是一個挑戰。我們迭代了多次來最終確定語法。
  2. 建構解析器 在 Golang 中實作自訂詞法分析器和解析器非常耗時,但回報豐厚。
  3. 即時回饋 確保迷你語言提供有意義的錯誤訊息來引導使用者對於可用性至關重要。
  4. 時間限制 在黑客馬拉松中建立如此規模的工具需要精確的規劃和無縫的協調。

之後發生了什麼事?

儘管我們在 GO for GOFR 黑客馬拉松中表現出色,但我們在最終評估過程中面臨嚴峻的挑戰。除了我們錄製的演示之外,評審還要求進行現場演示,不幸的是,我們在現場運行期間遇到了解析器邏輯中的意外錯誤。考慮到在短短24 小時內建立強大的自訂解析器的複雜性,這是一項雄心勃勃的開發功能,雖然我們錄製的演示展示了其功能,但在時間限制下實現100% 的準確性被證明是困難的。這個小問題最終讓我們失去了最高獎項。然而,我們的努力仍然受到高度評價,我們團隊的清晰願景和引人注目的交付為我們贏得了「最佳推介」的榮譽,凸顯了我們的潛力和獨創性。

那麼黑客馬拉松是吧?

黑客馬拉松通常是關於突破界限和探索未知領域。 Fractal 是我們重新定義資料處理工具運作方式的嘗試——讓它們變得可存取、模組化且對開發人員友好。

我找不到比這更志同道合的人與我一起工作了,毫無疑問,他們是絕對最好、最勤奮的隊友。期待是什麼讓我參加下一次黑客馬拉松,我敢說,基於 RUST 的黑客馬拉松嗎? xD

查看 GitHub 上的 Fractal

Why we Built a Mini-Language for a Golang Hackathon 天空辛格04 / 分形

靈活、可設定的資料處理工具

分形

Fractal 是一個靈活的、可配置的資料處理工具,使用 GoFrGolang 建構。 Fractal 旨在處理來自多個來源的資料攝取,應用強大的轉換和驗證,並將輸出傳遞到廣泛的目的地。借助 Fractal,您可以自動化複雜的資料工作流程,而無需管理低階細節 以下是在專案中設定新整合的文件:

驗證和轉換規則的自訂語法文件

1。概述

自訂語法使用戶能夠:

  1. 驗證傳入資料以確保其符合預定義條件。
  2. 轉換資料欄位以適應所需的格式、結構或要求。
  3. 為資料處理管道定義靈活的錯誤處理策略。

可以為任何資料來源或目的地撰寫規則,例如JSONYAMLCSVSQL 資料庫訊息代理,或雲端服務


2。驗證規則

驗證規則確保資料符合特定的品質和完整性要求。

在 GitHub 上查看



推廣材料:Drive Link

或自己嘗試一下,讓我們知道您的想法!

Why we Built a Mini-Language for a Golang Hackathon

以上是為什麼我們為 Golang 黑客馬拉鬆建立迷你語言的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
實施靜音和鎖以尋求線程安全性實施靜音和鎖以尋求線程安全性May 05, 2025 am 12:18 AM

在Go中,使用互斥鎖和鎖是確保線程安全的關鍵。 1)使用sync.Mutex進行互斥訪問,2)使用sync.RWMutex處理讀寫操作,3)使用原子操作進行性能優化。掌握這些工具及其使用技巧對於編寫高效、可靠的並發程序至關重要。

基準測試和分析並發GO代碼基準測試和分析並發GO代碼May 05, 2025 am 12:18 AM

如何優化並發Go代碼的性能?使用Go的內置工具如gotest、gobench和pprof進行基準測試和性能分析。 1)使用testing包編寫基準測試,評估並發函數的執行速度。 2)通過pprof工具進行性能分析,識別程序中的瓶頸。 3)調整垃圾收集設置以減少其對性能的影響。 4)優化通道操作和限制goroutine數量以提高效率。通過持續的基準測試和性能分析,可以有效提升並發Go代碼的性能。

並發程序中的錯誤處理:避免常見的陷阱並發程序中的錯誤處理:避免常見的陷阱May 05, 2025 am 12:17 AM

避免並發Go程序中錯誤處理的常見陷阱的方法包括:1.確保錯誤傳播,2.處理超時,3.聚合錯誤,4.使用上下文管理,5.錯誤包裝,6.日誌記錄,7.測試。這些策略有助於有效處理並發環境中的錯誤。

隱式接口實現:鴨打字的力量隱式接口實現:鴨打字的力量May 05, 2025 am 12:14 AM

IndimitInterfaceImplementationingingoembodiesducktybybyallowingTypestoSatoSatiSatiSatiSatiSatiSatsatSatiSatplicesWithouTexpliclIctDeclaration.1)itpromotesflemotesflexibility andmodularitybybyfocusingion.2)挑戰挑戰InclocteSincludeUpdatingMethodSignateSignatiSantTrackingImplections.3)工具li

進行錯誤處理:最佳實踐和模式進行錯誤處理:最佳實踐和模式May 04, 2025 am 12:19 AM

在Go編程中,有效管理錯誤的方法包括:1)使用錯誤值而非異常,2)採用錯誤包裝技術,3)定義自定義錯誤類型,4)復用錯誤值以提高性能,5)謹慎使用panic和recover,6)確保錯誤消息清晰且一致,7)記錄錯誤處理策略,8)將錯誤視為一等公民,9)使用錯誤通道處理異步錯誤。這些做法和模式有助於編寫更健壯、可維護和高效的代碼。

您如何在GO中實施並發?您如何在GO中實施並發?May 04, 2025 am 12:13 AM

在Go中實現並發可以通過使用goroutines和channels來實現。 1)使用goroutines來並行執行任務,如示例中同時享受音樂和觀察朋友。 2)通過channels在goroutines之間安全傳遞數據,如生產者和消費者模式。 3)避免過度使用goroutines和死鎖,合理設計系統以優化並發程序。

在GO中構建並發數據結構在GO中構建並發數據結構May 04, 2025 am 12:09 AM

Gooffersmultipleapproachesforbuildingconcurrentdatastructures,includingmutexes,channels,andatomicoperations.1)Mutexesprovidesimplethreadsafetybutcancauseperformancebottlenecks.2)Channelsofferscalabilitybutmayblockiffullorempty.3)Atomicoperationsareef

將GO的錯誤處理與其他編程語言進行比較將GO的錯誤處理與其他編程語言進行比較May 04, 2025 am 12:09 AM

go'serrorhandlingisexplicit,治療eRROSASRETRATERTHANEXCEPTIONS,與pythonandjava.1)go'sapphifeensuresererrawaresserrorawarenessbutcanleadtoverbosecode.2)pythonandjavauseexeexceptionseforforforforforcleanerCodebutmaymobisserrors.3)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),