Rumah pembangunan bahagian belakang Golang Pembinaan cakera rangkaian Golang

Pembinaan cakera rangkaian Golang

May 15, 2023 am 10:59 AM

Dengan perkembangan Internet, permintaan untuk cakera rangkaian semakin meningkat Walau bagaimanapun, produk cakera rangkaian di pasaran sering diadu tentang kebocoran privasi dan isu-isu lain Oleh itu, membina cakera rangkaian anda sendiri telah menjadi trend . Artikel ini akan memperkenalkan cara menggunakan golang untuk membina cakera rangkaian mudah.

1. Persediaan persekitaran

Menggunakan golang untuk membina cakera rangkaian memerlukan keupayaan pengaturcaraan tertentu dan penyediaan persekitaran berikut:

1.1 Alat yang diperlukan

  • go >= 1.8
  • godep
  • git

1.2 Perpustakaan tanggungan

  • golang.org/x/crypto: In sebagai tambahan kepada pakej penyulitan terbina dalam bahasa Go, ia menyediakan sokongan algoritma penyulitan yang lebih selamat, termasuk SHA256/384/512, RC4, DES, AES, dsb.
  • github.com/gin-gonic/gin: Rangka kerja HTTP berprestasi tinggi yang boleh digunakan untuk menulis aplikasi web ringkas dengan cepat, serta aplikasi yang lebih kompleks.
  • github.com/go-xorm/core: Rangka kerja ORM ringan untuk operasi CRUD pada pangkalan data.
  • github.com/go-xorm/xorm: Versi yang dipertingkatkan berdasarkan pakej teras, yang menyediakan penjanaan SQL yang dipermudahkan, transaksi, caching dan akses kepada berbilang sumber data, dsb., sesuai untuk akses data dalam projek semua lapisan saiz.

2. Seni bina projek

Hujung belakang cakera rangkaian ialah sistem pengurusan fail yang membaca fail ke dalam memori dan menyediakan perkhidmatan akses melalui pelayan HTTP / Halaman CSS/JS membolehkan interaktiviti. Semasa proses pembangunan, kami mengikuti corak reka bentuk MVC dengan ketat dan memisahkan tiga peringkat Model, Paparan dan Pengawal.

2.1 Lapisan model

Lapisan Model bertanggungjawab terutamanya untuk akses data, mengekstrak data daripada storan data asas, dan kemudian memberikannya kepada lapisan Pengawal untuk pemprosesan perniagaan. Dalam sistem kami, operasi CURD dilakukan terutamanya pada fail. Kami menggunakan rangka kerja ORM xorm untuk mengabstrak data asas dan menyediakan API yang lebih mudah dan jelas.

Model data ditakrifkan menggunakan struktur bahasa Go, seperti berikut:

type User struct {
    Id int64
    Username string `xorm:"unique"`
    Password string
}
Salin selepas log masuk

2.2 Lapisan Lihat

Lapisan Paparan sepadan dengan lapisan Persembahan dalam aplikasi Web dan terutamanya bertanggungjawab untuk menukar lapisan kawalan Data yang dikembalikan akan diberikan kepada antara muka program, dan data permintaan yang dihantar oleh antara muka akan dihantar ke lapisan kawalan untuk diproses. Dalam sistem kami, lapisan Paparan bertanggungjawab terutamanya untuk mengendalikan dok halaman hujung hadapan.

Kami menggunakan rangka kerja Gin untuk menulis kod lapisan Lihat. Pertama, kita perlu menyediakan pengurusan penghalaan Apabila kita memasukkan URL tertentu, fungsi pemprosesan yang sepadan akan dipanggil secara automatik untuk diproses. Dalam rangka kerja Gin, ini sangat mudah untuk dilaksanakan:

router := gin.Default()
router.GET("/files", handlers.ListFiles)
router.PUT("/files/:name", handlers.AddFile)
router.POST("/files/:name", handlers.UpdateFile)
router.DELETE("/files/:name", handlers.DeleteFile)
router.Run(":8020")
Salin selepas log masuk

2.3 Lapisan Pengawal

Lapisan Pengawal bertanggungjawab untuk memproses permintaan, mendapatkan data ke lapisan Lihat dan akhirnya mengembalikan hasil pemprosesan . Dalam sistem kami, lapisan Pengawal bertanggungjawab terutamanya untuk memproses logik perniagaan.

Semasa pemprosesan, kita mesti terlebih dahulu menentukan sama ada pengguna telah log masuk. Jika tidak, lompat ke halaman log masuk, jika tidak, lompat ke senarai fail. Begitu juga, apabila pengguna meminta fail, kita perlu menyemak dahulu sama ada fail itu wujud Jika ia tidak wujud, kembalikan halaman ralat 404.

3. Operasi fail

3.1 Muat naik fail

Sebelum memuat naik fail, kami mesti melakukan pemeriksaan jenis pada fail terlebih dahulu. Untuk mengelakkan jenis fail daripada diganggu dengan menganalisis paket HTTP, kami mengesyorkan anda melakukan pemeriksaan jenis pada bahagian hadapan. Kami menggunakan objek FileReader JavaScript untuk membaca fail yang dimuat naik dan menyekat permintaan AJAX.

Apabila pengguna memilih untuk memuat naik fail, kami akan mula membaca fail secara tidak segerak Selepas bacaan selesai, fail akan dimuat naik ke pelayan dalam mod binari. Selepas muat naik berjaya, maklumat fail disimpan dalam pangkalan data untuk pengurusan mudah.

3.2 Muat Turun Fail

Apabila meminta untuk memuat turun fail, kami menggunakan perkhidmatan HTTP untuk memulangkan terus fail tersebut kepada penyemak imbas dalam bentuk strim. Pada masa yang sama, kami menggunakan fungsi http.ServeContent untuk memindahkan fail dan memastikan pemindahan fail adalah betul dan boleh dikawal sepenuhnya.

func (h Pengendali) Muat TurunFail(c gin.Konteks) {

fileName := c.Param("name")
filePath := h.filePath(fileName)
if _, err := os.Stat(filePath); os.IsNotExist(err) {
    c.String(http.StatusNotFound, "file not exist")
    return
}
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fileName))
c.Writer.Header().Add("Content-Type", getContentType(fileName))
http.ServeFile(c.Writer, c.Request, filePath)
Salin selepas log masuk

}

3.3 Pemadaman Fail

Pemadaman Fail Ia adalah operasi yang agak mudah. Pertama, kita perlu menyemak sama ada fail itu wujud dan mengembalikan mesej ralat jika ia tidak wujud. Kemudian kita perlu memadam maklumat fail dari pangkalan data dan akhirnya memadam fail dari cakera.

func (h Pengendali) DeleteFail(c gin.Context) {

fileName := c.Param("name")
filePath := h.filePath(fileName)
if _, err := os.Stat(filePath); os.IsNotExist(err) {
    c.String(http.StatusNotFound, "file not exist")
    return
}
session := h.engine.NewSession()
defer session.Close()
if err := session.Begin(); err != nil {
    log.Printf("begin transaction failed: %s", err.Error())
    c.String(http.StatusInternalServerError, err.Error())
    return

}
if _, err := session.Delete(&File{FileName: fileName}); err != nil {
    session.Rollback()
    c.String(http.StatusInternalServerError, err.Error())
    return
}
if err := session.Commit(); err != nil {
    c.String(http.StatusInternalServerError, err.Error())
    return
}
if err := os.Remove(filePath); err != nil {
    c.String(http.StatusInternalServerError, err.Error())
    return
}
c.Header("Access-Control-Allow-Origin", "*")

c.String(http.StatusOK, "file delete success")
Salin selepas log masuk

}

4 Untuk meningkatkan keselamatan sistem cakera rangkaian, kita harus mematuhi dasar keselamatan berikut dengan ketat semasa proses pembangunan:

4.1 Kawalan Kebenaran

Hanya pengguna yang dibenarkan sahaja dibenarkan menggunakan pelbagai fungsi sistem, dan pengguna lain tidak boleh mengakses dan mengubah suai data.

4.2 Penyulitan Data

Semua maklumat sensitif harus disulitkan untuk mengelakkan insiden keselamatan seperti kecurian dan pengubahan maklumat semasa penghantaran dan penyimpanan.

4.3 Mencegah Serangan Rangkaian

Sistem perlu menggunakan langkah pencegahan yang berkesan untuk mengelakkan serangan daripada rangkaian, termasuk tetapi tidak terhad kepada tembok api, perisian anti-virus, dsb.

5

Melalui artikel ini, kami mempelajari cara menggunakan golang untuk membina sistem cakera rangkaian yang mudah. Semasa proses pembangunan, kami mengikut ketat corak reka bentuk MVC dan modul yang dipisahkan untuk meningkatkan kualiti dan kebolehselenggaraan. Di samping itu, kami telah mempertimbangkan keselamatan sistem dengan ketat, mengelakkan beberapa isu keselamatan biasa, dan meningkatkan kebolehpercayaan dan keselamatan sistem cakera rangkaian. Kami percaya bahawa bagi mereka yang baru memulakan pengaturcaraan dalam golang, artikel ini dapat membantu mereka memahami dengan lebih baik senario aplikasi golang dan segera memulakan pembangunan projek.

Atas ialah kandungan terperinci Pembinaan cakera rangkaian Golang. 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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Kaedah Pemantauan PostgreSQL di bawah Debian Kaedah Pemantauan PostgreSQL di bawah Debian Apr 02, 2025 am 07:27 AM

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Bagaimana cara menentukan pangkalan data yang berkaitan dengan model dalam beego orm? Bagaimana cara menentukan pangkalan data yang berkaitan dengan model dalam beego orm? Apr 02, 2025 pm 03:54 PM

Di bawah rangka kerja beegoorm, bagaimana untuk menentukan pangkalan data yang berkaitan dengan model? Banyak projek beego memerlukan pelbagai pangkalan data untuk dikendalikan secara serentak. Semasa menggunakan beego ...

See all articles