自己做的网站本地虚拟上传可以做网站吗
web/
2025/9/26 10:49:10/
文章来源:
自己做的网站本地虚拟上传,可以做网站吗,广州网站建设培训学校,网站开发代淘宝店铺装修os包中实现了平台无关的接口#xff0c;设计向Unix风格#xff0c;但是错误处理是go风格#xff0c;当os包使用时#xff0c;如果失败之后返回错误类型而不是错误数量#xff0e;os包中函数设计方式和Unix类似#xff0c;下面来看一下#xff0e;func Chdir(dir string)…os包中实现了平台无关的接口设计向Unix风格但是错误处理是go风格当os包使用时如果失败之后返回错误类型而不是错误数量os包中函数设计方式和Unix类似下面来看一下func Chdir(dir string) error //chdir将当前工作目录更改为dir目录func Getwd() (dir string, err error) //获取当前目录类似linux中的pwdfunc Chmod(name string, mode FileMode) error //更改文件的权限(读写执行分为三类all-group-owner)func Chown(name string, uid, gid int) error //更改文件拥有者ownerfunc Chtimes(name string, atime time.Time, mtime time.Time) error //更改文件的访问时间和修改时间atime表示访问时间mtime表示更改时间func Clearenv() //清除所有环境变量(慎用)func Environ() []string //返回所有环境变量func Exit(code int) //系统退出并返回code其中表示执行成功并退出非表示错误并退出其中执行Exit后程序会直接退出defer函数不会执行func Expand(s string, mapping func(string) string) string //Expand用mapping 函数指定的规则替换字符串中的${var}或者$var(注变量之前必须有$符号)。比如os.ExpandEnv(s)等效于os.Expand(s, os.Getenv)。package mainimport (fmtos)func main() {mapping : func(key string) string {m : make(map[string]string)m map[string]string{world: kitty,hello: hi,}if m[key] ! {return m[key]}return key}s : hello,world // hello,world由于hello world之前没有$符号则无法利用map规则进行转换s1 : $hello,$world $finish // hi,kitty finishfinish没有在map规则中所以还是返回原来的值fmt.Println(os.Expand(s, mapping))fmt.Println(os.Expand(s1, mapping))}func ExpandEnv(s string) string //ExpandEnv根据当前环境变量的值来替换字符串中的${var}或者$var。如果引用变量没有定义则用空字符串替换。func main() {s : hello $GOROOTfmt.Println(os.ExpandEnv(s)) // hello /home/work/software/go$GOROOT替换为环境变量的值而h没有环境变量可以替换返回空字符串}func Getenv(key string) string //获取系统key的环境变量如果没有环境变量就返回空fmt.Println(os.Getenv(GOROOT)) // /home/software/gofunc Geteuid() int //获取调用者用户idfunc Getgid() int //获取调用者的组idfmt.Println(os.Getgid()) // 1000func Getgroups() ([]int, error) //返回调用者属于的group其和chown配合使用改变文件属于的groupfunc main() {fmt.Println(os.Getgroups()) //获取调用者属于的组 [4 24 27 30 46 108 124 1000]fmt.Println(os.Getgid()) //获取调用者当前所在的组 1000fmt.Println(os.Chown(tmp.txt, 1000, 46)) //更改文件所在的组}func Getpagesize() int //获取底层系统内存页的数量func Getpid() int //获取进程idfunc Getppid() int //获取调用者进程父idfunc Hostname() (name string, err error) //获取主机名func IsExist(err error) bool //返回一个布尔值它指明err错误是否报告了一个文件或者目录已经存在。它被ErrExist和其它系统调用满足。func IsNotExist(err error) bool //返回一个布尔值它指明err错误是否报告了一个文件或者目录不存在。它被ErrNotExist 和其它系统调用满足。func IsPathSeparator(c uint8) bool //判断c是否是一个路径分割符号是的话返回true,否则返回falsefmt.Println(os.IsPathSeparator(/)) //truefmt.Println(os.IsPathSeparator(|)) //falsefunc IsPermission(err error) bool //判定err错误是否是权限错误。它被ErrPermission 和其它系统调用满足。func Lchown(name string, uid, gid int) error //改变了文件的gid和uid。如果文件是一个符号链接它改变的链接自己。如果出错则会是*PathError类型。func Link(oldname, newname string) error //创建一个从oldname指向newname的硬连接对一个进行操作则另外一个也会被修改func Mkdir(name string, perm FileMode) error //创建一个新目录该目录具有FileMode权限当创建一个已经存在的目录时会报错func main() {var path stringif os.IsPathSeparator(\\) {path \\} else {path /}pwd, _ : os.Getwd()err : os.Mkdir(pwdpathtmp, os.ModePerm)if err ! nil {fmt.Println(err)}}func MkdirAll(path string, perm FileMode) error //创建一个新目录该目录是利用路径(包括绝对路径和相对路径)进行创建的如果需要创建对应的父目录也一起进行创建如果已经有了该目录则不进行新的创建当创建一个已经存在的目录时不会报错.func NewSyscallError(syscall string, err error) error //NewSyscallError返回一个SyscallError 错误带有给出的系统调用名字和详细的错误信息。也就是说如果err为空则返回空func main() {a : os.NewSyscallError(mkdir, nil)fmt.Println(a) // nila os.NewSyscallError(mkdir, errors.New(bad error))fmt.Println(a) //mkdir: bad error}func Readlink(name string) (string, error) //返回符号链接的目标。如果出错将会是 *PathError类型。func Remove(name string) error //删除文件或者目录func RemoveAll(path string) error //删除目录以及其子目录和文件如果path不存在的话返回nilfunc main() {err : os.MkdirAll(./a, os.ModePerm)os.Chdir(./a)os.Create(file.txt)fmt.Println(err)//成功创建文件file.txt返回nilos.Chdir(../)err os.RemoveAll(./a)fmt.Println(err)//成功删除目录a返回nil}func Rename(oldpath, newpath string) error //重命名文件如果oldpath不存在则报错no such file or directoryfunc SameFile(fi1, fi2 FileInfo) bool //查看f1和f2这两个是否是同一个文件如果再Unix系统这意味着底层结构的device和inode完全一致在其他系统上可能是基于文件绝对路径的SameFile只适用于本文件包stat返回的状态其他情况下都返回falsefunc Setenv(key, value string) error //设定环境变量经常与Getenv连用用来设定环境变量的值func main() {err : os.Setenv(goenv, go environment)a : os.Getenv(goenv)fmt.Println(err, a) // go environment}func Symlink(oldname, newname string) error //创建一个newname作为oldname的符号连接这是一个符号连接(Link是硬连接)与link的硬连接不同利用Link创建的硬连接则newname和oldname的file互不影响一个文件删除另外一个文件不受影响但是利用SymLink创建的符号连接其newname只是一个指向oldname文件的符号连接当oldname file删除之后则newname的文件也就不能够继续使用func TempDir() string //创建临时目录用来存放临时文件这个临时目录一般为/tmpfunc Truncate(name string, size int64) error //按照指定长度size将文件截断如果这个文件是一个符号链接则同时也改变其目标连接的长度如果有错误则返回一个错误文件操作type Filetype File struct {// contains filtered or unexported fields}File表示打开的文件描述符func Create(name string) (file *File, err error) //创建一个文件文件mode是0666(读写权限)如果文件已经存在则重新创建一个原文件被覆盖创建的新文件具有读写权限能够备用与i/o操作其相当于OpenFile的快捷操作等同于OpenFile(name string, O_CREATE,0666)func NewFile(fd uintptr, name string) *File //根据文件描述符和名字创建一个新的文件Stdin NewFile(uintptr(syscall.Stdin), /dev/stdin)Stdout NewFile(uintptr(syscall.Stdout), /dev/stdout)Stderr NewFile(uintptr(syscall.Stderr), /dev/stderr)func Open(name string) (file *File, err error) //打开一个文件返回文件描述符该文件描述符只有只读权限他相当于OpenFile(name string,O_RDWR,0)func OpenFile(name string, flag int, perm FileMode) (file *File, err error) //指定文件权限和打开方式打开name文件或者create文件其中flag标志如下:打开标记O_RDONLY只读模式(read-only)O_WRONLY只写模式(write-only)O_RDWR读写模式(read-write)O_APPEND追加模式(append)O_CREATE文件不存在就创建(create a new file if none exists.)O_EXCL与 O_CREATE 一起用构成一个新建文件的功能它要求文件必须不存在(used with O_CREATE, file must not exist)O_SYNC同步方式打开即不使用缓存直接写入硬盘O_TRUNC打开并清空文件至于操作权限perm除非创建文件时才需要指定不需要创建新文件时可以将其设定为.虽然go语言给perm权限设定了很多的常量但是习惯上也可以直接使用数字如0666(具体含义和Unix系统的一致).func Pipe() (r *File, w *File, err error) //返回一对连接的文件从r中读取写入w中的数据即首先向w中写入数据此时从r中变能够读取到写入w中的数据Pipe()函数返回文件和该过程中产生的错误func main() {r, w, _ : os.Pipe()w.WriteString(hello,world!)var s make([]byte, 20)n, _ : r.Read(s)fmt.Println(string(s[:n])) // hello,world!}func (f *File) Chdir() error //改变工作目录到f其中f必须为一个目录否则便会报错func main() {dir, _ : os.Getwd()fmt.Println(dir)f, _ : os.Open(tmp.txt)err : f.Chdir()if err ! nil {fmt.Println(err) //chdir tmp.txt: not a directory因为tmp.txt不是目录所以报错}f, _ os.Open(develop)err f.Chdir()if err ! nil {fmt.Println(err)}dir1, _ : os.Getwd()fmt.Println(dir1) //home/work/develop因为develop是工作目录所以变切换到该目录}func (f *File) Chmod(mode FileMode) error //更改文件权限其等价与os.Chmod(name string,mode FileMode)errorfunc (f *File) Chown(uid, gid int) error //更改文件所有者与os.Chown等价func (f *File) Close() error //关闭文件使其不能够再进行i/o操作其经常和defer一起使用用在创建或者打开某个文件之后这样在程序退出前变能够自己关闭响应的已经打开的文件func (f *File) Fd() uintptr //返回系统文件描述符也叫做文件句柄func (f *File) Name() string //返回文件名字与file.Stat().Name()等价func (f *File) Read(b []byte) (n int, err error) //将len(b)的数据从f中读取到b中如果无错则返回n和nil,否则返回读取的字节数n以及响应的错误func (f *File) ReadAt(b []byte, off int64) (n int, err error) //和Read类似不过ReadAt指定开始读取的位置offsetfunc (f *File) Readdir(n int) (fi []FileInfo, err error)Readdir读取file指定的目录的内容然后返回一个切片它最多包含n个FileInfo值这些值可能是按照目录顺序的Lstat返回的。接下来调用相同的文件会产生更多的FileInfos。如果n0Readdir返回最多n个FileInfo结构。在这种情况下如果Readdir返回一个空的切片它将会返回一个非空的错误来解释原因。在目录的结尾错误将会是io.EOF。如果n0Readdir返回目录的所有的FileInfo用一个切片表示。在这种情况下如果Readdir成功(读取直到目录的结尾)它会返回切片和一个空的错误。如果它在目录的结尾前遇到了一个错误Readdir返回直到当前所读到的FIleInfo和一个非空的错误。func (f *File) Readdirnames(n int) (names []string, err error)Readdirnames读取并返回目录f里面的文件的名字切片。如果n0Readdirnames返回最多n个名字。在这种情况下如果Readdirnames返回一个空的切片它会返回一个非空的错误来解释原因。在目录的结尾错误为EOF。如果n0Readdirnames返回目录下所有的文件的名字用一个切片表示。在这种情况下如果用一个切片表示成功(读取直到目录结尾)它返回切片和一个空的错误。如果在目录结尾之前遇到了一个错误Readdirnames返回直到当前所读到的names和一个非空的错误。package mainimport (fmtos)func main() {file, err : os.Open(/home/chenbaoke)if err ! nil {fmt.Println(err)}fileslice, err : file.Readdir(5)if err ! nil {fmt.Println(err)}for _, f : range fileslice {fmt.Println(f.Name()) //输出个文件的名字}filename, err : file.Readdirnames(-1)if err ! nil {fmt.Println(err)}for _, f : range filename {fmt.Println(f) //输出所有文件的名字}}func (f *File) Seek(offset int64, whence int) (ret int64, err error) //Seek设置下一次读或写操作的偏移量offset根据whence来解析0意味着相对于文件的原始位置1意味着相对于当前偏移量2意味着相对于文件结尾。它返回新的偏移量和错误(如果存在)。func main() {s : make([]byte, 10)file, _ : os.Open(tmp.txt)defer file.Close()file.Seek(-12, 2) // 从离最后位置12的地方开始n, _ : file.Read(s)fmt.Println(string(s[:n]))}func (f *File) Stat() (fi FileInfo, err error) //返回文件描述相关信息包括大小名字等等价于os.Stat(filename string)func (f *File) Sync() (err error) //同步操作将当前存在内存中的文件内容写入硬盘func (f *File) Truncate(size int64) error //类似 os.Truncate(name, size),将文件进行截断func (f *File) Write(b []byte) (n int, err error) //将b中的数据写入f文件func (f *File) WriteAt(b []byte, off int64) (n int, err error) //将b中数据写入f文件中写入时从offset位置开始进行写入操作func (f *File) WriteString(s string) (ret int, err error) //将字符串s写入文件中func main() {file, _ : os.Create(tmp.txt)a : hellobytefile.WriteAt([]byte(a), 10) //在文件file偏移量10处开始写入hellobytefile.WriteString(string) //在文件file偏移量0处开始写入stringfile.Write([]byte(a)) //在文件file偏移量string之后开始写入hellobyte这个时候就会把开始利用WriteAt在offset为10处开始写入的hellobyte进行部分覆盖b : make([]byte, 20)file.Seek(0, 0) //file指针指向文件开始位置n, _ : file.Read(b)fmt.Println(string(b[:n])) //stringhellobytebyte这是由于在写入过程中存在覆盖造成的}type FileInfotype FileInfo interface {Name() string //文件名字Size() int64 // length in bytes for regular files; system-dependent for others文件大小Mode() FileMode // file mode bits文件权限ModTime() time.Time // modification time 文件更改时间IsDir() bool // abbreviation for Mode().IsDir() 文件是否为目录Sys() interface{} // underlying data source (can return nil) 基础数据源}FileInfo经常被Stat和Lstat返回来描述一个文件func Lstat(name string) (fi FileInfo, err error) //返回描述文件的FileInfo信息。如果文件是符号链接返回的FileInfo描述的符号链接。Lstat不会试着去追溯link。如果出错将是 *PathError类型。func Stat(name string) (fi FileInfo, err error) //返回描述文件的FileInfo信息。如果出错将是 *PathError类型。type FileModetype FileMode uint32FileMode代表文件的模式和权限标志位。标志位在所有的操作系统有相同的定义因此文件的信息可以从一个操作系统移动到另外一个操作系统。不是所有的标志位是用所有的系统。唯一要求的标志位是目录的ModeDir。const (// The single letters are the abbreviations// used by the String methods formatting.ModeDir FileMode 1 (32 - 1 - iota) // d: is a directoryModeAppend // a: append-onlyModeExclusive // l: exclusive useModeTemporary // T: temporary file (not backed up)ModeSymlink // L: symbolic linkModeDevice // D: device fileModeNamedPipe // p: named pipe (FIFO)ModeSocket // S: Unix domain socketModeSetuid // u: setuidModeSetgid // g: setgidModeCharDevice // c: Unix character device, when ModeDevice is setModeSticky // t: sticky// Mask for the type bits. For regular files, none will be set.ModeType ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDeviceModePerm FileMode 0777 // permission bits)所定义的文件标志位最重要的位是FileMode。9个次重要的位是标准Unix rwxrwxrwx权限。这些位的值应该被认为公开API的一部分可能用于连接协议或磁盘表示它们必须不能被改变尽管新的标志位有可能增加。FileModel的方法主要用来进行判断和输出权限func (m FileMode) IsDir() bool //判断m是否是目录也就是检查文件是否有设置的ModeDir位func (m FileMode) IsRegular() bool //判断m是否是普通文件也就是说检查m中是否有设置mode typefunc (m FileMode) Perm() FileMode //返回m的权限位func (m FileMode) String() string //返回m的字符串表示func main() {fd, err : os.Stat(tmp.txt)if err ! nil {fmt.Println(err)}fm : fd.Mode()fmt.Println(fm.IsDir()) //falsefmt.Println(fm.IsRegular()) //truefmt.Println(fm.Perm()) //-rwxrwxrwxfmt.Println(fm.String()) //-rwxrwxrwx}type LinkErrortype LinkError struct {Op stringOld stringNew stringErr error}func (e *LinkError) Error() string //LinkError记录了一个在链接或者符号连接或者重命名的系统调用中发生的错误和引起错误的文件的路径。type PathErrortype PathError struct {Op stringPath stringErr error}func (e *PathError) Error() string //返回一个有操作者路径以及错误组成的字符串形式进程相关操作type ProcAttrtype ProcAttr struct {Dir string //如果dir不是空子进程在创建之前先进入该目录Env []string //如果Env不是空则将里面的内容赋值给新进程的环境变量如果他为空则使用默认的环境变量Files []*File //Files指定新进程打开文件前三个实体分别为标准输入标准输出和标准错误输出可以添加额外的实体这取决于底层的操作系统当进程开始时文//件对应的空实体将被关闭Sys *syscall.SysProcAttr //操作系统特定进程的属性设置该值也许会导致你的程序在某些操作系统上无法运行或者编译}ProcAttr包含属性这些属性将会被应用在被StartProcess启动的新进程上type ProcessProcess存储了通过StartProcess创建的进程信息。type Process struct {Pid inthandle uintptr //处理指针isdone uint32 // 如果进程正在等待则该值非没有等待该值为}func FindProcess(pid int) (p *Process, err error) //通过进程pid查找运行的进程返回相关进程信息及在该过程中遇到的errorfunc StartProcess(name string, argv []string, attr *ProcAttr) (*Process, error) //StartProcess启动一个新的进程其传入的name、argv和addr指定了程序、参数和属性StartProcess是一个低层次的接口。os/exec包提供了高层次的接口如果出错将会是*PathError错误。func(p *Process) Kill() error //杀死进程并直接退出func (p *Process) Release() error //释放进程p的所有资源之后进程p便不能够再被使用只有Wati没有被调用时才需要调用Release释放资源func main() {attr : os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, //其他变量如果不清楚可以不设定}p, err : os.StartProcess(/usr/bin/vim, []string{/usr/bin/vim, tmp.txt}, attr) //vim 打开tmp.txt文件if err ! nil {fmt.Println(err)}fmt.Println(p) //{5488 240 0}pro, _ : os.FindProcess(p.Pid) //查找进程fmt.Println(pro) //{5488 240 0}err p.Kill() //杀死进程但不释放进程相关资源fmt.Println(err)err p.Release() //释放进程相关资源因为资源释放凋之后进程p就不能进行任何操作此后进程的任何操作都会被报错fmt.Println(err)}func (p *Process) Signal(sig Signal) error //发送一个信号给进程p, 在windows中没有实现发送中断interruptfunc (p *Process) Wait() (*ProcessState, error) //Wait等待进程退出并返回进程状态和错误。Wait释放进程相关的资源。在大多数的系统上进程p必须是当前进程的子进程否则会返回一个错误。func main() {attr : os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, //其他变量如果不清楚可以不设定}p, err : os.StartProcess(/usr/bin/vim, []string{/usr/bin/vim, tmp.txt}, attr) //vim 打开tmp.txt文件if err ! nil {fmt.Println(err)}go func() {p.Signal(os.Kill) //kill process}()pstat, err : p.Wait()if err ! nil {fmt.Println(err)}fmt.Println(pstat) //signal: killed}type ProcessState //ProcessState存储了Wait函数报告的进程信息type ProcessState struct {pid intstatus syscall.WaitStatusrusage *syscall.Rusage}func (p *ProcessState) Exited() bool // 判断程序是否已经退出func (p *ProcessState) Pid() int //返回退出进程的pidfunc (p *ProcessState) String() string //获取进程状态的字符串表示func (p *ProcessState) Success() bool //判断程序是否成功退出而Exited则仅仅只是判断其是否退出func (p *ProcessState) Sys() interface{} //返回有关进程的系统独立的退出信息。并将它转换为恰当的底层类型(比如Unix上的syscall.WaitStatus)主要用来获取进程退出相关资源。func (p *ProcessState) SysUsage() interface{} //SysUsage返回关于退出进程的系统独立的资源使用信息。主要用来获取进程使用系统资源func (p *ProcessState) SystemTime() time.Duration //获取退出进程的内核态cpu使用时间func (p *ProcessState) UserTime() time.Duration //返回退出进程和子进程的用户态CPU使用时间func main() {attr : os.ProcAttr{Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, //其他变量如果不清楚可以不设定}p, err : os.StartProcess(/usr/bin/vim, []string{/usr/bin/vim, tmp.txt}, attr) //vim 打开tmp.txt文件if err ! nil {fmt.Println(err)}ps, _ : p.Wait() //当关闭vim打开的tmp.txt时进程就结束了fmt.Println(ps) //exit status 0if ps.Exited() {fmt.Println(ps.Pid()) //536fmt.Println(ps.String()) // exit status 0fmt.Println(ps.Success()) //truefmt.Println(ps.Sys()) //0fmt.Println(ps.SysUsage()) //{{0 313157} {0 42898} 29164 0 0 0 7745 41 0 10736 240 0 0 0 1238 143}fmt.Println(ps.SystemTime()) // 42.898msfmt.Println(ps.UserTime()) //313.157ms}}type Signaltype Signal interface {String() stringSignal() // 同其他字符串做区别}代表操作系统的信号底层的实现是操作系统独立的在Unix中是syscal.Signalvar (Interrupt Signal syscall.SIGINTKill Signal syscall.SIGKILL)在所有系统中都能够使用的是interrupe,给进程发送一个信号强制杀死该进程type SyscallError //SyscallError记录了一个特定系统调用的错误主要用来返回SyscallError的字符串表示type SyscallError struct {Syscall stringErr error}func (e *SyscallError) Error() string //返回SyscallError的字符串表示版权声明本文为博主原创文章未经博主允许不得转载。有疑问加站长微信联系(非本文作者)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82150.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!