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

Go標(biāo)準(zhǔn)庫(kù)Flag庫(kù)和Log庫(kù)的使用

 更新時(shí)間:2024年05月14日 09:27:10   作者:兩片空白  
本文主要介紹了Go標(biāo)準(zhǔn)庫(kù)Flag庫(kù)和Log庫(kù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一.Flag

Go語(yǔ)言內(nèi)置的flag包實(shí)現(xiàn)了命令行參數(shù)的解析,flag包使得開(kāi)發(fā)命令行工具更為簡(jiǎn)單。

1.1 os.Args

如果你只是簡(jiǎn)單的的想要獲取命令行參數(shù),可以像下面代碼示例一樣使用os.Args來(lái)獲取命令行參數(shù)。

os.Arg實(shí)際是一個(gè)存儲(chǔ)命令行參數(shù)的字符串切片([]string),它的第一個(gè)元素是執(zhí)行文件的名稱。

1.2 flag包的基本使用

導(dǎo)入flag包

import fmt

flag參數(shù)類型

flag包支持的命令行參數(shù)類型有bool,int,int64,uint,uint64,float,float64,string,duration。

1.2.1 定義命令行flag參數(shù)

有以下兩種常見(jiàn)的定義命令行flag參數(shù)的方法。

flag.Type()

基本格式如下:

flag.Type(flag名,默認(rèn)值,幫助信息) *Type。

例如我們要定義姓名,年齡,婚否三個(gè)命令行參數(shù),我們可以按如下方式定義:

	name := flag.String("name", "張三", "姓名")
	age := flag.Int("age", 25, "年齡")
	married := flag.Bool("married", false, "婚否")
	delay := flag.Duration("d", 0, "時(shí)間間隔")

需要注意的是:此時(shí)name,age, married,delay均為對(duì)應(yīng)類型的指針。

flag.TypeVar()

基本格式如下:flag.TypeVar(Type指針,flag名,默認(rèn)值,幫助信息)

例如我們要定義姓名,年齡,婚否三個(gè)命令參數(shù),我們可以按照如下方式定義。

func main() {
	var name string
	var age int
	var married bool
	var d time.Duration

	flag.StringVar(&name, "name", "張三", "姓名")
	flag.IntVar(&age, "age", 25, "年齡")
	flag.BoolVar(&married, "married", false, "婚否")
	flag.DurationVar(&d, "d", 0, "時(shí)間間隔")

	fmt.Println(name, age, married, d)
}

flag.Parse()

通過(guò)以上兩種方式定義號(hào)命令行flag參數(shù)后,需要通過(guò)調(diào)用flag.Parse()來(lái)對(duì)命令行參數(shù)進(jìn)行解析。

支持的命令行參數(shù)格式有以下幾種:

  • -flag xxx (使用空格,一個(gè)'-'符號(hào))
  • --flag xxx (使用空格,兩個(gè)'-'符號(hào))
  • -flag=xxx(使用等號(hào),一個(gè)'-'符號(hào))
  • --flag=xxx(使用等號(hào),兩個(gè)'--'符號(hào))

其中布爾類型的參數(shù)必須使用等號(hào)的方式指定。

flag解析在第一個(gè)非flag參數(shù)(單個(gè)'-'不是flag參數(shù))之前停止,或者在終止符'-'之后停止。

1.2.2 flag其它函數(shù)

  • flag.Args():返回命令行參數(shù)后的其它參數(shù),以[]string類型
  • flag.NArg():返回命令行參數(shù)后的其它參數(shù)個(gè)數(shù)
  • flag.NFlag():返回使用命令行參數(shù)個(gè)數(shù)

1.2.3 使用

二. Log

Go語(yǔ)言內(nèi)置的log包實(shí)現(xiàn)了簡(jiǎn)單的日志服務(wù)。本文介紹了標(biāo)準(zhǔn)庫(kù)log的基本使用。

1.1 使用Logger

log包定義了Logger類型,該類型提供了一些格式化輸出的方法。本包也提供了一個(gè)預(yù)定義的"標(biāo)準(zhǔn)"logger,可以通過(guò)調(diào)用函數(shù)Print系列(Print | Printf | Println),F(xiàn)atal系列(Fatal | Fatalf | Fatalln),Panic系列(Panic | Panicf | Panicln) 來(lái)使用,比自行創(chuàng)建一個(gè)logger對(duì)象更容易使用。

例如:

logger會(huì)打印每條日志信息的日期,時(shí)間,默認(rèn)輸出到系統(tǒng)的標(biāo)準(zhǔn)錯(cuò)誤。Fatal系列函數(shù)會(huì)在寫入日志信息后調(diào)用os.Exit(1)。Panic系列函數(shù)會(huì)在寫入日志信息后Panic。

1.2 配置logger

默認(rèn)情況下的logger只會(huì)提供日志的時(shí)間信息,但是很多情況下我們希望得到更多的信息,比如記錄該日志文件名和行號(hào)等。log標(biāo)準(zhǔn)庫(kù)中為我們提供了定制這些設(shè)置的方法。

log標(biāo)準(zhǔn)庫(kù)中的Flags函數(shù)會(huì)返回標(biāo)準(zhǔn)logger的輸出設(shè)置,而SetFlags函數(shù)用來(lái)設(shè)置標(biāo)準(zhǔn)logger的輸出配置。

func Flags() int
func SetFlags(flag int)

flag選項(xiàng)

log標(biāo)準(zhǔn)庫(kù)提供了如下的flag選項(xiàng),它們是一系列定義好的常量。

const (
    // 字位共同控制輸出日志信息的細(xì)節(jié)。不能控制輸出的順序和格式。
    // 在所有項(xiàng)目后會(huì)有一個(gè)冒號(hào):2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
    Ldate         = 1 << iota     // 日期:2009/01/23
    Ltime                         // 時(shí)間:01:23:23
    Lmicroseconds                 // 微秒分辨率:01:23:23.123123(用于增強(qiáng)Ltime位)
    Llongfile                     // 文件全路徑名+行號(hào): /a/b/c/d.go:23
    Lshortfile                    // 文件無(wú)路徑名+行號(hào):d.go:23(會(huì)覆蓋掉Llongfile)
    LstdFlags     = Ldate | Ltime // 標(biāo)準(zhǔn)logger的初始值
)

下面設(shè)置一下標(biāo)準(zhǔn)logger的輸出選項(xiàng):

1.3 配置日志前綴

log標(biāo)準(zhǔn)庫(kù)中還提供了關(guān)于日志信息前綴的兩種方法:

func (l *Logger) Prefix() string
func (l *Logger) SetPrefix(prefix string)

其中Prefix函數(shù)用來(lái)查看標(biāo)準(zhǔn)logger的輸出前綴,SetPrefix函數(shù)用來(lái)設(shè)置輸出前綴。

這樣我們就能夠在代碼中為我們的日志信息添加指定前綴,方便之后對(duì)日志信息進(jìn)行檢索和處理。

1.4 配置日志輸出位置

func SetOutput(w io.Writer)

SetOutput函數(shù)用來(lái)設(shè)置標(biāo)準(zhǔn)logger的輸出目的地。默認(rèn)是標(biāo)準(zhǔn)錯(cuò)誤。

例如:我們將日志信息輸出來(lái)文件中:

如果你要使用標(biāo)準(zhǔn)的logger,我們通常會(huì)把上面的配置操作寫到init函數(shù)中。

package main

import (
	"fmt"
	"log"
	"os"
)

func init() {
	logfile, err := os.OpenFile("./xx.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Println("open file fail")
		return
	}

	log.SetOutput(logfile)
	log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
}

func main() {
	log.SetPrefix("[hello]")
	log.Println("這是一條普通的日志")
}

1.5 創(chuàng)建logger

log標(biāo)準(zhǔn)庫(kù)還提供了一個(gè)創(chuàng)建新logger對(duì)象的構(gòu)造函數(shù)——New,支持我們創(chuàng)建自己的logger實(shí)例,New函數(shù)簽名如下:

func New(out io.Writer, prefix string, flag int) *Logger

New創(chuàng)建一個(gè)Logger對(duì)象,其中參數(shù)out設(shè)置日志信息寫入目的地,參數(shù)prefix會(huì)添加到生成的每條日志的前綴,參數(shù)flag定義日志的屬性(時(shí)間,文件等)。

總結(jié):log標(biāo)準(zhǔn)庫(kù)的功能有限,例如無(wú)法滿足記錄不同級(jí)別的日志情況,我們實(shí)際項(xiàng)目中根據(jù)自己的需要選擇使用第三方的日志庫(kù),如logrus,zap等。 

到此這篇關(guān)于Go標(biāo)準(zhǔn)庫(kù)Flag庫(kù)和Log庫(kù)的使用的文章就介紹到這了,更多相關(guān)Go Flag庫(kù) Log庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言時(shí)間管理利器之深入解析time模塊的實(shí)戰(zhàn)技巧

    Go語(yǔ)言時(shí)間管理利器之深入解析time模塊的實(shí)戰(zhàn)技巧

    本文深入解析了Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的time模塊,揭示了其高效用法和實(shí)用技巧,通過(guò)學(xué)習(xí)time模塊的三大核心類型(Time、Duration、Timer/Ticker)以及高頻使用場(chǎng)景,開(kāi)發(fā)者可以更好地處理時(shí)間相關(guān)的任務(wù),感興趣的朋友一起看看吧
    2025-03-03
  • golang并發(fā)編程的實(shí)現(xiàn)

    golang并發(fā)編程的實(shí)現(xiàn)

    這篇文章主要介紹了golang并發(fā)編程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • GO語(yǔ)言中的Map使用方法詳解

    GO語(yǔ)言中的Map使用方法詳解

    這篇文章主要給大家介紹了關(guān)于GO語(yǔ)言中Map使用方法的相關(guān)資料,在go語(yǔ)言中map是散列表的引用,map的類型是map[k]v,也就是常說(shuō)的k-v鍵值對(duì),需要的朋友可以參考下
    2023-08-08
  • go mayfly開(kāi)源項(xiàng)目代碼結(jié)構(gòu)設(shè)計(jì)

    go mayfly開(kāi)源項(xiàng)目代碼結(jié)構(gòu)設(shè)計(jì)

    這篇文章主要為大家介紹了go mayfly開(kāi)源項(xiàng)目代碼結(jié)構(gòu)設(shè)計(jì)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn)

    golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn)

    這篇文章主要介紹了golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Go設(shè)計(jì)模式之策略模式講解和代碼示例

    Go設(shè)計(jì)模式之策略模式講解和代碼示例

    策略是一種行為設(shè)計(jì)模式,?它將一組行為轉(zhuǎn)換為對(duì)象,?并使其在原始上下文對(duì)象內(nèi)部能夠相互替換,本文就將通過(guò)代碼示例給大家詳細(xì)的介紹一下Go的策略模式,需要的朋友可以參考下
    2023-08-08
  • Golang實(shí)現(xiàn)Redis過(guò)期時(shí)間實(shí)例探究

    Golang實(shí)現(xiàn)Redis過(guò)期時(shí)間實(shí)例探究

    這篇文章主要介紹了Golang實(shí)現(xiàn)Redis過(guò)期時(shí)間實(shí)例探究,
    2024-01-01
  • Golang實(shí)現(xiàn)JWT身份驗(yàn)證的示例詳解

    Golang實(shí)現(xiàn)JWT身份驗(yàn)證的示例詳解

    JWT(JSON Web Token)是一種開(kāi)放標(biāo)準(zhǔn)(RFC 7519),用于在網(wǎng)絡(luò)應(yīng)用間安全地傳輸聲明,本文主要為大家詳細(xì)介紹了Golang實(shí)現(xiàn)JWT身份驗(yàn)證的相關(guān)方法,希望對(duì)大家有所幫助
    2024-03-03
  • 淺談Go語(yǔ)言的error類型

    淺談Go語(yǔ)言的error類型

    這篇文章主要介紹了淺談Go語(yǔ)言的error類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • go語(yǔ)言按顯示長(zhǎng)度截取字符串的方法

    go語(yǔ)言按顯示長(zhǎng)度截取字符串的方法

    這篇文章主要介紹了go語(yǔ)言按顯示長(zhǎng)度截取字符串的方法,涉及Go語(yǔ)言操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論