Go常用包

包的本质:创建不同的文件夹,来存放程序文件

Go语言的源码复用建立再包package基础之上

main包

Go语言的入口 main()函数所在的包必须是main包

main包需要引用代码,则需要通过import导入

包名为main的包为应用程序的入口包,其他包不能使用

package

Src目录是以代码包的形式组织并保存Go源码问价的,每个代码包都和src目录下的文件夹一一对应,每个子目录都是一个代码包。代码包包名和文件目录名,不要求一致,但是同属一个目录下的源码文件的包名必须一致

包的导入

1、相对路径导入包

import "./pkg"

2、默认模式导入

import "crypto/rand"

import R "crypto/rand" 将此包重命名 使用 可以直接通过R.rand()

import . "crypto/rand" 简便模式 可以以直接调用此包下的函数等 不建议使用

import _ "crypto/rand" 匿名导入,仅让该包执行init初始化函数

init()函数

init()先于main函数执行,init应用在设置包、初始化变量或者其它要在程序运行前优先完成的引导工作。即使包被导入多次,初始化只需要一次

init函数通常用来:

  • 对变量进行初始化
  • 检查/修复程序的状态
  • 注册
  • 运行一次计算

init函数不需要传入参数,也不会返回任何值,init没有被声明,也不能被引用

init函数不需要传入参数,也不会返回任何值,init没有被声明,也不能被引用

init函数不需要传入参数,也不会返回任何值,init没有被声明,也不能被引用

init执行顺序

为了能够使用导入的包,首先必须将其初始化,初始化总是以单线程执行,并且按照包的依赖关系顺序执行,这通过Golang的运行时系统控制,步骤如下:

  • 初始化导入的包(递归导入)

  • 对包块中声明的变量进行计算和分配初始值

  • 执行包中的init函数

PS:有一种情况:一个被导入包下有多个go文件中都含有init方法 顺序是什么样呢? 按照go文件名的首字母先后顺序排列

strings包

func main() {
str := "我爱你中国,我爱你中国" fmt.Println(str) //Contains 是否包含指定的内容,返回布尔值
fmt.Println(strings.Contains(str, "爱"))
fmt.Println(strings.Contains(str, "不爱")) //ContainAny 是否包含指定的内容中任意一个 有一个即可
fmt.Println(strings.ContainsAny(str, "不爱")) //Count 统计指定内容再字符串中出现的次数
fmt.Println(strings.Count(str, "爱")) //HasPrefix 以xx开头
filename := "20221116.mp4"
if strings.HasPrefix(filename, "2022") {
fmt.Println(filename)
}
//HasSuffix 以xx结尾
if strings.HasSuffix(filename, "mp4") {
fmt.Println(filename)
} //Index 寻找指定字符串第一次出现的位置,返回下标 没有找到则返回-1
fmt.Println(strings.Index(str, "没有")) //IndexAny 寻找指定字符串任意一个字符第一次出现的位置,返回下标 没有找到则返回-1
fmt.Println(strings.IndexAny(str, "爱他")) //LastIndex 寻找指定字符串最后一次出现的位置,没有返回-1
fmt.Println(strings.LastIndex(str, "中")) //join用来指定符号来拼接字符串
str2 := []string{"a", "b", "cd", "e"}
str3 := strings.Join(str2, "")
fmt.Println(str3) //split按照指定符号分割字符
str4 := strings.Split(str3, "") //指定的字符没有找到就返回原字符串
fmt.Println(str4) //Repeat 重复拼接自己
str5 := strings.Repeat(str, 2)
fmt.Println(str5) //Replace 替换指定字符,n代表替换个数,-1替换全部
str6 := strings.Replace(str, "爱", "恨", 12)
fmt.Println(str6) //ToUpper 字母转大写 ToLower 字母转小写
str7 := "sdfAjkkajsd"
fmt.Println(strings.ToUpper(str7))
fmt.Println(strings.ToLower(str7)) //截取字符串 str[start,end]
str8 := str7[:3]
fmt.Println(str8)
}

strconv包

可是实现字符串和基本类型的转换

strconv.Parsexxx是将字符串转换为相对于的基本类型

strconv.Formatxxx是将对应的基本类型转换为字符串

func main() {
s1 := "true" //将字符串转换为bool类型
b1, err := strconv.ParseBool(s1) //记得看一个源码 返回什么类型
if err != nil {
fmt.Println(err)
}
fmt.Printf("%T\n", b1) //bool
fmt.Println(b1) //将bool类型转换为字符串
s2 := strconv.FormatBool(b1)
fmt.Printf("%T\n", s2)
fmt.Println(s2) //将字符串转换为整型 int 有二进制,八进制 十进制等
s3 := "100"
n1, _ := strconv.ParseInt(s3, 10, 64) //目标字符串 进制 数字大小限制
fmt.Printf("%T\n", n1)
fmt.Println(n1) //整型转换为字符串
s4 := strconv.FormatInt(100, 2) //目标数值 进制
fmt.Printf("%T\n", s4)
fmt.Println(s4) //一般情况下字符串与int 10进制转换可以采用atoi itoa实现快速转换
n2, _ := strconv.Atoi("-10")
fmt.Printf("%T\n", n2)
fmt.Println(n2 + 10) s5 := strconv.Itoa(10)
fmt.Printf("%T\n", s5)
fmt.Println(s5) }

时间与时间戳

获取日期 时间

func time1() {

   //获取当前时间
now := time.Now()
fmt.Println(now) //获取当前年份
year := now.Year()
//获取当前月份
month := now.Month()
//获取当前日
day := now.Day()
//获取当前时
hour := now.Hour()
//获取当前分
min := now.Minute()
//获取当前秒
sec := now.Second() //02是输出的整型数值 不足两位用0补齐
fmt.Printf("%d-%02d-%02d %d:%d:%d", year, month, day, hour, min, sec)
}

日期格式化

func main() {
//time1() var now time.Time
now = time.Now() //go语言日期格式化与其他语言有所不同 不是使用YYYYMMDD HH:MM:SS
//而是 使用go语言的诞生日期作为格式 20060102 15:04
fmt.Println(now.Format("2006/01/02")) //只输出年月日
fmt.Println(now.Format("2006/01/02 15:04:05")) //24h日期输出
fmt.Println(now.Format("2006/01/02 03:04:05 PM")) //12h日期输出 最后加上PM也可 不加也可
//20060102 15:04 怎么变化那么输出的日期也会与只格式一致
}

解析字符串的时间

//将字符串拼凑成time格式 使之可以被获取年月日  时区等
local, _ := time.LoadLocation("Asia/Shanghai") //地区需要确实存在
time2, _ := time.ParseInLocation("2006/01/02 15:04:05", "2023/01/01 12:12:12", local)
fmt.Println(time2)

时间戳

所谓时间戳就是从1970年1月1日(08:00:00GMT)到现在的毫秒总数

//时间戳
timestamp := time.Now().Unix()
fmt.Println(timestamp) //因为一直会变化 可以作为一个随机数使用 //将时间戳转换为日期
time1 := time.Unix(timestamp, 0)
time1.Year()
fmt.Println(time1) //2022-11-17 21:11:41 +0800 CST

随机数

调用"math/rand"包 要注意设置种子数,这样每次生成的结果才会不断变化

//设置种子
rand.Seed(5) //不设置种子的话或者种子不变化 下面每次都是同样的数字
num1 := rand.Int()
fmt.Println(num1) //种子不一样生成的随机数才会不一样

使用intn方式 搭配变换种子 生成自定义的随机数

func ran() {
//时间戳每秒都在变化
rand.Seed(time.Now().Unix())
for i := 0; i < 10; i++ {
//n是数字现在 等于10 是每次生成的数不超过10
num := rand.Intn(100)
fmt.Println(num)
}
}

这里注意哦 如果是Intn(10) 循环次数再10以及10以上 怎么都会有相同的数字出现 所以 注意一些

定时器与时间判断

最新文章

  1. Spring @AspectJ 实现AOP 入门例子(转)
  2. 去除 Google 重定向
  3. HSV色彩空间
  4. iscsi: 环境搭建
  5. leetcode 94 Binary Tree Inorder Traversal ----- java
  6. Testing and Checking Refined
  7. apt-get 命令详解(中文),以及实例
  8. 向python3进发
  9. JavaScript中的 原型 property 构造函数 和实例对象之间的关系
  10. H5外包团队:使用HTML5播放短视频代码分享
  11. learning makefile ?=
  12. qt 利用 HTML 生成PDF文档,不能显示jpg图片
  13. windows server 2003产生的 Minidmp蓝屏文件分析求助
  14. spring+springmvc+ibatis整合注解方式实例
  15. spark获取时间
  16. 菜鸟在ubuntu 16.04下制作am335x的SD卡启动盘反思
  17. [转]Handsontable对单元格的操作
  18. Struts2的配置文件的配置struts.xml
  19. WEB安全番外第六篇--关于通过记录渗透工具的Payload来总结和学习测试用例
  20. 线程(Thread)和异常

热门文章

  1. PHPStudy设置局域网访问
  2. vue 页面中切换国际语言
  3. QTableWidget CSS样式
  4. vue3 微信支付和支付宝支付 H5和微信内置浏览器
  5. NX环境变量设置脚本
  6. Python 默认环境
  7. 使用 GIT Bash Here 打tar包文件
  8. fastdfs 上传成功后返回了错误URL,Request URL: http://localhost:8081/121.122.25.133/group1/M00/00/00/wKgZhV63.jpg
  9. epoll 基本知识与使用
  10. golang 生成Sqlserver数据表实体