」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何簡化 Go 中的結構驗證:慣用方法與「go-validator」?

如何簡化 Go 中的結構驗證:慣用方法與「go-validator」?

發佈於2024-11-09
瀏覽:311

How to Simplify Struct Validation in Go: Idiomatic Approach vs. \

在 Go 中驗證結構體

驗證結構體值的有效性是軟體開發中的關鍵任務。當處理大量小結構時,單獨檢查每個欄位可能會很麻煩。讓我們探討一下驗證結構的慣用方法和替代解決方案。

慣用驗證

提供的範例是驗證結構的常見方法。使用結構體的方法單獨檢查每個欄位。然而,隨著字段或結構體數量的增加,這種方法變得乏味。

替代解決方案

Go社區開發了各種包來簡化驗證過程。其中一個包是流行的“go-validator”(https://github.com/go-validator/validator)。

使用此包,您可以使用結構中的標籤為每個欄位定義驗證規則定義。然後,驗證器會根據定義的規則自動檢查值。

範例

考慮以下具有驗證規則的結構:

import "github.com/go-validator/validator"

type Event struct {
    Id     int    `validator:"min=1"`
    UserId int    `validator:"min=1"`
    Start  string `validator:"datetime"`
    End    string `validator:"datetime"`

考慮以下具有驗證規則的結構:How to Simplify Struct Validation in Go: Idiomatic Approach vs. \

import " github.com/go-validator/validator” 類型事件結構體{ Id int `驗證器:"min=1"` UserId int `驗證器:"min=1"` 開始字串 `validator:"datetime"` 結束字串 `validator:"datetime"`

最新教學 更多>
  • 如何在 PHP 中存取名稱中帶有空格的類別屬性?
    如何在 PHP 中存取名稱中帶有空格的類別屬性?
    在PHP 中存取帶有空格的屬性在PHP 中,存取名稱中帶有空格的類別屬性可能具有挑戰性。考慮一個具有「Sector」和「Date Found」屬性的 stdClass 物件。雖然您可以使用 $object->Sector 存取“Sector”,但如何檢索“Date Found”的值? 要存取名稱中包...
    程式設計 發佈於2024-11-09
  • Flex 專案是區塊級還是 Flex 級?深入研究 CSS 佈局
    Flex 專案是區塊級還是 Flex 級?深入研究 CSS 佈局
    Flex 專案令人困惑的本質:區塊級還是 Flex 等級? Flex 專案是否是區塊級的問題一直是CSS 開發者之間的爭論。 CSS 靈活框佈局模組等級 1 規定 Flex 項目位於 Flex 級別,而不是區塊級別。然而,後面的部分顯示彈性項目的顯示值是「塊化」的。這就提出了一個問題:Flex 專案...
    程式設計 發佈於2024-11-09
  • JavaScript 如何控制逾時執行並確定剩餘時間?
    JavaScript 如何控制逾時執行並確定剩餘時間?
    JavaScript 中的暫停和恢復逾時使用 JavaScript 時,可能需要控制非同步操作的流程,例如逾時。在這裡,我們探索暫停和恢復活動逾時的方法,以及檢索當前逾時的剩餘時間。 暫停和恢復逾時要暫停逾時,您可以使用包裝器攔截 window.setTimeout 呼叫並提供必要功能的函數。包裝函...
    程式設計 發佈於2024-11-09
  • 為什麼非同步載入腳本中 document.write() 受到限制?
    為什麼非同步載入腳本中 document.write() 受到限制?
    非同步載入腳本中的執行限制:了解document.write() 限制嘗試從非同步載入的腳本寫入文件會引發控制台訊息「無法在'文件'上執行'寫入':無法從非同步載入的外部腳本,除非明確開啟它。」儘管腳本的行為符合預期,但仍可能出現此訊息,讓開發人員感到困惑。 為什麼有...
    程式設計 發佈於2024-11-09
  • 如何根據元素的高度保持元素的縱橫比?
    如何根據元素的高度保持元素的縱橫比?
    根據高度維護 Div 縱橫比將元素的寬度保持為其高度的百分比可能具有挑戰性。雖然使用 padding-top 的百分比值可以達到相反的效果,但 padding-left 作為百分比依賴於物件的寬度,而不是其高度。 為了解決這個問題,CSS 引入了寬高比屬性,提供一個優雅的解決方案來根據高度保持一致的...
    程式設計 發佈於2024-11-09
  • 如何使用 PHP 或 Perl 在瀏覽器中直接顯示 PDF 檔案?
    如何使用 PHP 或 Perl 在瀏覽器中直接顯示 PDF 檔案?
    使用PHP 或Perl 在瀏覽器中顯示PDF 檔案直接在瀏覽器中顯示PDF 檔案可能是追蹤使用者參與度和追蹤用戶參與度的有用技術。保護敏感文件位置。雖然有下載或建立 PDF 的簡單方法,但如何載入現有 PDF 檔案進行檢視還不是很明顯。 PHP 解決方案:以下 PHP 程式碼可以是用於在瀏覽器中顯示...
    程式設計 發佈於2024-11-09
  • 為什麼curl_exec()回傳False以及如何有效處理它?
    為什麼curl_exec()回傳False以及如何有效處理它?
    當curl_exec()返回False時:深入研究錯誤處理領域在Web開發的世界中,curl_exec()函數在從遠端伺服器檢索資料方面起著至關重要的作用。然而,程式設計師經常遇到一個令人費解的情況,即該函數始終傳回 false。為了解開這個謎團,我們必須踏上錯誤檢查和處理的核心之旅。 當curl_...
    程式設計 發佈於2024-11-09
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-09
  • 如何消除 Bootstrap 堆疊行中的間隙:綜合指南
    如何消除 Bootstrap 堆疊行中的間隙:綜合指南
    Bootstrap 堆疊行中的間隙:綜合解決方案Bootstrap 堆疊行中存在間隙對於開發人員來說可能是一個令人沮喪的問題。為了解決這個問題,有幾種有效的解決方案可用。 1。設定元素高度標準化:為所有投資組合元素分配固定高度可確保內容的平均分佈。這消除了不同元素尺寸導致間隙的可能性。 2。使用 M...
    程式設計 發佈於2024-11-09
  • 為什麼使用“shell_exec”從 PHP 調用時我的 Bash 腳本無法執行?
    為什麼使用“shell_exec”從 PHP 調用時我的 Bash 腳本無法執行?
    從PHP 執行Bash 指令:腳本執行失敗故障排除在這個問題中,我們遇到一位PHP 開發人員嘗試使用shell_exec 從PHP 執行bash 腳本。使用的語法為:$output = shell_exec("./script.sh var1 var2");但是,當呼叫指令時腳本...
    程式設計 發佈於2024-11-09
  • 為什麼按鈕不拉伸以用“display: block”和“width: auto”填充容器?
    為什麼按鈕不拉伸以用“display: block”和“width: auto”填充容器?
    為什麼「display: block」和「width: auto」不能拉伸按鈕來填滿容器? 當使用“display: block”和“ width: auto” 在按鈕上,它可能會拉伸並填充其容器。然而,情況並非總是如此。特別是,現代瀏覽器中的按鈕在這方面的行為與其他區塊元素不同。 這種行為背後的原...
    程式設計 發佈於2024-11-09
  • 在 Docker 容器上設定 Redmine
    在 Docker 容器上設定 Redmine
    Redmine 是一個靈活的開源專案管理和問題追蹤 Web 應用程式。它廣泛用於管理專案、追蹤錯誤以及處理任務和截止日期。 Redmine 使用 Ruby on Rails 開發,具有高度可自訂性,支援廣泛的團隊協作和專案組織功能。 Redmine 因其靈活性、客製化和開源特性而成為商業專案管理工...
    程式設計 發佈於2024-11-09
  • 哪種 HTML5 Reset CSS 提供最全面的覆蓋範圍?
    哪種 HTML5 Reset CSS 提供最全面的覆蓋範圍?
    哪種 HTML5 Reset CSS 提供廣泛的覆蓋範圍? 大量的瀏覽器版本為網頁設計帶來了挑戰,需要使用重置CSS 確保跨平台的樣式一致。然而,鑑於可用選項過多,選擇正確的重設 CSS 可能會令人畏懼。 html5reset.org 擁有全面的覆蓋範圍,不僅包括重置填充和邊距,還包括解決圖像的潛在...
    程式設計 發佈於2024-11-09
  • 棘手的 Golang 面試問題 - 部分數據競賽
    棘手的 Golang 面試問題 - 部分數據競賽
    Here is another code review interview question for you. This question is more advanced than the previous ones and is targeted toward a more senior aud...
    程式設計 發佈於2024-11-09
  • 如何在 Python 中按列值對散佈圖進行顏色編碼?
    如何在 Python 中按列值對散佈圖進行顏色編碼?
    Python 中按列值對散點圖進行顏色編碼在資料視覺化中,為不同類別分配顏色可以增強清晰度並揭示模式。此功能在 R 的 ggplot2 中很容易使用,但是我們如何使用 pandas 和 matplotlib 在 Python 中實現相同的功能? 更新:Seaborn 增強功能Since 原始答案,S...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3