golang介面認證,golang 介面類型

本文目錄一覽:

組件分享之後端組件——一款基於Golang的認證全套模塊Casdoor

近期正在探索前端、後端、系統端各類常用組件與工具,對其一些常見的組件進行再次整理一下,形成標準化組件專題,後續該專題將包含各類語言中的一些常用組件。歡迎大家進行持續關注。

如果你正在進行編寫一個項目,但是缺少一個認證模塊,這時就可以使用本節中分享的組件 casdoor 了,它支持OAuth 2.0、OIDC 和 SAML 的 UI 優先集中式身份驗證/單點登錄 (SSO) 平台,與 Casbin RBAC 和 ABAC 許可權管理集成。能讓我們的系統快速集成一套完整的認證體系,同時它支持第三方應用程序登錄,包括國內國外常見的平台,具體可查看 官方 描述,這裡就不具體說明了。

以下是官方說明的一些特點:

這個認證模塊是基於Golang語言,OAuth2協議基礎上提供相關功能的,不熟悉OAuth2協議的先去了解一下,防止使用過程中難於理解。

golang base64 斜杠 等號 問題

寫一個介面認證的時候,密碼需要通過SHA1+HMAC加密以後轉base64,發現加密的結果不符合預期

shell裡面通過命令生成的字元串 golang生產的結果有差別

具體的說,shell 生產的base64傳裡面有’/’,對應golang生產的是’_’,例如下面案例

Golang入門到項目實戰 | golang介面和類型的關係

一個類型實現多個介面,例如:有一個Player介面可以播放音樂,有一個Video介面可以播放視頻,一個手機Mobile實現這兩個介面,既可以播放音樂,又可以播放視頻。

定義一個Player介面

定義一個Video介面

定義Mobile介面體

實現兩個介面

測試

運行結果

比如,一個寵物介面Pet,貓類型Cat和狗類型Dog都可以實現該介面,都可以把貓和狗當寵物類型對待,這在其他語言中叫多態。

定義一個Pet介面

定義一個Dog結構體

定義一個Cat結構體

實現介面

測試

運行結果

Golang入門到項目實戰 | golang介面

介面像是一個公司裡面的領導,他會定義一些通用規範,只設計規範,而不實現規範。

go語言的介面,是一種新的類型定義,它把所有的具有共性的方法定義在一起,任何其他類型只要實現了這些方法就是實現了這個介面。

語法格式和方法非常類似。

在介面定義中定義,若干個空方法。這些方法都具有通用性。

下面我定義一個USB介面,有讀read和寫write兩個方法,再定義一個電腦Computer和一個手機Mobile來實現這個介面。

USB介面

Computer結構體

Mobile結構體

Computer實現USB介面方法

Mobile實現USB介面方法

測試

運行結果

下面我們定義一個OpenClose介面,裡面有兩個方法open和close,定義個Door結構體,實現其中一個方法。

java怎麼調用golang的介面

1 介面的定義與理解

介面是一個自定義類型,它是一組方法的集合。從定義上來看,介面有兩個特點。第一,介面本質是一種自定義類型,因此不要將golang中的介面簡單理解為C++/Java中的介面,後者僅用於聲明方法簽名。第二,介面是一種特殊的自定義類型,其中沒有數據成員,只有方法(也可以為空)。

介面是完全抽象的,因此不能將其實例化。然而,可以創建一個其類型為介面的變數,它可以被賦值為任何滿足該介面類型的實際類型的值。介面的重要特性是:

(1)只要某個類型實現了介面要的方法,那麼我們就說該類型實現了此介面。該類型的值可以賦給該介面的值;

(2)作為1的推論,任何類型的值都可以賦值給空介面interface{}

注意:這只是golang中介面的特性,為非所有類型的特性(介面是一種特殊的類型)。

介面的特性是golang支持鴨子類型的基礎,即「如果它走起來像鴨子,叫起來像鴨子(實現了介面要的方法),它就是一隻鴨子(可以被賦值給介面的值)」。憑藉介面機制和鴨子類型,golang提供了一種有利於類、繼承、模板之外的更加靈活強大的選擇。

2 例子

type Exchanger interface {

exchange()

}

type StringPair struct {

first, second string

}

type Point[2]int

func (sp *StringPair) exchange() {

sp.first, sp.second = sp.second, sp.first

}

func (p *Point) exchange() {

p[0], p[1] = p[1], p[0]

}

func exchangeThese(exchangers …Exchanger) {

for _, exchanger := range exchangers {

exchanger.exchange()

}

}

func main() {

pair1 := StringPair{“abc”,”def”}

pair2 := StringPair{“ghi”,”jkl”}

point := Point{5, 7}

fmt.Println(pair1, pair2, point)

pair1.exchange()

pair2.exchange()

point.exchange()

fmt.Println(pair1, pair2, point)

// exchangeThese(pair1, pair2) //wrong

exchangeThese(pair1, pair2)

fmt.Println(pair1, pair2)

}

運行結果

在本例中,自定義類型StringPair和Point指針實現了介面Exchanger所需的方法,因此該類型的值可以被賦值給介面的值。

另外,特別注意一點。如果使用exchangeThese(pair1,

pair2)會導致編譯錯誤(如下圖),正確寫法應當是exchangeThese(pair1,

pair2)。這是由於真正滿足介面Exchanger的類型是StringPair指針,而非StringPair。

在golang中,值接收者和指針接收者的方法集是不同的。只是golang會智能地解引用和取引用,使得二者的方法集看上去是一樣的。但是,在調用exchangeThese時,就凸顯出二者的不同了。

golang 介面有什麼作用

介面是協議,方法是實現。介面是虛的,方法是實的。介面是為了通信需要,方法是實現需要。介面是抽象的,方法是具體的。介面有隔離作用,方法是高耦合。介面是插頭插座,方法是膠布扭線。在大型軟體工程中,為了實現高內聚低耦合高復用,防止出現麵條式程序相互干擾,用介面隔離開實現,更容易劃分模塊和多人開發,有了介面很容易實現各種設計模式,介面就像電線的插座一樣,只要介面不變很容易連通各種東西,減少了開發量,提高了通用性。沒有通用性需求時,不要濫用介面,介面會增加程序的複雜度和性能成本。

原創文章,作者:ZKHW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/145686.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZKHW的頭像ZKHW
上一篇 2024-10-27 23:52
下一篇 2024-10-27 23:52

相關推薦

  • 使用Golang調用Python

    在現代軟體開發中,多種編程語言的協作是相當普遍的。其中一種使用場景是Golang調用Python,這使得在使用Python庫的同時,可以利用Golang的高性能和強大並發能力。這篇…

    編程 2025-04-29
  • Java 監控介面返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控介面返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Golang創建黑色背景圖片的方法

    本文將從多個方面介紹使用Golang創建黑色背景圖片的方法。 一、安裝必要的代碼庫和工具 在開始創建黑色背景圖片之前,我們需要先安裝必要的代碼庫和工具: go get -u git…

    編程 2025-04-29
  • Python介面自動化測試

    本文將從如下多個方面對Python編寫介面自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 介面自動化測試是軟體測試中的一種自動化測試方式。通…

    編程 2025-04-27
  • Jadoor門鎖開發介面接入指南

    本文將從多個方面詳細介紹如何將門鎖接入Jadoor平台的開發介面,方便開發者們快速實現門鎖遠程控制、開鎖記錄查看等功能。 一、Jadoor門鎖開發介面簡介 Jadoor是一款用於密…

    編程 2025-04-27
  • 後端介面設計開發經驗分享

    在受到前端某些限制或特殊需求時,後端介面的設計和開發顯得尤為重要。下面從以下幾個方面進行講述。 一、命名規範 合理的命名規範可以大大提高介面的可讀性和可維護性。以下是一些命名規範的…

    編程 2025-04-27
  • 期貨數據介面 Python:打通數字資產交易數據的關鍵

    本文將從以下幾個方面討論期貨數據介面 Python: 一、數據介面簡介 期貨數據介面是指為期貨從業人員提供用於獲取歷史、實時及未來交易數據的工具。Python是一種常用的編程語言,…

    編程 2025-04-27
  • 如何快速發布http介面

    想要快速發布http介面,可以從以下幾個方面入手。 一、選擇合適的框架 選擇合適的框架對於快速發布http介面非常重要。目前比較受歡迎的框架有Flask、Django、Tornad…

    編程 2025-04-27
  • Javaweb 介面返回數據的定義與實現

    本文將介紹 javaweb 如何定義介面返回數據,並提供相應的代碼示例。 一、介面返回數據的定義 在 javaweb 開發中,我們經常需要通過介面返回數據。介面返回的數據格式通常是…

    編程 2025-04-27
  • Postman介面自動化

    一、安裝和使用Postman Postman是一個強大的API測試工具,可以使用它來測試各種類型的API請求和響應。在進行介面自動化測試之前,首先需要安裝和使用Postman。以下…

    編程 2025-04-25

發表回復

登錄後才能評論