Jadual Kandungan
Isi soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Tidak boleh mendapatkan pustaka Golang untuk mengembalikan apa-apa selain nil kepada pengawal

Tidak boleh mendapatkan pustaka Golang untuk mengembalikan apa-apa selain nil kepada pengawal

Feb 11, 2024 pm 03:45 PM
pembangunan golang

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

editor php Baicao memperkenalkan anda kepada masalah: perpustakaan Golang tidak boleh mengembalikan apa-apa kecuali tiada kepada pengawal. Dalam pembangunan Golang, pengawal ialah komponen utama dalam mengendalikan permintaan, tetapi kadangkala anda mungkin menghadapi masalah tidak dapat mengembalikan kandungan selain daripada tiada. Ini boleh menyebabkan beberapa ciri tidak berfungsi dengan betul. Nasib baik, terdapat beberapa penyelesaian yang boleh kami ambil untuk menyelesaikan masalah ini dan memastikan perpustakaan mengembalikan apa yang diperlukannya. Dalam artikel ini, kami akan meneroka beberapa penyelesaian biasa untuk membantu anda menyelesaikan isu ini.

Isi soalan

Saya budak golang di sini, jadi saya rasa saya kehilangan sesuatu yang jelas. Selepas beberapa hari mencuba, saya memutuskan untuk mendapatkan bantuan. :-)

Kod yang saya siarkan berfungsi kecuali dalam kes di mana pengguna meminta penciptaan sijil/beg kunci pelanggan baharu (ini ialah webui pengurusan pelayan openvpn) dan pelanggan dengan nama yang sama sudah wujud. Walaupun dalam kes ini, pakej pelanggan baharu tidak dibuat, tetapi mesej amaran yang salah dipaparkan yang menunjukkan bahawa pakej pelanggan baharu telah dibuat.

Saya tahu saya perlu mereka bentuk semula pengawal untuk menunjukkan sepanduk amaran yang berbeza bergantung pada sama ada nama itu wujud atau tidak. Walau bagaimanapun, saya telah terjebak untuk mendapatkan apa-apa selain daripada "tiada" dari perpustakaan.

Kod pengawal golang adalah seperti berikut:

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()
}
Salin selepas log masuk

Dan fungsi perpustakaan dipanggil melalui 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
}
Salin selepas log masuk

Saya telah menukar setiap pemulangan dalam perpustakaan kepada ralat dan memasukkan fmt.println(err) dalam pernyataan "lain" kedua pengawal, tetapi yang saya dapat hanyalah sifar.

Penyelesaian

Jadi, saya dapat memikirkan cara untuk menangani masalah ini. Sedikit lagi Googling dan saya menemui siaran yang sekurang-kurangnya bersebelahan dengan perkara yang saya cuba capai. Akhirnya, saya hanya perlu menambah/menukar 3 baris di kedai sijil saya. Saya perlu mengimport perpustakaan "ralat" ke newerror :=errors.new("error! there is already a valid or invalidcertificate for that name") 的形式添加自定义错误,并仅更改最后一个返回 return newerror . Saya memang belajar satu atau dua perkara tentang cara go menangani ralat!

Berikut ialah kod yang dikemas kini untuk kedai sijil:

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
}
Salin selepas log masuk

Sekarang jika saya cuba menambah klien openvpn dengan nama yang sudah ada:

Atas ialah kandungan terperinci Tidak boleh mendapatkan pustaka Golang untuk mengembalikan apa-apa selain nil kepada pengawal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cabaran keselamatan dalam pembangunan Golang: Bagaimana untuk mengelak daripada dieksploitasi untuk penciptaan virus? Cabaran keselamatan dalam pembangunan Golang: Bagaimana untuk mengelak daripada dieksploitasi untuk penciptaan virus? Mar 19, 2024 pm 12:39 PM

Cabaran keselamatan dalam pembangunan Golang: Bagaimana untuk mengelak daripada dieksploitasi untuk penciptaan virus? Dengan aplikasi Golang yang luas dalam bidang pengaturcaraan, semakin ramai pembangun memilih untuk menggunakan Golang untuk membangunkan pelbagai jenis aplikasi. Walau bagaimanapun, seperti bahasa pengaturcaraan lain, terdapat cabaran keselamatan dalam pembangunan Golang. Khususnya, kuasa dan fleksibiliti Golang juga menjadikannya alat penciptaan virus yang berpotensi. Artikel ini akan membincangkan isu keselamatan dalam pembangunan Golang dan menyediakan beberapa kaedah untuk mengelakkan G

Bangunkan aplikasi desktop yang berkuasa dengan Golang Bangunkan aplikasi desktop yang berkuasa dengan Golang Mar 19, 2024 pm 05:45 PM

Gunakan Golang untuk membangunkan aplikasi desktop yang berkuasa Dengan pembangunan Internet yang berterusan, orang ramai menjadi tidak dapat dipisahkan daripada pelbagai jenis aplikasi desktop. Bagi pembangun, adalah penting untuk menggunakan bahasa pengaturcaraan yang cekap untuk membangunkan aplikasi desktop yang berkuasa. Artikel ini akan memperkenalkan cara menggunakan Golang (bahasa Go) untuk membangunkan aplikasi desktop yang berkuasa dan menyediakan beberapa contoh kod khusus. Golang ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Ia mempunyai ciri-ciri kesederhanaan, kecekapan, konkurensi yang kuat, dsb., dan sangat sesuai untuk

Langkah dan petua untuk pengaturcaraan dengan Golang pada Mac Langkah dan petua untuk pengaturcaraan dengan Golang pada Mac Mar 03, 2024 am 08:30 AM

Tajuk: Langkah dan teknik untuk menggunakan pengaturcaraan Golang pada Mac Dalam bidang pembangunan perisian semasa, Golang (juga dikenali sebagai Go), sebagai bahasa pengaturcaraan yang cekap, ringkas dan sangat bersesuaian, telah menarik perhatian lebih ramai pembangun . Apabila memprogramkan Golang pada platform Mac, anda boleh menggunakan beberapa alat dan teknik untuk meningkatkan kecekapan pembangunan. Artikel ini akan memperkenalkan langkah dan teknik menggunakan pengaturcaraan Golang pada Mac dan menyediakan contoh kod khusus untuk membantu pembaca memahami dan menggunakan dengan lebih baik. Langkah 1: Pasang Gol

Apakah bahasa pengaturcaraan yang biasa digunakan oleh pembangun Golang? Apakah bahasa pengaturcaraan yang biasa digunakan oleh pembangun Golang? Mar 18, 2024 pm 09:06 PM

Golang ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google dan digunakan secara meluas dalam pembangunan perkhidmatan bahagian belakang, pengkomputeran awan, pengaturcaraan rangkaian dan bidang lain. Sebagai bahasa yang ditaip secara statik, Golang mempunyai model konkurensi yang cekap dan perpustakaan standard yang berkuasa, jadi ia digemari oleh pembangun. Walau bagaimanapun, dalam pembangunan sebenar, pemaju Golang biasanya perlu menggabungkan bahasa pengaturcaraan lain untuk pembangunan projek untuk memenuhi keperluan senario yang berbeza. PythonPython ialah bahasa pengaturcaraan berorientasikan objek yang ringkas, jelas dan mudah dipelajari.

Rangka kerja kit Go membantu meningkatkan prestasi API Golang Rangka kerja kit Go membantu meningkatkan prestasi API Golang May 07, 2024 pm 03:24 PM

Gokit ialah rangka kerja mikro perkhidmatan Golang yang meningkatkan prestasi API melalui ciri yang dioptimumkan, berskala, boleh diselenggara dan mesra ujian. Ia menyediakan pelbagai alat dan corak yang membolehkan pengguna membina API yang berprestasi dan boleh diselenggara dengan cepat. Dalam pengeluaran sebenar, ia digunakan secara meluas dalam pembinaan API platform besar seperti Netflix, Spotify dan Uber, mengendalikan permintaan besar-besaran.

Penyelidikan tentang kesan dan peranan Golang terhadap pembangunan rantaian blok Penyelidikan tentang kesan dan peranan Golang terhadap pembangunan rantaian blok Feb 26, 2024 pm 04:24 PM

Golang (pendek kata bahasa Go) sebagai bahasa pengaturcaraan telah muncul secara beransur-ansur dalam bidang blockchain sejak beberapa tahun kebelakangan ini, keupayaan pemprosesan serentak yang cekap dan ciri sintaks yang ringkas menjadikannya pilihan yang digemari dalam pembangunan blok. Artikel ini akan meneroka bagaimana Golang membantu pembangunan blockchain dan menunjukkan keunggulannya dalam aplikasi blockchain melalui contoh kod tertentu. 1. Kelebihan Golang dalam bidang blockchain: Keupayaan pemprosesan serentak yang cekap: Nod dalam sistem blockchain perlu memproses sejumlah besar transaksi dan data pada masa yang sama, dan Gola

Kelebihan dan Kelemahan Menggunakan Golang untuk Membangunkan Permainan Mudah Alih Kelebihan dan Kelemahan Menggunakan Golang untuk Membangunkan Permainan Mudah Alih Mar 05, 2024 pm 03:51 PM

Kelebihan dan Kelemahan Menggunakan Golang untuk Membangunkan Permainan Mudah Alih Dengan populariti peranti mudah alih dan peningkatan berterusan prestasi mereka, pasaran permainan mudah alih menjadi semakin popular, menarik lebih ramai pembangun untuk menyertainya. Apabila memilih bahasa pembangunan, Golang, sebagai bahasa yang pantas, cekap dan mudah dipelajari, menarik perhatian ramai pembangun. Artikel ini akan membincangkan kelebihan dan kekurangan menggunakan Golang untuk membangunkan permainan mudah alih, dan menggambarkannya melalui contoh kod khusus. Kelebihan: Cross-platform yang kuat: Golang boleh disusun menjadi binari untuk platform yang berbeza

Analisis kemungkinan menggunakan Golang untuk membangunkan projek U3D Analisis kemungkinan menggunakan Golang untuk membangunkan projek U3D Mar 20, 2024 pm 02:30 PM

Tajuk: Analisis Kebolehlaksanaan Menggunakan Golang untuk Membangunkan Projek U3D Dengan pembangunan berterusan industri pembangunan permainan, Unity3D (pendek kata U3D), sebagai enjin permainan yang digunakan secara meluas, menyediakan alat dan sokongan yang berkuasa kepada pembangun. Dalam aplikasi sebenar, pembangun juga berminat untuk menggunakan bahasa pengaturcaraan lain untuk membangunkan projek U3D. Artikel ini akan menganalisis kebolehlaksanaan menggunakan Golang untuk membangunkan projek U3D dan menyediakan beberapa contoh kod khusus. 1. Gabungan Golang dan U3D Go

See all articles