最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go標準庫Flag庫和Log庫的使用

 更新時間:2024年05月14日 09:27:10   作者:兩片空白  
本文主要介紹了Go標準庫Flag庫和Log庫的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一.Flag

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

1.1 os.Args

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

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

1.2 flag包的基本使用

導入flag包

import fmt

flag參數(shù)類型

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

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

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

flag.Type()

基本格式如下:

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

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

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

需要注意的是:此時name,age, married,delay均為對應類型的指針。

flag.TypeVar()

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

例如我們要定義姓名,年齡,婚否三個命令參數(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, "時間間隔")

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

flag.Parse()

通過以上兩種方式定義號命令行flag參數(shù)后,需要通過調用flag.Parse()來對命令行參數(shù)進行解析。

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

  • -flag xxx (使用空格,一個'-'符號)
  • --flag xxx (使用空格,兩個'-'符號)
  • -flag=xxx(使用等號,一個'-'符號)
  • --flag=xxx(使用等號,兩個'--'符號)

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

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

1.2.2 flag其它函數(shù)

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

1.2.3 使用

二. Log

Go語言內置的log包實現(xiàn)了簡單的日志服務。本文介紹了標準庫log的基本使用。

1.1 使用Logger

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

例如:

logger會打印每條日志信息的日期,時間,默認輸出到系統(tǒng)的標準錯誤。Fatal系列函數(shù)會在寫入日志信息后調用os.Exit(1)。Panic系列函數(shù)會在寫入日志信息后Panic。

1.2 配置logger

默認情況下的logger只會提供日志的時間信息,但是很多情況下我們希望得到更多的信息,比如記錄該日志文件名和行號等。log標準庫中為我們提供了定制這些設置的方法。

log標準庫中的Flags函數(shù)會返回標準logger的輸出設置,而SetFlags函數(shù)用來設置標準logger的輸出配置。

func Flags() int
func SetFlags(flag int)

flag選項

log標準庫提供了如下的flag選項,它們是一系列定義好的常量。

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

下面設置一下標準logger的輸出選項:

1.3 配置日志前綴

log標準庫中還提供了關于日志信息前綴的兩種方法:

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

其中Prefix函數(shù)用來查看標準logger的輸出前綴,SetPrefix函數(shù)用來設置輸出前綴。

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

1.4 配置日志輸出位置

func SetOutput(w io.Writer)

SetOutput函數(shù)用來設置標準logger的輸出目的地。默認是標準錯誤。

例如:我們將日志信息輸出來文件中:

如果你要使用標準的logger,我們通常會把上面的配置操作寫到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標準庫還提供了一個創(chuàng)建新logger對象的構造函數(shù)——New,支持我們創(chuàng)建自己的logger實例,New函數(shù)簽名如下:

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

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

總結:log標準庫的功能有限,例如無法滿足記錄不同級別的日志情況,我們實際項目中根據(jù)自己的需要選擇使用第三方的日志庫,如logrus,zap等。 

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

相關文章

  • Go引用github包的詳細流程步驟

    Go引用github包的詳細流程步驟

    這篇文章主要給大家介紹了關于Go引用github包的詳細流程步驟,文中通過圖文介紹的非常詳細,對大家學習或者使用Go具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • 淺析Golang中調度器的關鍵機制與性能

    淺析Golang中調度器的關鍵機制與性能

    Golang的調度器是其并發(fā)模型的核心組件,負責管理Goroutine的調度和執(zhí)行,本文將從理論和代碼層面分析Golang調度器的關鍵機制,感興趣的可以了解下
    2025-03-03
  • Go中標準庫fmt包的使用小結

    Go中標準庫fmt包的使用小結

    fmt包是Go語言處理輸入輸出的核心庫,提供Print/Scan系列函數(shù)及多樣格式化動詞(如%v、%d、%s等),支持字符串格式化、掃描、自定義輸出格式及錯誤處理,廣泛用于數(shù)據(jù)格式化與輸出控制,下面就來詳細的介紹一下
    2025-09-09
  • Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉換確保類型接口編譯安全

    Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉換確保類型接口編譯安全

    這篇文章主要為大家介紹了Go類型斷言提取測試接口值動態(tài)類型及靜態(tài)轉換確保類型實現(xiàn)特定接口的編譯時安全性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Go語言寫入字符串到文件的方法

    Go語言寫入字符串到文件的方法

    這篇文章主要介紹了Go語言寫入字符串到文件的方法,實例分析了Go語言操作字符串及文本的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Golang Gin框架實現(xiàn)文件下載功能的示例代碼

    Golang Gin框架實現(xiàn)文件下載功能的示例代碼

    本文主要介紹了Golang Gin框架實現(xiàn)文件下載功能的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 淺談Golang空白導入的真正用途

    淺談Golang空白導入的真正用途

    在Go語言中,空白導入的核心用途是為了執(zhí)行被導入包的 init 函數(shù),從而觸發(fā)其初始化副作用,而無需在代碼中直接使用該包的導出標識符,下面就來詳細的介紹一下Golang空白導入的真正用途,感興趣的可以了解一下
    2026-04-04
  • Go中的字典Map增刪改查、排序及其值類型

    Go中的字典Map增刪改查、排序及其值類型

    本文詳細介紹了Go語言中Map的基本概念、聲明初始化、增刪改查操作、反轉、排序以及如何判斷鍵是否存在等操作,Map是一種基于鍵值對的無序數(shù)據(jù)結構,鍵必須是支持相等運算符的類型,值可以是任意類型,初始化Map時推薦指定容量以提高性能
    2024-09-09
  • 用go gin server來做文件上傳服務

    用go gin server來做文件上傳服務

    今天小編就為大家分享一篇關于用go gin server來做文件上傳服務,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • golang goquery selector選擇器使用示例大全

    golang goquery selector選擇器使用示例大全

    這篇文章主要為大家介紹了golang goquery selector選擇器使用示例大全,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論

榆中县| 绍兴县| 云林县| 河源市| 习水县| 高要市| 沁阳市| 东兰县| 奈曼旗| 松阳县| 余庆县| 九寨沟县| 宣化县| 江川县| 五莲县| 漳浦县| 灵璧县| 叙永县| 五家渠市| 浦县| 嘉鱼县| 金寨县| 泰宁县| 南昌市| 侯马市| 全椒县| 玉屏| 昌江| 乳山市| 富民县| 庆元县| 绥化市| 高要市| 泗洪县| 宁南县| 萝北县| 宁强县| 邵武市| 罗定市| 泗水县| 北辰区|