Go 標准庫,常用的包及功能


Go 的標准庫

Go語言的標准庫覆蓋網絡、系統、加密、編碼、圖形等各個方面,可以直接使用標准庫的 http 包進行 HTTP 協議的收發處理;網絡庫基於高性能的操作系統通信模型(Linux 的 epoll、Windows 的 IOCP);所有的加密、編碼都內建支持,不需要再從第三方開發者處獲取

Go 語言的編譯器也是標准庫的一部分,通過詞法器掃描源碼,使用語法樹獲得源碼邏輯分支等。Go 語言的周邊工具也是建立在這些標准庫上。在標准庫上可以完成幾乎大部分的需求

Go 語言的標准庫以包的方式提供支持,下表是 Go 語言標准庫中常見的包及其功能

Go語言標准庫包名 功  能
bufio 帶緩沖的 I/O 操作
bytes 實現字節操作
container 封裝堆、列表和環形列表等容器
crypto 加密算法
database 數據庫驅動和接口
debug 各種調試文件格式訪問及調試功能
encoding 常見算法如 JSON、XML、Base64 等
flag 命令行解析
fmt 格式化操作
go Go 語言的詞法、語法樹、類型等。可通過這個包進行代碼信息提取和修改
html HTML 轉義及模板系統
image 常見圖形格式的訪問及生成
io 實現 I/O 原始訪問接口及訪問封裝
math 數學庫
net 網絡庫,支持 Socket、HTTP、郵件、RPC、SMTP 等
os 操作系統平台不依賴平台操作封裝
path 兼容各操作系統的路徑操作實用函數
plugin Go 1.7 加入的插件系統。支持將代碼編譯為插件,按需加載
reflect 語言反射支持。可以動態獲得代碼中的類型信息,獲取和修改變量的值
regexp 正則表達式封裝
runtime 運行時接口
sort 排序接口
strings 字符串轉換、解析及實用函數
time 時間接口
text 文本模板及 Token 詞法器

 

fmt(格式化操作)

字符串格式化時常用動詞及功能
動  詞 功  能
%v 按值的本來值輸出
%+v 在 %v 基礎上,對結構體字段名和值進行展開
%#v 輸出 Go 語言語法格式的值
%T 輸出 Go 語言語法格式的類型和值
%% 輸出 % 本體
%b 整型以二進制方式顯示
%o 整型以八進制方式顯示
%d 整型以十進制方式顯示
%x 整型以十六進制方式顯示
%X 整型以十六進制、字母大寫方式顯示
%U Unicode 字符
%f 浮點數完整精度輸出;%.2f 2位精度輸出
%p 指針,十六進制方式顯示

 

strings(字符串操作)

package main

import (
	"fmt"
	"strings"
	"strconv"
)

func main(){
	var strTest string = " http://www.cnblog.com/kaichenkai "

	// 是否以 http:// 開頭
	ret1 := strings.HasPrefix(strTest, "http://")
	fmt.Println("HasPrefix result:", ret1)  // HasPrefix result: false

	// 是否以 .com 結尾
	ret2 := strings.HasSuffix(strTest, ".com")
	fmt.Println("HasSuffix result:", ret2)  // HasSuffix result: false

	// 返回 k 在字符串中首次出現的位置,沒有則返回 -1
	ret3 := strings.Index(strTest, "k")
	fmt.Println("Index is:", ret3)  // Index is: 23

	// 返回 k 在字符串中最后出現的位置,沒有則返回 -1
	ret4 := strings.LastIndex(strTest, "k")
	fmt.Println("LastIndex is:", ret4)  // LastIndex is: 30

	// 將 kai 換成 空格,替換1次,返回操作后的結果字符串
	ret5 := strings.Replace(strTest, "kai", " ", 1)
	fmt.Println("replace complete, strTest is:", ret5)  // replace complete, strTest is:  http://www.cnblog.com/ chenkai

	// 統計子字符串 kai 的出現次數
	ret6 := strings.Count(strTest, "kai")
	fmt.Println("Count is:", ret6)  // Count is: 2

	// 將字符串重復 n 次,返回操作后的結果字符串
	ret7 := strings.Repeat(strTest, 2)
	fmt.Println("Repeat result is:", ret7)  // Repeat result is:  http://www.cnblog.com/kaichenkai  http://www.cnblog.com/kaichenkai

	// 轉小寫
	ret8 := strings.ToLower(strTest)
	fmt.Println("Lower result is:", ret8)  // Lower result is:  http://www.cnblog.com/kaichenkai

	// 轉大寫
	ret9 := strings.ToUpper(strTest)
	fmt.Println("Upper result is:", ret9)  // Upper result is:  HTTP://WWW.CNBLOG.COM/KAICHENKAI

	// 去掉收尾空白字符,返回操作后的結果字符串
	ret10 := strings.TrimSpace(strTest)
	fmt.Println("TrimSpace:", ret10)  // TrimSpace: http://www.cnblog.com/kaichenkai

	// 去掉首尾指定字符,返回操作后的結果字符串
	ret11 := strings.Trim(strTest, "http://")
	fmt.Println("Trim:", ret11)  // Trim:  http://www.cnblog.com/kaichenkai

	// 去掉左側指定字符,返回操作后的結果字符串
	ret12 := strings.TrimLeft(strTest, " http://")
	fmt.Println("TrimLeft:", ret12)  // TrimLeft: www.cnblog.com/kaichenkai

	// 去掉右側指定字符,返回操作后的結果字符串
	ret13 := strings.TrimRight(strTest, "kai ")
	fmt.Println("TrimRight:", ret13)  // TrimRight:  http://www.cnblog.com/kaichen

	// 以空格分割,返回子串的 slice
	ret14 := strings.Fields(strTest)
	fmt.Println("Fields:", ret14)  // Fields: [http://www.cnblog.com/kaichenkai]

	// 以 .(點)進行分割,返回子串的 slice
	ret15 := strings.Split(strTest, ".")
	fmt.Println("Split:", ret15)  // Split: [ http://www cnblog com/kaichenkai ]

	// 以 $ 將 slice 中的元素進行拼接
	ret16 := strings.Join(ret15, "$")
	fmt.Println("Join:", ret16)  // Join:  http://www$cnblog$com/kaichenkai

	// 將整數轉換為字符串
	ret17 := strconv.Itoa(1000)
	fmt.Println("Itoa:", ret17)  // Itoa: 1000

	// 將字符串轉換為數字,前提是字符串是純數字組成,不然會報錯
	ret18, error := strconv.Atoi("100")
	if error == nil{
		fmt.Println("Atoi:", ret18)  // Atoi: 100
	}
}

 

time(時間接口)

使用之前需要導入 time 包

time 包中的常量

const (
    Nanosecond  Duration = 1
    Microsecond  = 1000 * Nanosecond
    Millisecond  = 1000 * Microsecond
    Second       = 1000 * Millisecond
    Minute       = 60 * Second
    Hour         = 60 * Minute
)

時間的類型為 Duration,而 Duration 實際是一個 int64 的類型,可以轉換;

Duration.String() 可以將 Duration 的值轉為字符串

 

獲取當前時間

now := time.Now()
fmt.Printf("type:%T \n", now)
fmt.Printf("value:%v \n", now)

運行結果:
type:time.Time
value:2019-05-25 17:57:57.9463214 +0800 CST m=+0.003026301

 

自定義時間

格式:func Parse(layout, value string) (Time, error)

Parse 解析一個格式化的時間字符串並返回它代表的時間。
layout 定義輸入的時間格式,value 的時間格式需與 layout 保持一致

t, error := time.Parse("2006-01-02 15:04:05", "2019-05-25 19:00:00")
if error == nil{
	fmt.Printf("%T \n", t)
	fmt.Printf("%v \n", t)
}

運行結果:
time.Time
2019-05-25 19:00:00 +0000 UTC

 

獲取time.Time 類型的 年,月,日,時,分,秒

  • year := time.Now().Year()
  • month := time.Now().Month()
  • day := time.Now().Day()
  • hour := time.Now().Hour()
  • minute := time.Now().Minute()
  • second := time.Now().Second()

 

獲取當前時間戳

// 秒級
timestamp := time.Now().Unix()
fmt.Println(timestamp)

// 毫秒
milliTimestamp := time.Now().UnixNano() / 1e6
fmt.Println(milliTimestamp) 

// 納秒
NanoTimestamp := time.Now().UnixNano()
fmt.Println(NanoTimestamp)


運行結果:
1558782662
1558782662752
1558782662755344000

 

Demo:統計程序運行耗時

func stats(){
	time.Sleep(time.Second)
}

func main(){
	var startTime int64 = time.Now().UnixNano() / 1e6
	stats()
	var endTime int64 = time.Now().UnixNano() / 1e6
	fmt.Println("use time:", endTime - startTime)
}

運行結果:
1001

 

math(數學運算)

 

sort(排序接口)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM