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(排序接口)

Go 标准库,常用的包及功能的更多相关文章

  1. arm的编译器里已经有C标准库的lib包了,android为啥还要自己再实现呢

    arm的编译器里已经有C标准库的lib包了,android为啥还要自己再实现呢 google自己搞的bionic libc来替代glibc想来是有原因的,本来glibc也是lgpl,应该也没有版权问题 ...

  2. Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天

    Go1.13 标准库的 http 包爆出重大 bug,你的项目中招了吗? 原创: 王亚楼 Go语言中文网 今天

  3. Python标准库---子进程 (subprocess包)

    这里的内容以Linux进程基础和Linux文本流为基础.subprocess包主要功能是执行外部的命令和程序.比如说,我需要使用wget下载文件.我在Python中调用wget程序.从这个意义上来说, ...

  4. Django的标准库django.contrib包介绍(转)

    Django.contrib是啥? 1.它是一个强大的功能包,是Django的标准库.2.Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一 ...

  5. Django的标准库django.contrib包介绍

    原文地址:http://www.nowamagic.net/academy/detail/1318716 前面我们激活了 Django 后台,我们要使用自动化的站点管理工具(django.contri ...

  6. 第十二章 Python标准库内置模块和包简介

    在<第十章 Python的模块和包>老猿详细介绍了Python模块和包的相关概念,模块和包是Python功能扩展的重要手段,也是Python开放的重要特征.为了提供强大的能力,Python ...

  7. C标准库常用函数概要

    stdio.h printf()/fprintf() printf的返回值是打印的字符数, 发生错误则返回负数 scanf()/fscanf() scanf的返回值是成功赋值的变量个数, 失败则返回E ...

  8. Spring常用jar包的功能

    jar名称 描述 spring-framework.jar spring框架比较完整的功能,core+aop+ioc+transaction spring-core.jar 基本上的核心工具类,一些u ...

  9. SPL标准库常用的数据结构

    栈数据结构 $stack = new SplStack(); //栈数据结构->先进后出 2 $stack->push('data1'); //入栈 $stack->push('da ...

随机推荐

  1. Ubuntu16.04 + cuda9.0 +cudnn7.1(转载)

    转载一个详细可用的ubuntu16.04+cuda9.0+cudnn7.1教程. 0 - 参考材料 https://blog.csdn.net/Umi_you/article/details/8026 ...

  2. pytorch常用损失函数

    损失函数的基本用法: criterion = LossCriterion() #构造函数有自己的参数 loss = criterion(x, y) #调用标准时也有参数 得到的loss结果已经对min ...

  3. Qt编写控件属性设计器5-属性中文

    一.前言 在上一篇文章中就提到过,使用qtpropertybrowser来加载属性,对应加载到的属性是英文的,也就是控件类中Q_PROPERTY描述的变量名称,如何变成中文或者其他语言显示呢?这个就需 ...

  4. 分析spring事务@Transactional注解在同一个类中的方法之间调用不生效的原因及解决方案

    问题: 在Spring管理的项目中,方法A使用了Transactional注解,试图实现事务性.但当同一个class中的方法B调用方法A时,会发现方法A中的异常不再导致回滚,也即事务失效了. 当这个方 ...

  5. Linux下通过shell进MySQL执行SQL或导入脚本

    这条命令表示通过用户名和密码执行shell然后在shell里面执行一个建表语句: USER="root" PASS="root" mysql -u $USER ...

  6. 【Leetcode_easy】788. Rotated Digits

    problem 788. Rotated Digits solution1: class Solution { public: int rotatedDigits(int N) { ; ; i< ...

  7. iOS-UITextField和UITextView隐藏键盘

    UITextField和UITextView隐藏键盘 71 views, IOS DEV, by admin. self._textField.returnKeyType=UIReturnKeyDon ...

  8. 游戏协议模拟测试工具(TcpEngine)使用简介

    功能介绍 在有的网络开发需要走二进制流协议场景,比如网络游戏开发,在开发阶段,前端和后端协商好协议后就分别开发.在开发写代码的时候,有时需要对端发送一条完整的协议过来触发一下自己的代码,进行单步调试或 ...

  9. location匹配禁止页面缓存

    php禁止页面缓存的办法 //设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可. add_header Expires: Mon, 26 Jul 1997 05:00:00 GMT ...

  10. Qt 和 Boost关于信号和槽的对比说明

    对比 无论是 Qt 的实现方式还是 Boost 的实现方式,除了必须的定义信号和槽的类之外,都不需要额外的类. 两种实现都解决了类爆炸的问题.下面让我们对照着来看一下我们前面的分析. 两个不同的术语以 ...