golang第五卷---包以及常用内置包归纳

包以及常用内置包归纳

  • 包的概念
  • 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 "fmt"

2、自定义别名引用格式

//其中F就是fmt包的别名,使用时我们可以使用F.来代替标准引用格式的fmt.来作为前缀使用fmt包中的方法
import F "fmt"

3、省略引用格式

import . "fmt"

这种格式相当于把 fmt 包直接合并到当前程序中,在使用 fmt 包内的方法是可以不用加前缀fmt.,直接引用。

4、匿名引用格式
在引用某个包时,如果只是希望执行包初始化的 init 函数,而不使用包内部的数据时,可以使用匿名引用格式,如下所示:

import _ "fmt"

math包

  1. Abs(x float64) float64:返回 x 的绝对值。
  2. Ceil(x float64) float64:返回大于或等于 x 的最小整数。
  3. Floor(x float64) float64:返回小于或等于 x 的最大整数。
  4. Max(x, y float64) float64:返回 x 和 y 中的较大值。
  5. Min(x, y float64) float64:返回 x 和 y 中的较小值。
  6. Mod(x, y float64) float64:取余运算
  7. Pow(x, y float64) float64:返回 x 的 y 次方。
  8. Sqrt(x float64) float64:返回 x 的平方根。
  9. Log(x float64) float64:求自然对数
  10. Log2(x float64) float64:求2为底自然对数
  11. Log10(x float64) float64:求10为底自然对数
  12. Sin(x float64) float64:返回 x 的正弦值。
  13. Cos(x float64) float64:返回 x 的余弦值。
  14. Tan(x float64) float64:返回 x 的正切值。
  15. Trunc(x float64):返回x的整数部分
  16. IsNaN(f float64) (is bool):判断f是否表示一个NaN(Not A Number)的值。

Go语言中,除数为0时并不会返回error或者nil,而是返回无穷大—> NAN(正无穷),表明数字太大溢出的情况

time包

在Go语言的 time 包里面有两个时区变量,如下:

  • time.UTC:UTC 时间(协调世界时,是世界上最主要的时间标准之一,如东八区的北京时间是 UTC+8,西五区的纽约时间是 UTC-5)
  • time.Local:本地时间
  1. time.Now() 函数来获取当前的时间对象,然后通过事件对象来获取当前的时间信息
  2. time.Unix() 函数将时间戳转为时间格式,时间戳是自 1970 年 1 月 1 日(08:00:00GMT)至当前时间的总毫秒数,它也被称为 Unix 时间戳(UnixTimestamp)
    如下:
package main
import ("fmt""time"
)
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)
}

运行结果如下:

在这里插入图片描述

  1. func (t Time) Sub(u Time) Duration:求两个时间之间的差值

返回一个时间段 t - u 的值。如果结果超出了 Duration 可以表示的最大值或最小值,将返回最大值或最小值,要获取时间点 t - d(d 为 Duration),可以使用 t.Add(-d)

  1. func (t Time) Equal(u Time) bool:判断两个时间是否相同
  2. func (t Time) Before(u Time) bool:判断一个时间点是否在另一个时间点之前

如果 t 代表的时间点在 u 之前,则返回真,否则返回假

  1. func (t Time) After(u Time) bool:判断一个时间点是否在另一个时间点之后

如果 t 代表的时间点在 u 之后,则返回真,否则返回假。

sync包

  1. sync.Mutex互斥锁,它使得程序互斥访问共享资源(不可以同时访问,独占资源时候可以使用),互斥锁的0值是未锁定的互斥体
  2. sync.RWMutex读写锁,分为两种:读锁和写锁。当一个goroutine获取读锁之后,其他的goroutine如果是获取读锁会继续获得锁,如果是获取写锁就会等待;当一个goroutine获取写锁之后,其他的goroutine无论是获取读锁还是写锁都会等待。
  3. 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()
// 继续往下执行...
  1. 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
})
  1. sync.Pool是一个并发池,负责安全地保存一组对象
    两个导出方法:
    Get() interface{} 用来从并发池中取出元素。
    Put(interface{}) 将一个对象加入并发池。

来自各个文章的总结,还有的包还在更新中~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

听GPT 讲Rust源代码--src/tools(37)

File: rust/src/tools/clippy/clippy_lints/src/explicit_write.rs 在Rust源代码中&#xff0c;explicit_write.rs这个文件是Clippy的一个lint插件&#xff0c;其作用是检查代码中的write!、writeln!宏使用时的不当或繁琐的情况&#xff0c;并给出相关的警告或建议。 具体来说&…

可视化设计器介绍

1 、可视化设计器分为&#xff1a; 目录树&#xff1a;包含“页面、逻辑、数据、流程”四种可视化设计模块的切换&#xff0c;及其下设计内容管理与树形展示应用信息与操作区域&#xff1a;支持应用的“预览、发布、自定义主题样式”等操作标签页&#xff1a;支持各个编辑页面…

java方法(method)概述,计算机中的执行原理及案例

引言&#xff1a; 学习了方法&#xff08;method&#xff09;&#xff0c;整理下心得 概述&#xff1a; 1&#xff0c;什么是方法&#xff08;method&#xff09;: 方法是一种语法结构&#xff0c;它可以把一段代码封装成一个功能&#xff0c;以便重复利用 2&#xff0c;使用…

Vue实现导出Excel表格,提示“文件已损坏,无法打开”的解决方法

一、vue实现导出excel 1、前端实现 xlsx是一个用于读取、解析和写入Excel文件的JavaScript库。它提供了一系列的API来处理Excel文件。使用该库&#xff0c;你可以将数据转换为Excel文件并下载到本地。这种方法适用于在前端直接生成Excel文件的场景。 安装xlsx依赖 npm inst…

【计算机网络实验】educoder实验八 IPV6网络及其路由 头歌

第一关 IPV6网络基础 //千万不要破坏文档原有结构与内容&#xff01;&#xff01;&#xff01; //以下均为判断题&#xff0c;F&#xff1a;表示错误&#xff0c;T&#xff1a;表示正确 //答案必须写在相应行末尾括号内&#xff0c;F与T二选一&#xff0c;大写 // 1、ipv6协议…

洛谷:集合与差分

1.学籍管理(map&#xff09; #include<iostream> #include<map> #include<string> using namespace std; map<string,int>a; int n; string name; int op,score; int main() {cin>>n;for(int i1;i<n;i){cin>>op;if(op!4)cin>>na…

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…

玩转MYSQL|详细分析mysql-MGR集群搭建

目录 1、简介 2、环境准备 2.1 数据库服务器规划 2.2 安装mysql5.7.20 2.3 设置hostname和ip映射 3、创建复制环境 3.1 服务器host68.cn 3.1.1 配置/etc/my.cnf 3.1.2 服务器host68.cn上建立复制账号&#xff1a; 3.1.3 在mysql服务器host68.cn上安装group replicatio…

redis客户端

3、Redis客户端 3.1 Redis自带的客户端 带密码进入客户端 [rootqianfeng01 redis-4.0.14]# src/redis-cli -h 192.168.10.101 -p 6379 -a root Warning: Using a password with -a option on the command line interface may not be safe. 192.168.10.101:6379> keys * (…

js遍历后端返回的集合将条件相同的放入同一个数组内

项目场景&#xff1a; echarts折线图需要根据条件动态展示多条不同曲线 解决方案&#xff1a; 后端直接将使用sql将数据查询出来返回即可,因为我这里不是Java使用的C#不是很熟练后台不好写逻辑,所以在前端js完成的 代码如下: function createline(villagename, buildingname…

【MySQL】主从异步复制配置

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

rime中州韵 easyEnglish输入法

根据前面的几个自定义配置的练手,想必大家已经熟悉了所谓的 程序文件夹&#xff0c;用户文件夹&#xff0c;custom.yam 文档这几个概念了。在接下来的自定义配置讲述中&#xff0c;将默认大家是懂得所做的修改应该在哪个文件中进行的&#xff0c;讲述的速度将会有所加快。 今天…

给idea添加右键打开功能

添加文件夹右键程序打开 开始运行regedit 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 1、右键shell目录新建项Idea 2、右键Idea新建command 3、选择Idea 右侧空白出新建字符串 名字为Icon 值填入idea的运行程序地址 4、选择command 默认项填入idea的运行…

25、商城系统(七):商城项目基础功能pom.xml(重要),mybatis分页插件

截止这一章,我们就不把重心放在前端,后台的基础代码,因为后面都是业务层面的crud。 前端直接替换这两个文件夹即可,后台代码也直接复制: 一、重新更新一下所有的pom.xml 这个地方我踩了好多坑,最后得到一个完整的pom.xml,建议大家直接用我的pom.xml替换即可。 1.comm…

08-C++ STL-容器

c STL-容器 1. 引入 我们想存储多个学员的信息&#xff0c;现在学员数量不定&#xff1f; 我们可以创建一个 数组 存储学员的信息但是这个数组大小是多少呢?过大会导致空间浪费&#xff0c;小了又需要扩容对其中的数据进行操作也较为复杂每次删除数据后还要对其进行回收等操…

2023 NCTF writeup

CRYPTO Sign 直接给了fx,gx&#xff0c;等于私钥给了&#xff0c;直接套代码&#xff0c;具体可以参考&#xff1a; https://0xffff.one/d/1424 fx [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…

【逗老师的无线电】ICOM IC-705终端模式Terminal Mode直连反射器配置-内置网关IP直连篇

各位友台大家好呀&#xff0c;逗老师最近整了一台IC-705&#xff0c;最吸引人的莫过于这玩意可以IP直连反射器。下面简单介绍一下这个功能和其配置方法 目录 一、功能二、依赖条件三、配置3.1、IC-705连接WIFI3.2、配置Terminal Mode3.2.1、点击MENU进入菜单&#xff0c;翻到第…

WEB 3D技术 three.js 雾 基础使用讲解

本文 我们说一下 雾 在three.js中有一个 Fog类 它可以创建线性雾的一个效果 她就是模仿现实世界中 雾的一个效果 你看到远处物体会组件模糊 直到完全被雾掩盖 在 three.js 中 有两种雾的形式 一种是线性的 一种是指数的 个人觉得 线性的会看着自然一些 他是 从相机位置开始 雾…

报错大全(未完待续)

springboot Could not find artifact org.springframework.boot:spring-boot-maven-plugin 报错环境&#xff1a;昨天的springboot项目的pom文件正常&#xff0c;今天再打开就会有些依赖爆红 解决步骤&#xff1a; 去maven的仓库里找你下载的依赖文件&#xff0c;路径是你的…

蓝桥杯C/C++程序设计——特别数的和

题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 0&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共 28 个&#xff0c;他们的和是 574。 请问&#xff0c;在 1 到 n 中&#xff0c;所有这样的数的…