深圳网站建设排名,按天计费的seo弊端,程序员和做网站那个好找工作,做网站条件包以及常用内置包归纳 包的概念math包time包sync包 Go 语言官方的包文档网站#xff1a;包文档 包的概念
Go语言是使用包来组织源代码的#xff0c;包#xff08;package#xff09;是多个 Go 源码的集合#xff0c;是一种高级的代码复用方案。
任何源代码文件必须属于某… 包以及常用内置包归纳 包的概念math包time包sync包 Go 语言官方的包文档网站包文档 包的概念
Go语言是使用包来组织源代码的包package是多个 Go 源码的集合是一种高级的代码复用方案。
任何源代码文件必须属于某个包同时源码文件的第一行有效代码必须是package pacakgeName 语句通过该语句声明自己所在的包。
包的习惯用法
包名一般是小写的使用一个简短且有意义的名称。包名一般要和所在的目录同名也可以不同包名中不能包含- 等特殊符号。包名为 main 的包为应用程序的入口包编译不包含 main 包的源码文件时不会得到可执行文件。一个文件夹下的所有源码文件只能属于同一个包同样属于同一个包的源码文件不能放在多个文件夹下。
包的导入
import 包的路径分为两种1、单行导入
import 包 1 的路径
import 包 2 的路径2、多行导入
import (包 1 的路径包 2 的路径
)包的绝对路径就是GOROOT/src/ 或 GOPATH后面包的存放路径
包的引用格式 四种
1、标准引用格式
import fmt2、自定义别名引用格式
//其中F就是fmt包的别名,使用时我们可以使用F.来代替标准引用格式的fmt.来作为前缀使用fmt包中的方法
import F fmt3、省略引用格式
import . fmt这种格式相当于把 fmt 包直接合并到当前程序中在使用 fmt 包内的方法是可以不用加前缀fmt.直接引用。
4、匿名引用格式 在引用某个包时如果只是希望执行包初始化的 init 函数而不使用包内部的数据时可以使用匿名引用格式如下所示
import _ fmtmath包
Abs(x float64) float64返回 x 的绝对值。Ceil(x float64) float64返回大于或等于 x 的最小整数。Floor(x float64) float64返回小于或等于 x 的最大整数。Max(x, y float64) float64返回 x 和 y 中的较大值。Min(x, y float64) float64返回 x 和 y 中的较小值。Mod(x, y float64) float64取余运算Pow(x, y float64) float64返回 x 的 y 次方。Sqrt(x float64) float64返回 x 的平方根。Log(x float64) float64求自然对数Log2(x float64) float64求2为底自然对数Log10(x float64) float64:求10为底自然对数Sin(x float64) float64返回 x 的正弦值。Cos(x float64) float64返回 x 的余弦值。Tan(x float64) float64返回 x 的正切值。Trunc(x float64)返回x的整数部分IsNaN(f float64) (is bool)判断f是否表示一个NaN(Not A Number)的值。 Go语言中除数为0时并不会返回error或者nil而是返回无穷大— NAN正无穷表明数字太大溢出的情况 time包
在Go语言的 time 包里面有两个时区变量如下
time.UTCUTC 时间(协调世界时,是世界上最主要的时间标准之一,如东八区的北京时间是 UTC8,西五区的纽约时间是 UTC-5)time.Local本地时间
time.Now() 函数来获取当前的时间对象然后通过事件对象来获取当前的时间信息time.Unix() 函数将时间戳转为时间格式,时间戳是自 1970 年 1 月 1 日08:00:00GMT至当前时间的总毫秒数它也被称为 Unix 时间戳UnixTimestamp 如下
package main
import (fmttime
)
func main() {now : time.Now() //获取当前时间timestamp : now.Unix() //时间戳timeObj : time.Unix(timestamp, 0) //将时间戳转为时间格式fmt.Println(timeObj)year : timeObj.Year() //年month : timeObj.Month() //月day : timeObj.Day() //日hour : timeObj.Hour() //小时minute : timeObj.Minute() //分钟second : timeObj.Second() //秒fmt.Printf(%d-%02d-%02d %02d:%02d:%02d\n, year, month, day, hour, minute, second)
}运行结果如下 func (t Time) Sub(u Time) Duration求两个时间之间的差值 返回一个时间段 t - u 的值。如果结果超出了 Duration 可以表示的最大值或最小值将返回最大值或最小值要获取时间点 t - dd 为 Duration可以使用 t.Add(-d) func (t Time) Equal(u Time) bool:判断两个时间是否相同func (t Time) Before(u Time) bool:判断一个时间点是否在另一个时间点之前 如果 t 代表的时间点在 u 之前则返回真否则返回假 func (t Time) After(u Time) bool:判断一个时间点是否在另一个时间点之后 如果 t 代表的时间点在 u 之后则返回真否则返回假。 sync包
sync.Mutex互斥锁它使得程序互斥访问共享资源不可以同时访问独占资源时候可以使用互斥锁的0值是未锁定的互斥体sync.RWMutex读写锁分为两种读锁和写锁。当一个goroutine获取读锁之后其他的goroutine如果是获取读锁会继续获得锁如果是获取写锁就会等待当一个goroutine获取写锁之后其他的goroutine无论是获取读锁还是写锁都会等待。sync.WaitGroup等待组指的是等待一组goroutine完成 sync.WaitGroup拥有一个内部计数器。当计数器等于0时则Wait()方法会立即返回。否则它将阻塞执行Wait()方法的goroutine直到计数器等于0时为止。 要增加计数器我们必须使用Add(int)方法。要减少它我们可以使用Done()将计数器减1也可以传递负数给Add方法把计数器减少指定大小Done()方法底层就是通过Add(-1)实现的 如下
wg : sync.WaitGroup{}for i : 0; i 8; i {wg.Add(1)go func() {// Do somethingwg.Done()}()
}wg.Wait()
// 继续往下执行...sync.Map是一个并发版本的Go语言的map
使用Store(interface {}interface {})添加元素。使用Load(interface {}) interface {}检索元素。使用Delete(interface {})删除元素。使用LoadOrStore(interface {}interface {}) (interface {}bool)检索或添加之前不存在的元素。如果键之前在map中存在则返回的布尔值为true。使用Range遍历元素。
示例代码如下
m : sync.Map{}// 添加元素
m.Store(1, one)
m.Store(2, two)// 获取元素1
value, contains : m.Load(1)
if contains {fmt.Printf(%s\n, value.(string))
}// 返回已存value否则把指定的键值存储到map中
value, loaded : m.LoadOrStore(3, three)
if !loaded {fmt.Printf(%s\n, value.(string))
}m.Delete(3)// 迭代所有元素
m.Range(func(key, value interface{}) bool {fmt.Printf(%d: %s\n, key.(int), value.(string))return true
})sync.Pool是一个并发池负责安全地保存一组对象 两个导出方法 Get() interface{} 用来从并发池中取出元素。 Put(interface{}) 将一个对象加入并发池。
来自各个文章的总结还有的包还在更新中~