Большинство шлюзов (маршрутизатор) имеют параметр VirtualServer, который вы можете указать на локальный сервер (192.168.0.50)
. Вы можете использовать что-то вроде dyndns.org для установки постоянного имени хоста на ваш сервер. то есть mylocalserver.dyndns.org
Вы можете попробовать использовать функцию ReadDir в пакете io/ioutil
. В документах:
ReadDir считывает каталог с именем dirname и возвращает список отсортированных записей в каталоге.
blockquote>Получаемый фрагмент содержит
os.FileInfo
типы, которые предоставляют методы, перечисленные здесь здесь . Вот базовый пример, в котором перечислены все имена в текущем каталоге (папки включены, но не специально отмечены - вы можете проверить, является ли элемент папкой с помощью методаIsDir()
):package main import ( "fmt" "io/ioutil" "log" ) func main() { files, err := ioutil.ReadDir("./") if err != nil { log.Fatal(err) } for _, f := range files { fmt.Println(f.Name()) } }
Еще проще, используйте path/filepath
:
package main
import (
"fmt"
"log"
"path/filepath"
)
func main() {
files, err := filepath.Glob("*")
if err != nil {
log.Fatal(err)
}
fmt.Println(files) // contains a list of all files in the current directory
}
Glob ignores file system errors such as I/O errors reading directories. The only possible returned error is ErrBadPattern, when pattern is malformed.
– Jon
7 November 2015 в 16:16
Мы можем получить список файлов внутри папки в файловой системе, используя различные стандартные библиотечные функции golang.
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
)
func main() {
var (
root string
files []string
err error
)
root := "/home/manigandan/golang/samples"
// filepath.Walk
files, err = FilePathWalkDir(root)
if err != nil {
panic(err)
}
// ioutil.ReadDir
files, err = IOReadDir(root)
if err != nil {
panic(err)
}
//os.File.Readdir
files, err = OSReadDir(root)
if err != nil {
panic(err)
}
for _, file := range files {
fmt.Println(file)
}
}
Пакет
blockquote>path/filepath
предоставляет удобный способ сканирования всех файлов в каталоге, он автоматически сканирует каждый подкаталог в каталоге.func FilePathWalkDir(root string) ([]string, error) { var files []string err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if !info.IsDir() { files = append(files, path) } return nil }) return files, err }
- Использование ioutil.ReadDir
blockquote>
ioutil.ReadDir
читает каталог с именем dirname и возвращает список записей в каталоге, отсортированных по имени файла.func IOReadDir(root string) ([]string, error) { var files []string fileInfo, err := ioutil.ReadDir(root) if err != nil { return files, err } for _, file := range fileInfo { files = append(files, file.Name()) } return files, nil }
- Использование os.File .Readdir
Readdir считывает содержимое каталога, связанного с файлом, и возвращает срез до n значений FileInfo, как было бы возвращено Lstat, в порядке каталога. Последующие вызовы в том же файле приведут к дальнейшему FileInfos.
blockquote>func OSReadDir(root string) ([]string, error) { var files []string f, err := os.Open(root) if err != nil { return files, err } fileInfo, err := f.Readdir(-1) f.Close() if err != nil { return files, err } for _, file := range fileInfo { files = append(files, file.Name()) } return files, nil }
Результаты теста.
Получить подробнее об этом сообщении в блоге
ioutil.ReadDir
- хорошая находка, но если вы щелкнете и посмотрите на источник, вы увидите, что он вызывает метод Readdir of os.File . Если вы в порядке с порядком каталога и не нуждаетесь в сортировке списка, тогда этот метод Readdir - это все, что вам нужно.
ioutil
, поэтому я добавлю его ради потомства. Удачи во всем :) – RocketDonkey 3 February 2013 в 04:37