Rumah > pembangunan bahagian belakang > Golang > Dua folder dalam sistem fail sebagai folder maya dalam laluan alamat tapak (pelayan web dalam Go)

Dua folder dalam sistem fail sebagai folder maya dalam laluan alamat tapak (pelayan web dalam Go)

WBOY
Lepaskan: 2024-02-15 08:50:09
ke hadapan
1299 orang telah melayarinya

文件系统中的两个文件夹作为站点地址(Go 中的 Web 服务器)路径中的一个虚拟文件夹

Editor PHP Youzi menyebut dua folder dalam sistem fail sebagai sebahagian daripada alamat tapak apabila memperkenalkan folder maya dalam laluan pelayan web. Dalam bahasa Go, konsep folder maya ini digunakan secara meluas dalam tetapan laluan pelayan web. Dengan memasukkan kedua-dua folder ini sebagai sebahagian daripada alamat tapak, pengurusan laluan fail dan kawalan akses yang lebih fleksibel boleh dicapai. Corak reka bentuk ini bukan sahaja memudahkan penyusunan fail tapak, tetapi juga menyediakan keselamatan dan kebolehselenggaraan yang lebih baik. Melalui konsep folder maya, pembangun boleh mengurus dan mengawal sumber tapak dengan lebih mudah.

Kandungan soalan

Terdapat dua folder "files1" dan "files2" dalam sistem fail saya.

Saya boleh mengehoskan folder dalam sistem fail sebagai folder maya dalam laluan alamat tapak seperti ini:

http.Handle("/public/", http.StripPrefix("/public/", http.FileServer(http.Dir("./files1"))))
Salin selepas log masuk

Bagaimana untuk mengehoskan kandungan folder "files1" dan "files2" pada laluan yang sama dengan alamat tapak "/public/"?

Penyelesaian

Penyelesaian mudah ialah melaksanakan antara muka http.filesystem.

Ini demonya:

package main

import (
    "errors"
    "io/fs"
    "net/http"
)

func main() {
    http.handle("/public/", http.stripprefix("/public/", http.fileserver(mergeddir{
        dir1: "./files1",
        dir2: "./files2",
    })))

    http.listenandserve(":8080", nil)
}

type mergeddir struct {
    dir1 http.dir // dir1 will be tried first so it has higher priority.
    dir2 http.dir
}

func (d mergeddir) open(name string) (http.file, error) {
    f, err := d.dir1.open(name)

    if err != nil {
        if errors.is(err, fs.errnotexist) {
            return d.dir2.open(name)
        }
    }

    return f, err
}
Salin selepas log masuk

Saya telah menguji dengan struktur direktori ini:

├── files1
│   ├── f1-1.txt
│   └── f1-sub
│       └── f1-s.txt
└── files2
    ├── f1-1.txt
    ├── f2-1.txt
    └── f2-sub
        └── f2-s.txt
Salin selepas log masuk

Ada dua dalam f1-1.txt,由于先尝试files1,所以服务的是files1.

Kemas kini:

Seperti yang diminta oleh pengarang, versi lain mergeddir menyokong berbilang direktori:

type mergedDir struct {
    Dirs []http.Dir
}

func (d mergedDir) Open(name string) (http.File, error) {
    for _, dir := range d.Dirs {
        f, err := dir.Open(name)
        if err == nil {
            return f, nil
        }
        if !errors.Is(err, fs.ErrNotExist) {
            return f, err
        }
    }

    return nil, fs.ErrNotExist
}
Salin selepas log masuk

Atas ialah kandungan terperinci Dua folder dalam sistem fail sebagai folder maya dalam laluan alamat tapak (pelayan web dalam Go). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan