目錄
問題內容
解決方法
首頁 後端開發 Golang 無法讓 Golang 函式庫向控制器傳回除 nil 之外的任何內容

無法讓 Golang 函式庫向控制器傳回除 nil 之外的任何內容

Feb 11, 2024 pm 03:45 PM
golang開發

无法让 Golang 库向控制器返回除 nil 之外的任何内容

php小編百草為您介紹問題:Golang函式庫無法向控制器傳回nil以外的任何內容的解決方法。在Golang開發中,控制器是處理請求的關鍵元件,但有時可能遇到無法傳回nil以外的內容的問題。這可能會導致某些功能無法正常運作。幸運的是,我們可以採取一些解決方案來解決這個問題,確保庫能夠返回所需的內容。在本文中,我們將探討幾種常見的解決方法,幫助您解決這個問題。

問題內容

這裡是 golang 小孩,所以我想我錯過了一些明顯的東西。經過幾天的嘗試後,我決定尋求一些幫助。 :-)

我發布的程式碼正在運行,除了用戶要求創建新的客戶端證書/密鑰包(這是 openvpn 伺服器管理 webui)且同名客戶端已存在的情況之外。即使在這種情況下,也不會建立新的用戶端包,但會顯示錯誤的警報訊息,表示已建立新的用戶端包。

我知道我需要重新設計控制器以根據名稱是否存在來顯示不同的警報橫幅。然而,我一直堅持從圖書館取回「nil」以外的任何東西。

golang控制器程式碼如下:

func (c *certificatescontroller) post() {
    c.tplname = "certificates.html"
    flash := beego.newflash()

    cparams := newcertparams{}
    if err := c.parseform(&cparams); err != nil {
        beego.error(err)
        flash.error(err.error())
        flash.store(&c.controller)
    } else {
        if vmap := validatecertparams(cparams); vmap != nil {
            c.data["validation"] = vmap
        } else {
            if err := lib.createcertificate(cparams.name, cparams.passphrase); err != nil {
                beego.error(err)
                flash.error(err.error())
                flash.store(&c.controller)
            } else {
                fmt.println(err)
                flash.success("certificate for the name \"" + cparams.name + "\" created")
                flash.store(&c.controller)
            }
        }
    }
    c.showcerts()
}
登入後複製

以及透過lib.createcertificate呼叫的函式庫函數:

func CreateCertificate(name string, passphrase string) error {
    rsaPath := models.GlobalCfg.OVConfigPath + "easy-rsa"
    rsaIndex := models.GlobalCfg.OVConfigPath + "easy-rsa/pki/index.txt"
    pass := false
    if passphrase != "" {
        pass = true
    }
    certs, err := ReadCerts(rsaIndex)
    if err != nil {
        //      beego.Debug(string(output))
        beego.Error(err)
        //      return err
    }
    Dump(certs)
    exists := false
    for _, v := range certs {
        if v.Details.Name == name {
            exists = true
        }
    }
    if !exists && !pass {
        cmd := exec.Command("/bin/bash", "-c",
            fmt.Sprintf(
                "%s/easyrsa --batch build-client-full %s nopass",
                rsaPath, name))
        cmd.Dir = models.GlobalCfg.OVConfigPath
        output, err := cmd.CombinedOutput()
        if err != nil {
            beego.Debug(string(output))
            beego.Error(err)
            return err
        }
        return nil
    }
    if !exists && pass {
        cmd := exec.Command("/bin/bash", "-c",
            fmt.Sprintf(
                "%s/easyrsa --passout=pass:%s build-client-full %s",
                rsaPath, passphrase, name))
        cmd.Dir = models.GlobalCfg.OVConfigPath
        output, err := cmd.CombinedOutput()
        if err != nil {
            beego.Debug(string(output))
            beego.Error(err)
            return err
        }
        return nil
    }
    if exists {
        return err
    }
    return err
}
登入後複製

我已經將庫中的每個返回更改為 err,並在控制器的第二個“else”語句中插入 fmt.println(err),但我得到的只是 nil。

解決方法

所以,我能夠弄清楚如何處理這個問題。再用谷歌搜尋一下,我發現了一篇至少與我想要實現的目標相鄰的貼文。最後,我只需要在我的憑證庫中新增/更改 3 行。我需要導入“errors”庫,以newerror :=errors.new("error! there is already a valid or invalidcertificate for that name") 的形式添加自定義錯誤,並僅更改最後一個返回return newerror 。我確實學到了一兩點關於 go 如何處理錯誤的知識!

以下是憑證庫的更新程式碼:

func CreateCertificate(name string, passphrase string) error {
    rsaPath := models.GlobalCfg.OVConfigPath + "easy-rsa"
    rsaIndex := models.GlobalCfg.OVConfigPath + "easy-rsa/pki/index.txt"
    pass := false
    newError := errors.New("Error! There is already a valid or invalid certificate for that name")
    if passphrase != "" {
        pass = true
    }
    certs, err := ReadCerts(rsaIndex)
    if err != nil {
        //      beego.Debug(string(output))
        beego.Error(err)
        //      return err
    }
    Dump(certs)
    exists := false
    for _, v := range certs {
        if v.Details.Name == name {
            exists = true
        }
    }
    if !exists && !pass {
        cmd := exec.Command("/bin/bash", "-c",
            fmt.Sprintf(
                "%s/easyrsa --batch build-client-full %s nopass",
                rsaPath, name))
        cmd.Dir = models.GlobalCfg.OVConfigPath
        output, err := cmd.CombinedOutput()
        if err != nil {
            beego.Debug(string(output))
            beego.Error(err)
            return err
        }
        return nil
    }
    if !exists && pass {
        cmd := exec.Command("/bin/bash", "-c",
            fmt.Sprintf(
                "%s/easyrsa --passout=pass:%s build-client-full %s",
                rsaPath, passphrase, name))
        cmd.Dir = models.GlobalCfg.OVConfigPath
        output, err := cmd.CombinedOutput()
        if err != nil {
            beego.Debug(string(output))
            beego.Error(err)
            return err
        }
        return nil
    }
    return newError
}
登入後複製

現在,如果我嘗試新增名稱已存在的 openvpn 用戶端:

以上是無法讓 Golang 函式庫向控制器傳回除 nil 之外的任何內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

利用Golang開發功能強大的桌面應用 利用Golang開發功能強大的桌面應用 Mar 19, 2024 pm 05:45 PM

利用Golang開發功能強大的桌面應用隨著網路的不斷發展,人們已經離不開各種類型的桌面應用程式。而對於開發人員來說,如何利用高效率的程式語言來開發功能強大的桌面應用至關重要。本文將介紹如何利用Golang(Go語言)來開發功能強大的桌面應用,並提供一些具體的程式碼範例。 Golang是一種由Google開發的開源程式語言,它具有簡潔、高效、並發性強等特點,非常適

Golang開發的安全性挑戰:如何避免被利用用於病毒製作? Golang開發的安全性挑戰:如何避免被利用用於病毒製作? Mar 19, 2024 pm 12:39 PM

Golang開發的安全性挑戰:如何避免被利用用於病毒製作?隨著Golang在程式設計領域的廣泛應用,越來越多的開發者選擇使用Golang來開發各種類型的應用程式。然而,與其他程式語言一樣,Golang開發中也存在著安全性挑戰。特別是,Golang的強大功能和靈活性也使其成為潛在的病毒製作工具。本文將深入探討Golang開發中的安全性問題,並提供一些方法來避免G

在Mac上使用Golang程式設計的步驟與技巧 在Mac上使用Golang程式設計的步驟與技巧 Mar 03, 2024 am 08:30 AM

標題:在Mac上使用Golang程式設計的步驟與技巧在當前軟體開發領域,Golang(也被稱為Go)作為一種高效、簡潔、並發性強的程式語言,受到越來越多開發者的關注和使用。在Mac平台上進行Golang編程,可以藉助一些工具和技巧,提高開發效率。本文將介紹Mac上使用Golang程式設計的步驟與技巧,並提供具體程式碼範例,幫助讀者更好地理解和應用。步驟1:安裝Gol

Golang對區塊鏈發展的影響及作用探究 Golang對區塊鏈發展的影響及作用探究 Feb 26, 2024 pm 04:24 PM

Golang(簡稱Go語言)作為一種程式語言在近年來逐漸在區塊鏈領域嶄露頭角,其高效的並發處理能力和簡潔的語法特點使其成為了區塊鏈開發中備受青睞的一種選擇。本文將探討Golang如何協助區塊鏈發展,並透過具體的程式碼範例展示其在區塊鏈應用中的優越性。一、Golang在區塊鏈領域的優勢高效的並發處理能力:區塊鏈系統中的節點需要同時處理大量的事務和數據,而Gola

Golang開發者常用的程式語言有哪些 Golang開發者常用的程式語言有哪些 Mar 18, 2024 pm 09:06 PM

Golang是一種由Google開發的開源程式語言,被廣泛應用於後端服務開發、雲端運算、網路程式設計等領域。作為一種靜態類型語言,Golang具有高效的並發模型和強大的標準庫,因此備受開發者青睞。然而,在實際開發中,Golang開發者通常需要結合其他程式語言來進行專案開發,以滿足不同場景的需求。 PythonPython是一種物件導向的程式語言,以其簡潔明了、易於學

Go kit框架助力Golang API效能提升 Go kit框架助力Golang API效能提升 May 07, 2024 pm 03:24 PM

Gokit是一個Golang微服務框架,透過最佳化、可擴充、可維護和測試友善功能,提升API效能。它提供一系列工具和模式,使用戶能夠快速建立高效能和可維護的API。在實際生產中,它被廣泛應用於Netflix、Spotify和Uber等大型平台的API構建,處理著大量的請求。

利用Golang開發手遊的優勢與劣勢 利用Golang開發手遊的優勢與劣勢 Mar 05, 2024 pm 03:51 PM

利用Golang開發手遊的優勢與劣勢隨著行動裝置的普及與效能的不斷提升,手遊市場越來越火爆,吸引越來越多的開發者投身其中。在選擇開發語言時,Golang作為一種快速、有效率且易於學習的語言,吸引不少開發者的注意。本文將從利用Golang開發手遊的優勢與劣勢兩個面向進行探討,並透過具體的程式碼範例來說明。優勢:跨平台性強:Golang可以編譯為不同平台的二元

Golang替換空格的實用技術分享 Golang替換空格的實用技術分享 Mar 13, 2024 am 09:15 AM

標題:Golang替換空格的實用技術分享隨著互聯網的普及和發展,程式設計和開發變得愈發重要。在程式設計過程中,資料處理是一個非常關鍵的部分。處理文字資料時,常常會遇到需要替換空格的情況,本文將分享如何在Golang中實現替換空格的技術,並提供具體的程式碼範例。為什麼需要替換空格?空格是文字資料中常見的特殊字元之一,有時候我們需要將空格替換成其他字符,或是去除掉空格

See all articles