亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go語言中os包的用法實(shí)戰(zhàn)大全

 更新時(shí)間:2024年02月18日 09:55:25   作者:才華橫溢caozy  
Go在os中提供了文件的基本操作,包括通常意義的打開、創(chuàng)建、讀寫等操作,除此以外為了追求便捷以及性能上,Go還在io/ioutil以及bufio提供一些其他函數(shù)供開發(fā)者使用,這篇文章主要給大家介紹了關(guān)于go語言中os包用法的相關(guān)資料,需要的朋友可以參考下

前言

Go語言中的os包是操作系統(tǒng)包,提供了豐富的函數(shù)和方法用于與操作系統(tǒng)進(jìn)行交互。本文將介紹一些常用的os包函數(shù)和方法,包括文件操作、進(jìn)程管理、環(huán)境變量管理等。

一、文件權(quán)限符號(hào)

介紹os包之前我們先介紹一下文件權(quán)限。

1.1、定義

在 Golang 中,文件權(quán)限由三組數(shù)字表示,分別表示文件所有者、組成員和其他用戶。每組數(shù)字由三個(gè)數(shù)字組成,分別表示讀、寫和執(zhí)行權(quán)限。數(shù)字 0 表示沒有權(quán)限,數(shù)字 4 表示有讀權(quán)限,數(shù)字 2 表示有寫權(quán)限,數(shù)字 1表示有執(zhí)行權(quán)限。

因此,0666 表示所有用戶都有讀、寫權(quán)限。

以下是文件權(quán)限的完整表格:

權(quán)限所有者組成員其他用戶
444
222
執(zhí)行111

1.2、POSIX標(biāo)準(zhǔn)

POSIX(Portable Operating System Interface for Unix)是一種定義了操作系統(tǒng)交互接口的標(biāo)準(zhǔn),旨在確保在不同操作系統(tǒng)上的程序具有一致的行為。在POSIX標(biāo)準(zhǔn)中,文件權(quán)限通常以八進(jìn)制數(shù)字表示,并且在數(shù)字前面加上一個(gè)"0"。
因此,為了遵循POSIX標(biāo)準(zhǔn)并與其他系統(tǒng)兼容,Go語言中的os.Stat函數(shù)將文件權(quán)限設(shè)置為0666而不是直接使用666。這樣可以確保在不同的操作系統(tǒng)上都能正確地解析和處理文件權(quán)限。

三、os包

3.1、獲取文件/文件夾信息

Stat(name string) (FileInfo, error)
Lstat(name string) (FileInfo, error)
IsExist(err error) bool // 指示是否已知錯(cuò)誤以報(bào)告文件或目錄已存在。
IsNotExist(err error) bool // 是否已知錯(cuò)誤以報(bào)告文件或目錄不存在。
IsPermission(err error) bool // 是否已知錯(cuò)誤以報(bào)告權(quán)限被拒絕。
IsTimeout(err error) bool // 是否已知錯(cuò)誤以報(bào)告發(fā)生了超時(shí)。
NewSyscallError(syscall string, err error) error // 以錯(cuò)誤的形式返回一個(gè)新的 SyscallError,包含給定的系統(tǒng)調(diào)用名稱和錯(cuò)誤詳細(xì)信息
//如果傳入的是一個(gè)符號(hào)鏈接,那么Lstat只返回該符號(hào)鏈接,不會(huì)跟蹤,其他沒區(qū)別。

返回FileInfo對(duì)象和error,如果報(bào)錯(cuò)說明傳入的路徑不合法/不存在。FileInfo對(duì)象包含文件的一些信息:

// FileInfo 描述一個(gè)文件,由 Stat 返回。
type FileInfo interface {
	Name() string       // 文件的基本名稱
	Size() int64        // 常規(guī)文件的長(zhǎng)度(以字節(jié)為單位);系統(tǒng)依賴于他人
	Mode() FileMode     // 文件模式位
	ModTime() time.Time // 修改時(shí)間
	IsDir() bool        // Mode().IsDir()的縮寫。
	Sys() any           // 基礎(chǔ)數(shù)據(jù)源(可以返回nil)
}

3.1.1、測(cè)試

package main

import (
	"fmt"
	"os"
)

func main() {
	path := "D:/config/test/test.txt"
	stat, _ := os.Stat(path)
	fmt.Println("stat.Name():", stat.Name())
	fmt.Println("stat.Size():", stat.Size())
	fmt.Println("stat.Mode():", stat.Mode())
	fmt.Println("stat.ModTime():", stat.ModTime())
	fmt.Println("stat.IsDir():", stat.IsDir())
	fmt.Println("stat.Sys():", stat.Sys())
}

3.1.2、輸出

stat.Name(): test.txt
stat.Size(): 0                                                                         
stat.Mode(): -rw-rw-rw-                                                                
stat.ModTime(): 2023-12-19 10:26:07.3735891 +0800 CST                                  
stat.IsDir(): false                                                                    
stat.Sys(): &{32 {3102608083 31076898} {3102608083 31076898} {3102608083 31076898} 0 0}

3.2、創(chuàng)建文件

Create

Create(name string) (*File, error)   // 創(chuàng)建文件,文件存在則覆蓋,底層調(diào)用的是OpenFile
  • 創(chuàng)建的文件默認(rèn)權(quán)限為0666,所有用戶都具有讀寫權(quán)限
  • 以讀寫方式創(chuàng)建文件,如果文件已存在,則覆蓋。

返回*File指針對(duì)象和error,使用File對(duì)象,可以對(duì)文件進(jìn)行讀寫操作。

CreateTemp

CreateTemp(dir, pattern string) (*File, error)
  • 創(chuàng)建一個(gè)臨時(shí)文件,dir如果為空,則使用本地的臨時(shí)文件路徑,pattern為臨時(shí)文件名前綴
  • dir為目錄名

3.3、打開文件

Open(name string) (*File, error)  //以只讀方式打開文件
OpenFile(name string, flag int, perm FileMode) (*File, error) // 打開或創(chuàng)建文件

Open方法

  • 以只讀方式打開文件,返回的File對(duì)象,可以調(diào)用指定讀操作的方法,不能調(diào)用寫操作方法

OpenFile方法

文件操作方式 中文釋義 注意事項(xiàng)
O_RDONLY 只讀 不能和O_WRONLY、O_RDWR一起使用
O_WRONLY 只寫 不能和O_RDONLY、O_RDWR一起使用
O_RDWR 讀寫 不能和O_WRONLY、O_WRONLY一起使用
O_APPEND 追加 和上邊三個(gè)之一進(jìn)行或運(yùn)算傳值,創(chuàng)建文件時(shí),如果文件存在,則不會(huì)覆蓋
O_CREATE 創(chuàng)建 和上邊三個(gè)之一進(jìn)行或運(yùn)算傳值
O_EXCL 強(qiáng)制 與 O_CREATE 一起使用時(shí),文件不能存在
O_SYNC 同步 打開以進(jìn)行同步I/O。
O_TRUNC 存在則覆蓋 打開時(shí)截?cái)喑R?guī)可寫文件。

3.3.1、測(cè)試

打開一個(gè)文件,如果文件不存在則創(chuàng)建,默認(rèn)不會(huì)覆蓋

path := "D:/config/test/test.txt"
	//打開文件,如果文件不存在,則創(chuàng)建
	file, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
	if err != nil {
		fmt.Println("創(chuàng)建文件失?。?, err)
		return
	}
	fmt.Println(file)

3.4、寫文件

WriteFile(name string, data []byte, perm FileMode) error
//寫文件,底層調(diào)用OPenFile,以只寫方式打開文件,如果文件存在,則覆蓋,不存在則創(chuàng)建
  • 寫文件,底層調(diào)用OPenFile,以只寫方式打開文件,如果文件存在,則覆蓋,不存在則創(chuàng)建
  • 底層調(diào)用的是File對(duì)象的Write方法寫文件。

3.5、讀文件

ReadFile(name string) ([]byte, error) 
  • 讀取整個(gè)文件并返回字節(jié)數(shù)組,error == nil代表讀取成功。
  • 底層先調(diào)用Open以只讀方式打開文件,
  • 再調(diào)用Read方法讀取文件所有內(nèi)容。

3.6、移動(dòng)/重命名文件/目錄

Rename(oldpath, newpath string) error
  • 文件和文件夾都可以移動(dòng)

3.7、刪除文件或目錄

Remove(name string) error // 刪除文件
RemoveAll(path string) error //刪除目錄
// 刪除路徑及其包含的所有子路徑。它會(huì)刪除它能刪除的所有內(nèi)容,不存在不會(huì)報(bào)錯(cuò)

不存在會(huì)報(bào)錯(cuò)

3.8、創(chuàng)建目錄

Mkdir

Mkdir(name string, perm FileMode) error
  • 創(chuàng)建一個(gè)具有指定名稱和權(quán)限位的新目錄
  • 底層調(diào)用的是syscall
  • 如果目錄已經(jīng)存在,則報(bào)錯(cuò)
  • 如果父目錄不存在,則報(bào)錯(cuò)

MkdirAll

MkdirAll(path string, perm FileMode) error
  • 遞歸方式創(chuàng)建目錄,如果父級(jí)目錄不存在,則先創(chuàng)建父級(jí)目錄
  • 底層調(diào)用的是Mkdir哈函數(shù)。
  • 如果目錄已經(jīng)存在,不會(huì)報(bào)錯(cuò)。

創(chuàng)建臨時(shí)目錄-MkdirTemp

MkdirTemp(dir, pattern string) (string, error)
  • 在你傳入的dir目錄下創(chuàng)建一個(gè)臨時(shí)目錄,pattern代表臨時(shí)目錄的前綴。
  • 如果dir傳空,則默認(rèn)為本機(jī)的臨時(shí)目錄路徑
  • 底層調(diào)用Mkdir,權(quán)限0700。

3.9、更改文件/目錄權(quán)限

Chmod(name string, mode FileMode) error

3.10、獲取文件系統(tǒng)fs對(duì)象

DirFS(dir string) fs.FS
  • 傳入一個(gè)文件路徑,返回fs對(duì)象,fs代表當(dāng)前路徑
  • fs有Open方法可以用來打開文件或目錄

3.11、獲取目錄下的所有文件

ReadDir(name string) ([]DirEntry, error)
  • 獲取到所有文件和文件夾

返回的DirEntry對(duì)象如下:

// DirEntry 是從目錄讀取的條目(使用 ReadDir
// 函數(shù)或 ReadDirFile 的 ReadDir 方法)
type DirEntry interface {
	// Name 返回條目所描述的文件(或子目錄)的名稱。此名稱只是路徑的最后一個(gè)
	// 元素(基本名稱),而不是整個(gè)路徑。例如,name將返回“hello.go”,
	// 而不是“ home/gopher/hello.go ”。
	Name() string

	// IsDir 報(bào)告條目是否描述目錄。
	IsDir() bool

	// Type 返回條目的類型位。類型位是由 FileMode.Type
	// 方法返回的常見 FileMode 位的子集。
	Type() FileMode

	// Info 返回條目所描述的文件或子目錄的 FileInfo。
	// 返回的 FileInfo 可以是讀取原始目錄的時(shí)間,也可
	// 以是調(diào)用 Info 的時(shí)間。如果文件在目錄讀取后已被刪除或重
	// 命名,則 Info 可能會(huì)返回滿足 errors.is(err,ErrNotExist)的錯(cuò)誤。
	// 如果條目表示符號(hào)鏈接,
	// 則 Info 報(bào)告有關(guān)鏈接本身的信息,而不是鏈接的目標(biāo)
	Info() (FileInfo, error)
}

測(cè)試

func main() {
	path := "D:\\software"
	dir, err := os.ReadDir(path)
	if err != nil {
		fmt.Println(err)
		return
	}
	for i := 0; i < len(dir); i++ {
		fmt.Println(dir[i].Name())
		fmt.Println(dir[i].IsDir())
		fmt.Println(dir[i].Info())
		fmt.Println(dir[i].Type())
	}
}

3.12、修改文件大小

Truncate(name string, size int64) error

更改命名文件的大小。如果文件是符號(hào)鏈接,它會(huì)更改鏈接目標(biāo)的大小。

3.13、其他功能函數(shù)

  • UserHomeDir() (string, error):返回當(dāng)前用戶的主目錄。例如:C:\Users\用戶名
    • 在 Unix 上,包括 macOS ,它返回 $HOME 環(huán)境變量。
    • 在 Windows 上,它返回 %USERPROFILE%。
    • 在 Plan9中,它返回 $home 環(huán)境變量。
  • TempDir() string:返回用于臨時(shí)文件的默認(rèn)目錄。例如:C:\Users\用戶名\AppData\Local\Temp
    • 既不保證該目錄存在,也不保證該目錄具有可訪問權(quán)限
  • UserConfigDir() (string, error):返回用于特定于用戶的配置數(shù)據(jù)的默認(rèn)根目錄。例如:C:\Users\用戶名\AppData\Roaming
  • UserCacheDir() (string, error):返回用于特定于用戶的緩存數(shù)據(jù)的默認(rèn)根目錄。例如:C:\Users\用戶名\AppData\Local
  • SameFile(fi1, fi2 FileInfo) bool:比較兩個(gè)文件對(duì)象是否相同
  • Chmod(name string, mode FileMode):修改文件權(quán)限
  • Link(oldname, newname string) error:創(chuàng)建新名稱作為指向舊名稱文件的硬鏈接。
  • Symlink(oldname, newname string) error:創(chuàng)建 newname 作為到 oldname的符號(hào)鏈接。
  • Readlink(name string) (string, error):返回命名符號(hào)鏈接的目標(biāo)。
  • IsPathSeparator(c uint8) bool:報(bào)告c是否為目錄分隔符。例如c為 ’ / ’
  • Getwd() (dir string, err error):返回當(dāng)前項(xiàng)目根路徑。例如:D:\goproject\gotest2。
  • Chtimes(name string, atime time.Time, mtime time.Time) error:更改命名文件的訪問和修改時(shí)間,類似于Unix 的 utime() 或 utimes()函數(shù)。

3.14、進(jìn)程/環(huán)境變量相關(guān)

  • Exit(code int):Exit會(huì)導(dǎo)致當(dāng)前程序退出,并返回給定的狀態(tài)代碼。代碼0表示成功,代碼非0表示錯(cuò)誤。
  • Getegid、GetgroupsGetgid、Geteuid、Getuid:非windows環(huán)境使用
  • FindProcess(pid int) (*Process, error):根據(jù)pid獲取進(jìn)程對(duì)象
  • StartProcess(name string, argv []string, attr ProcAttr) (Process, error):?jiǎn)?dòng)一個(gè)新進(jìn)程,低級(jí)接口,os/exec 包提供更高級(jí)別的接口。
  • Expand(s string, mapping func(string) string) string:根據(jù)映射函數(shù)替換字符串中的{var}或var 。例如,os.ExpanEnv(S)。相當(dāng)于 os.Expand(s,os.Getenv)。
  • ExpandEnv(s string) string:根據(jù)當(dāng)前環(huán)境變量的值替換字符串中的 {var} 或 var。對(duì)未定義變量的引用將被空字符串替換。
  • Getenv、LookupEnv、SetenvUnsetenv、ClearenvEnviron:設(shè)置/取消等環(huán)境變量的操作。
  • Getpagesize() int :返回底層系統(tǒng)的內(nèi)存頁面大小。本機(jī)window測(cè)試返回:4096
  • Pipe() (r *File, w *File, err error):返回一對(duì)相連的文件;從 r 讀取返回寫入 w的字節(jié)。用于在兩個(gè)進(jìn)程之間的管道傳遞數(shù)據(jù)。
  • Chown、Lchown:更改指定文件的數(shù)字 uid 和 gid。
  • Hostname() (name string, err error):返回內(nèi)核報(bào)告的主機(jī)名。例如:DESKTOP-A0ICVRQ
  • Executable() (string, error):返回啟動(dòng)當(dāng)前進(jìn)程的可執(zhí)行文件的路徑名。window環(huán)境返回空。

三、總結(jié)

os包是Go語言標(biāo)準(zhǔn)庫中提供的一種操作系統(tǒng)抽象接口,它提供了豐富的函數(shù)和方法來訪問和操作系統(tǒng)相關(guān)的功能。

  • 文件操作:os包提供了許多用于文件操作的函數(shù),如Open、Create、Close、Read、Write等。其中最常用的是Open函數(shù),它可以打開一個(gè)文件并返回一個(gè)文件句柄,然后可以使用該句柄進(jìn)行讀寫操作。

  • 文件路徑操作:os包還提供了一些用于處理文件路徑的函數(shù),如Abs、Dir、Ext、IsAbs、IsDir、IsFile、Join等。這些函數(shù)可以方便地獲取文件路徑的信息,例如判斷一個(gè)路徑是否是絕對(duì)路徑或目錄等。

  • 進(jìn)程管理:os包中的Exec函數(shù)可以啟動(dòng)一個(gè)新的進(jìn)程,并執(zhí)行指定的命令。它還提供了一種方式來創(chuàng)建子進(jìn)程,并在父進(jìn)程中等待子進(jìn)程結(jié)束。此外,os包還提供了一些用于進(jìn)程管理的常量和變量,如ModeExecute、ModeCreate等。

  • 環(huán)境變量操作:os包中的Getenv和Setenv函數(shù)可以獲取和設(shè)置環(huán)境變量的值。使用這兩個(gè)函數(shù)可以輕松地讀取和修改系統(tǒng)的環(huán)境變量。

  • 錯(cuò)誤處理:os包中的Error方法可以獲取最后一個(gè)錯(cuò)誤信息的文本表示形式。在編寫程序時(shí),如果需要檢查某個(gè)操作是否成功,可以使用這個(gè)方法來獲取錯(cuò)誤信息并進(jìn)行相應(yīng)的處理。

總之,os包是Go語言中非常重要的一個(gè)標(biāo)準(zhǔn)庫,它提供了豐富的函數(shù)和方法來訪問和操作系統(tǒng)相關(guān)的功能。掌握這些用法可以幫助我們更加高效地編寫程序,并且能夠更好地處理與操作系統(tǒng)相關(guān)的問題。

到此這篇關(guān)于go語言中os包用法的文章就介紹到這了,更多相關(guān)go語言os包用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你了解Go語言標(biāo)準(zhǔn)庫strings的常用函數(shù)和方法

    一文帶你了解Go語言標(biāo)準(zhǔn)庫strings的常用函數(shù)和方法

    strings?庫包含了許多高效的字符串常用操作的函數(shù)和方法,巧用這些函數(shù)與方法,能極大的提高我們程序的性能。本文就來和大家分享一下Go標(biāo)準(zhǔn)庫strings的常用函數(shù)和方法,希望對(duì)大家有所幫助
    2022-11-11
  • Go語言中的逃逸分析究竟是什么?

    Go語言中的逃逸分析究竟是什么?

    這篇文章主要介紹了Go語言中的逃逸,套喲究竟是什么呢?通俗來講,當(dāng)一個(gè)對(duì)象的指針被多個(gè)方法或線程引用時(shí),我們稱這個(gè)指針發(fā)生了“逃逸”。下面文章將詳細(xì)介紹Go語言中的逃逸,需要的朋友可以參考一下
    2021-09-09
  • Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人

    Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人

    這篇文章主要為大家介紹了Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人實(shí)現(xiàn)過程詳解,本文將通過最新的gemini?go?sdk來實(shí)現(xiàn)命令行聊天機(jī)器人
    2023-12-12
  • golang logrus日志框架實(shí)例詳解

    golang logrus日志框架實(shí)例詳解

    logrus是一個(gè)可插拔的、結(jié)構(gòu)化的日志框架,這篇文章主要介紹了golang logrus日志框架實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Golang 類型轉(zhuǎn)換的實(shí)現(xiàn)(斷言、強(qiáng)制、顯式類型)

    Golang 類型轉(zhuǎn)換的實(shí)現(xiàn)(斷言、強(qiáng)制、顯式類型)

    將一個(gè)值從一種類型轉(zhuǎn)換到另一種類型,便發(fā)生了類型轉(zhuǎn)換,在go可以分為斷言、強(qiáng)制、顯式類型轉(zhuǎn)換,本文就詳細(xì)的介紹一下這就幾種轉(zhuǎn)換方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 使用go gin來操作cookie的講解

    使用go gin來操作cookie的講解

    今天小編就為大家分享一篇關(guān)于使用go gin來操作cookie的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • golang整合jwt的實(shí)現(xiàn)示例

    golang整合jwt的實(shí)現(xiàn)示例

    json web tokens(jwt)已成為大多數(shù)web api設(shè)計(jì)中的常見身份驗(yàn)證和授權(quán)方案之一,本文主要介紹了golang整合jwt的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Golang內(nèi)存泄漏詳解之原因、檢測(cè)與修復(fù)過程

    Golang內(nèi)存泄漏詳解之原因、檢測(cè)與修復(fù)過程

    本文詳細(xì)介紹了Golang中的內(nèi)存泄漏問題,包括內(nèi)存泄漏的定義、分類、影響以及預(yù)防和修復(fù)方法,通過使用Golang自帶的性能分析工具和火焰圖工具,可以有效地檢測(cè)和定位內(nèi)存泄漏的代碼路徑,合理的代碼設(shè)計(jì)和定期的代碼審查也是預(yù)防內(nèi)存泄漏的關(guān)鍵
    2024-12-12
  • Go語言中sync.Cond使用詳解

    Go語言中sync.Cond使用詳解

    本文主要介紹了Go語言中sync.Cond使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • uber go zap 日志框架支持異步日志輸出

    uber go zap 日志框架支持異步日志輸出

    這篇文章主要為大家介紹了uber go zap 日志框架支持異步日志輸出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論