22 Go 常用标准库简析

Go 常用标准库

Go官方以包的形式提供功能丰富的标准库,了解这些包会让你在项目开发中如鱼得水。Go标准库很容易理解,其组织结构和命名都很人性化,日常使用时翻找大多能找到通用的功能。
Go中文网标准库翻译

下面列举以下几个常用的标准包:

1.fmt

fmt包实现了类似C语言printf和scanf的格式化I/O。
一般用于打印输出,其内置了很多非常强大的格式化符合,通过预定义文本格式可以得到任何你想要的输出结果。

常用方法:
方法签名 方法作用
fmt.Errorf(format, args…) 返回一个包含所给的的格式胡字符串以及 args 参数的错误值
fmt.Fprint(writer, args…) 按照格式 %v 和空格分割的非字符串将 args 写入 writer 中,返回写入的字节数和一个值为 error 或者 nil 的错误值
fmt.Fprintf(writer, format, args…) 按照字符串格式 format 将 args 写入 writer, 返回写入的字节数和一个值为 error 或者 nil 的错误值
fmt.Print(args…) 使用格式 %v 以空格分割的非字符串将 args 写入 os.Stdout,返回写入的字节数和一个值为 error 或者 nil 的错误值
fmt.Printf(format, args…) 使用格式化字符串 format 将 args 写入 os.Stdout
fmt.Println(args…) 使用格式 %v 以空格分割以换行符结尾将参赛 args 写入 os.Stdout
fmt.Sprint(args…) 返回 args 参数组成的字符串
fmt.Sprintf(format, args…) 返回格式 format 格式化的 args 字符串
fmt.Sprintln(args…) 返回使用格式 %v 格式化 args 后的字符串
import "fmt"
func BasePkgFmt() {
    var s string = "gofuncchan"
    //1.Print族:输出到stdout
    //直接输出
    fmt.Print(s)
    //格式化输出
    fmt.Printf("prefix + %v",s)
    //自动换行输出
    fmt.Println("go func chan")
    
    //2.Sprint族:不输出stdout,直接返回接收
    //格式化后返回给变量接收
    fmtStr := fmt.Sprintf("prefix + %v",s)
    //...
    
    //3.Fprint族:用于IO的输出,讲格式化的数据写入Writer
    dst, e := os.OpenFile("/path/to/demo.txt", os.O_CREATE|os.O_WRONLY, 0666)
    if e != nil {
        fmt.Println("打开文件错误:", e)
        return
    }
    defer dst.Close()
    fmt.Fprintf(dst,"prefix + %v",s")
    
    //其他操作可参考官方文档...
}

2.os

os包提供了操作系统函数的不依赖平台的接口。

import (
    "fmt"
    "os"
)

func BasePkgOS() {
    //获得当前工作路径:默认当前工程根目录
    fmt.Println(os.Getwd())
    //获得指定的环境变量
    fmt.Println(os.Getenv("PATH"))
    //获得所有环境变量
    fmt.Println(os.Environ())
    //(在网络中的)主机名
    fmt.Println(os.Hostname())
    //获得系统的临时文件夹路径
    fmt.Println(os.TempDir())
    //判断某字符是否路径分隔符
    fmt.Println(os.IsPathSeparator('/'))
    //获得文件信息
    fileInfo, err := os.Stat("/Users/fun/Code/mygo/bin/main")
    println(err)

    fmt.Println(fileInfo.IsDir())
    fmt.Println(fileInfo.Mode())
    fmt.Println(fileInfo.ModTime())
    fmt.Println(fileInfo.Name())
    fmt.Println(fileInfo.Size())
    fmt.Println(fileInfo.Sys())

}
3.time

time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。

import (
    "fmt"
    "time"
)

func BasePkgTime() {
    now := time.Now()

    //年月日
    fmt.Println(now.Year())
    fmt.Println(now.Month())
    fmt.Println(now.Day())

    y, m, d := now.Date()
    fmt.Println(y, "-", m, "-", d)

    //周月年中的第几天
    fmt.Println(now.Day())
    fmt.Println(now.YearDay())
    fmt.Println(now.Weekday())

    //时分秒
    fmt.Println(now.Hour())
    fmt.Println(now.Minute())
    fmt.Println(now.Second())
    fmt.Println(now.Nanosecond())

    //创建时间
    date := time.Date(2019, 3, 2, 17, 00, 00, 00, time.Now().Location())
    fmt.Println(date)

    //一天之前
    //创建时间区间
    duration, _ := time.ParseDuration("-24h0m0s") //解析时间区间
    fmt.Println(now.Add(duration))                

    //一周之前
    fmt.Println(now.Add(duration * 7))

    //一月之前
    fmt.Println(now.Add(duration * 30))

    //计算时间差
    fmt.Println("时间差=", now.Sub(time.Date(1969, time.December, 31, 0, 0, 0, 0, time.Now().Location())))
}
4.string

对字符串的处理:

  • 检索子串
  • 大小写格式化
  • 比较大小
  • 裁剪
  • 炸碎
  • 拼接
import (
    "fmt"
    "strings"
)

func BasePkgStrings() {
    var s string = "一起 go func chan!"

    //检索子串
    fmt.Println(strings.Contains(s, "go"))
    fmt.Println(strings.ContainsAny(s, "yyy"))

    //大小写格式化
    fmt.Println(strings.ToLower(s))
    fmt.Println(strings.ToUpper(s))
    fmt.Println(strings.ToTitle(s))

    //比较大小
    fmt.Println(strings.Compare(s, "一起 go func chan!"))
    fmt.Println(strings.Compare(s, "一起 Go Func Chan!"))
    fmt.Println(strings.Compare(s, "一起 go"))

    //裁剪
    fmt.Println(strings.TrimSpace("    一起 go func chan    "))
    fmt.Println(strings.Trim(s, "go"))
    fmt.Println(strings.TrimFunc(s, func(r rune) bool {
        if r == '一' {
            return true
        }
        return false
    }))

    //炸碎
    fmt.Println(strings.Split(s, " "))
    fmt.Println(strings.SplitAfter("一起,Golang", ","))
    fmt.Println(strings.SplitN("asdf,asfa,asdfas,sdfasdf,sdfa", ",", 2))

    //拼接
    fmt.Println(strings.Join([]string{"safsa", "asdfas", "asfas", "aasdfasdfsgas"}, "66666!!!!!"))

}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 原文链接 http://ironxu.com/740 本文介绍Go 标准库strings常用导出函数,结构体及其方...
    大蛇皖阅读 438评论 0 1
  • 一、数据类型转换 https://studygolang.com/articles/10838 package m...
    蓓蓓的万能男友阅读 995评论 0 1
  • fmt格式化字符串 格式:%[旗标][宽度][.精度][arg索引]动词旗标有以下几种:+: 对于数值类型总是输出...
    皮皮v阅读 1,071评论 0 3
  • 最近项目做完了,就进入无休止的修改中了。也顺便在看swift。学到了两个转场动画,也给大家看看PS:其实我一直以为...
    _Comma阅读 739评论 0 8
  • SHOW CODE 依赖二方库
    zoterap阅读 1,318评论 0 2