golang常用包


1、fmt格式化輸出等

Println   輸出
Printf    格式化輸出
Scanln 獲取參數(傳參,類似python的input) 如: var name string fmt.Scanln(&name) fmt.Println(name) //結果就是輸入的值 Scanf 接受參數(也是類似python的input作用) 例子: package main import "fmt" func main(){ var name string fmt.Println("name:") fmt.Scanf("%s",&name) fmt.Println(name) } 結果: 輸入值 輸入值 通用: %v 值的默認格式表示 %+v 類似%v,但輸出結構體時會添加字段名 %#v 值的Go語法表示 %T 值的類型的Go語法表示 %% 百分號 布爾值: %t true或false 整數: %b 表示為二進制 %c 該值對應的unicode碼值 %d 表示為十進制 %o 表示為八進制 %q 該值對應的單引號括起來的go語法字符字面值,必要時會采用安全的轉義表示 %x 表示為十六進制,使用a-f %X 表示為十六進制,使用A-F %U 表示為Unicode格式:U+1234,等價於"U+%04X" 浮點數與復數: %b 無小數部分、二進制指數的科學計數法,如-123456p-78;參見strconv.FormatFloat %e 科學計數法,如-1234.456e+78 %E 科學計數法,如-1234.456E+78 %f 有小數部分但無指數部分,如123.456 %F 等價於%f %g 根據實際情況采用%e或%f格式(以獲得更簡潔、准確的輸出) %G 根據實際情況采用%E或%F格式(以獲得更簡潔、准確的輸出) 字符串和[]byte: %s 直接輸出字符串或者[]byte %q 該值對應的雙引號括起來的go語法字符串字面值,必要時會采用安全的轉義表示 %x 每個字節用兩字符十六進制數表示(使用a-f) %X 每個字節用兩字符十六進制數表示(使用A-F) 指針: %p 表示為十六進制,並加上前導的0x

  

2、strings 字符串模塊

1、Index  輸出第一個字符(從左到右)的序號 如:strings.Index("suoning", "n") 結果:3
2、LastIndex  輸出最后一個(和上面相反)  如:strings.LastIndex("suoning", "n") 結果:5
3、Replace         替換 大於0的數表示替換幾個,0不替換,小於0替換所有 如:strings.Replace("suoning", "n", "#",-1 ) 結果:suo#i#g
4、HasPrefix      類似python的startswith,判斷以什么開頭,返回true和false ,如:strings.HasPrefix("suoning", "suo") 結果:true
5、HasSuffix     判斷以什么結尾,類似python的endswith 如:strings.HasSuffix("suoning", "ning") 結果:true
6、Contains     判斷字符串s是否包含子串s1 如:strings.Contains("suoning", "suoni")  結果:true
7、Count      出現的次數(計數) 如:strings.Count("nnnnnn", "n")  結果:6
8、Repeat     字符串*n 如:strings.Repeat("n", 6)  結果: nnnnnn
9、ToLower    所有字母小寫 如:strings.ToLower("SuoNing") 結果:suoning
10、ToUpper    所有字母大寫 如:strings.ToUpper("suoning")  結果:SUONING
11、TrimSpace  去掉前后端的所有空格 如:strings.TrimSpace("  \nsuoning\n  ")) 結果:nsuoning
12、Trim   將前后端所有符合條件的字符串去掉 如:strings.Trim("!!suoning!!", "!")    結果:su!oning
13、TrimLeft 所有前端符合條件的字符串去掉 如:strings.TrimLeft("!suoning!", "!") 結果:su!oning!
14、TrimRight 所有符合后端的字符串去掉 如:strings.TrimRight("!suoning!", "!") 結果:!su!oning
15、Fields   按照空格分割的多個字符串 如:strings.Fields(" suo ning ") 結果:[suo ning]
16、Split 分割   如:strings.Split(",suo,ning,", ",") 結果:[ suo ning ]
17、Join  拼接  如:strings.Join([]string{"abcd","ddd"}," ") 結果:abcd ddd

  

3、time 時間

 

1、Now 當前時間 如:time.Now() 結果:2019-03-04 15:33:25.044013971 +0800 CST m=+0.000231204
2、Unix 時間戳  如:time.Now().Unix() 結果:1551684901
3、Stamp  時間(沒有年月日,只精確到s) 如:time.Stamp 結果:Jan _2 15:04:05
4、Date  指定時間  如:time.Date(2008, time.November, 11, 23, 0, 0, 0, time.UTC) 結果:2008-11-11 23:00:00 +0000 UTC
5、Format 格式輸出時間 如:time.Now().Format("2006-1-02 15:04:05" ) //必須使用這個時間才行2006-1-02 15:04:05  結果:2019-3-04 15:48:01
6、ParseDuration   添加或減少時間 例如:t,_ := time.ParseDuration("-10m") //小時為-10h ,天為
   Println(time.Now().Add(t))   結果: 2019-03-04 15:55:21.436413622 +0800 CST m=-599.999598120
7、Sleep   睡眠時間, time.Second為秒 如:time.Sleep(time.Second*10) 睡眠10秒

  

時間的常量

Microsecond   微秒

Millisecond   毫秒

Second      秒

Minute    分鍾

Hour      小時

 

 

 

4、math/rand 實現了偽隨機數生成器

例子:

package main
import (
    "math/rand"
    "fmt"
    "time"
)

func init() {
    rand.Seed(time.Now().UnixNano()) //使用給定的seed來初始化生成器到一個確定的狀態。 
}

func main() {
    fmt.Println(rand.Int())     //9153536921449289609(返回一個非負的偽隨機int值)
    fmt.Println(rand.Int31())   //2037735069(返回一個int32類型的非負的31位偽隨機數)
    fmt.Println(rand.Int63())   //1132646811815532030(返回一個int64類型的非負的63位偽隨機數)
    fmt.Println(rand.Intn(100)) //95(取值范圍在[0,n)的偽隨機int值,n<=0會panic)
    fmt.Println(rand.Float32()) //0.09178123(取值范圍在[0.0, 1.0)的偽隨機float32值)
    fmt.Println(rand.Perm(5))   //[0 4 1 2 3](有n個元素的,[0,n)范圍內整數的偽隨機排列的切片)
}
結果:
8550661205998522408
1835614409
8970669406830364302
79
0.19600172
[1 3 0 2 4]

  

五、os系統模塊

1、Hostname   主機名 如:os.Hostname() 結果:localhost.localdomain <nil>
2、Getpagesize 返回底層的系統內存頁的尺寸  如:os.Getpagesize() 結果:4096
3、Environ  查看環境變量 如:os.Environ()
4、Getenv  獲取環境變量的值 如:os.Getenv("SHELL") 結果:/bin/bash
5、Setenv 設置環境變量  如:os.Setenv("a", "b") //設置環境變量a值為b
6、Clearenv  刪除所有環境變量  如:os.Clearenv()
7、Exit  退出程序,並返回給的狀態碼   如:os.Exit(2)  結果:exit status 2
8、Getuid 調用者的用戶ID  如:os.Getuid()//使用的root 結果:0 
9、Geteuid 調用者的有效用戶ID 如:os.Geteuid() 結果:0
10、Getgid 調用者的組ID  如:os.Getgid() 結果:0
11、Getegid 調用者的有效組ID  如:os.Getegid() 結果:0
12、Getgroups 調用者所屬的所有用戶組的組ID 如:os.Getgroups() 結果:[0] <nil>
13、Getpid 調用者所在進程的進程ID 如:os.Getpid() 結果:116742
14、Getppid 調用者所在進程的父進程的進程ID 如:os.Getppid() 結果:116725
15、Getwd   當前所在路徑(類似shell的pwd) 如:os.Getwd() 結果:/data/go <nil>
16、Chdir 更改當前所在目錄(類似shell的cd) 如:os.Chdir("/tmp/")  //切換到/tmp目錄下
17、Mkdir  創建目錄(shell的mkdir一樣) 如:os.Mkdir("/tmp/test") 
18、MkdirAll  遞歸創建目錄(shell的mkdir -p) 如:os.MkdirAll("/tmp/test1/test2/test3")
19、Rename  更改文件或目錄的名字 如:os.Rename("/tmp/test1", "/tmp/test2") 
20、Remove  刪除文件或目錄  如:os.Remove("/tmp/test2/test2")  
21、RemoveAll 遞歸刪除 如:os.RemoveAll("/tmp/test1/")
22、Create  創建文件,存在會清空  如:os.Create("/tmp/test")
23、Open  打開文件 如:os.Open("/tmp/test") 

  

 六、flag來解析命令行參數

flag包,可以方便的解析命令行參數,而且參數順序可以隨意

例子:

[root@localhostgo_test]#cat flag.go 
package main
import (
    "fmt"
    "flag"
)

func main(){
    var user string 
    var password string 
    var host string 
    var port int 
    

    //"u"指的-u是user參數
    flag.StringVar(&user,"u","root","用戶名,默認為root")
    flag.StringVar(&password,"p","","默認為空")
    flag.StringVar(&host,"h","localhost","host參數,默認localhost")
    flag.IntVar(&port,"port",999,"端口")
    //轉換,必須調用該方法
    flag.Parse()
    fmt.Println(user,password,host,port)
 
}
[root@localhostgo_test]#go run  flag.go  -u root -p 123456  -h 192.168.1.1   -port 9999
root 123456 192.168.1.1 9999
flag例子

 

七、encoding/json 用於處理json數據

 

1、json的序列化

json 序列化是指,將有 key-value 結構的數據類型(比如結構體、map、切片)序列化成 json 字符串的操作

例子:

package main
import ( 
    "fmt" 
    "encoding/json"
)

//定義一個結構體
type Monster struct {
    Name string `json:"json_name"` //`json:"xxx"` 反射使用
    Age int     `json:"age_test"`
    Sal float64
    Skill string
}

func testStruct() {
    //演示
    monster := Monster{
        Name :"張三", 
        Age : 20, 
        Sal : 8000.0,
        Skill : "普通拳",
    }
    //將 monster 序列化
    data, err := json.Marshal(&monster)
    if err != nil {
        fmt.Printf("序列號錯誤 err=%v\n", err)
    }
    //輸出序列化后的結果
    fmt.Printf("struct序列化后=%v\n", string(data))
}

//將 map 進行序列化
func testMap() {
    //定義一個 map
    var a map[string]interface{}
    //使用 map,需要 make
    a = make(map[string]interface{})
    a["name"] = "李四" 
    a["age"] = 30
    a["sal"] =  5000
    a["skill"] = "劍" 
    //將 a 這個 map 進行序列化
    data, err := json.Marshal(a)
    if err != nil {
        fmt.Printf("序列化錯誤 err=%v\n", err)
    }
    //輸出序列化后的結果
    fmt.Printf("map 序列化后=%v\n", string(data))
}

//切片序列化
func testSlice() {
    var slice []map[string]interface{}
    var m1 map[string]interface{}
    //使用 map 前,需要先 make
    m1 = make(map[string]interface{})
    m1["name"] = "jack" 
    m1["age"] = "7" 
    m1["address"] = "北京"
    slice = append(slice, m1)
    var m2 map[string]interface{}
    //使用 map 前,需要先 make
    m2 = make(map[string]interface{})
    m2["name"] = "王五"
    m2["age"] = "21" 
    m2["address"] = [2]string{"墨西哥","夏威夷"}
    slice = append(slice, m2)
    //將切片進行序列化操作
    data, err := json.Marshal(slice)
    if err != nil {
        fmt.Printf("序列化錯誤 err=%v\n", err)
    }
    //輸出序列化后的結果
    fmt.Printf("slice 序列化后=%v\n", string(data))
}

//對基本數據類型序列化,對基本數據類型進行序列化意義不大
func testFloat64() {
    var num1 float64 = 2345.67
    //對 num1 進行序列化
    data, err := json.Marshal(num1)
    if err != nil {
        fmt.Printf("序列化錯誤 err=%v\n", err)
    }
    //輸出序列化后的結果
    fmt.Printf("float64 序列化后=%v\n", string(data))
}

func main(){
    testStruct()
    fmt.Println("========================")
    testMap()
    fmt.Println("========================")
    testSlice()
    fmt.Println("========================")
    testFloat64()  
    

}



###########結果############
struct序列化后={"json_name":"張三","age_test":20,"Sal":8000,"Skill":"普通拳"}
========================
map 序列化后={"age":30,"name":"李四","sal":5000,"skill":"劍"}
========================
slice 序列化后=[{"address":"北京","age":"7","name":"jack"},{"address":["墨西哥","夏威夷"],"age":"21","name":"王五"}]
========================
float64 序列化后=2345.67
json序列化

 

2、反序列化

反序列化是指,將 json 字符串反序列化成對應的數據類型(比如結構體、map、切片)的操作

1、 在反序列化一個json 字符串時,要確保反序列化后的數據類型和原來序列化前的數據類型一致。
2、如果 json 字符串是通過程序獲取到的,則不需要再對 “ 轉義處

例子:

package main
import ( 
    "fmt"
    "encoding/json"
)
//定義一個結構體
type Monster struct {
    Name string
    Age int
    Birthday string  
    Sal float64
    Skill string
}
//演示將 json 字符串,反序列化成 struct
func unmarshalStruct() {
    //說明 str 在項目開發中,是通過網絡傳輸獲取到.. 或者是讀取文件獲取到
    str := "{\"Name\":\"牛魔王\",\"Age\":500,\"Birthday\":\"2011-11-11\",\"Sal\":8000,\"Skill\":\"牛魔拳\"}"
    //定義一個 Monster 實例
    var monster Monster
    err := json.Unmarshal([]byte(str), &monster)
    if err != nil {
        fmt.Printf("unmarshal err=%v\n", err)
    }
    fmt.Printf("反序列化后 monster=%v monster.Name=%v \n", monster, monster.Name)
}
//演示將 json 字符串,反序列化成 map
func unmarshalMap() {
    str := "{\"address\":\"洪崖洞\",\"age\":30,\"name\":\"紅孩兒\"}"
    //定義一個 map
    var a map[string]interface{}
    //反序列化
    //注意:反序列化 map,不需要 make,因為 make 操作被封裝到 Unmarshal 函數
    err := json.Unmarshal([]byte(str), &a)
    if err != nil {
        fmt.Printf("unmarshal err=%v\n", err)
}
    fmt.Printf("反序列化后 a=%v\n", a)
}
//演示將 json 字符串,反序列化成切片
func unmarshalSlice() {
    str := "[{\"address\":\"北京\",\"age\":\"7\",\"name\":\"jack\"}," +
    "{\"address\":[\"墨西哥\",\"夏威夷\"],\"age\":\"20\",\"name\":\"tom\"}]"
    //定義一個 slice
    var slice []map[string]interface{}
    //反序列化,不需要 make,因為 make 操作被封裝到 Unmarshal 函數
    err := json.Unmarshal([]byte(str), &slice)
        if err != nil {
        fmt.Printf("unmarshal err=%v\n", err)
    }
    fmt.Printf("反序列化后 slice=%v\n", slice)
}
func main() {
    unmarshalStruct()
    fmt.Println("===============")
    unmarshalMap()
    fmt.Println("===============")
    unmarshalSlice()
}




##############結果###########
反序列化后 monster={牛魔王 500 2011-11-11 8000 牛魔拳} monster.Name=牛魔王 
===============
反序列化后 a=map[address:洪崖洞 age:30 name:紅孩兒]
===============
反序列化后 slice=[map[address:北京 age:7 name:jack] map[address:[墨西哥 夏威夷] age:20 name:tom]]

 

 

 

。。。未完


免責聲明!

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



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