当前位置: 首页 > news >正文

GO学习笔记(4) strconv/time

目录

strconv包

string转其他的过程为Parse(解析)
其他转string的过程为Format(格式化)

1、string与bool之间的转换

  • string → \rightarrow bool strconv.ParseBool()

源码:

// ParseBool returns the boolean value represented by the string.
// It accepts 1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False.
// Any other value returns an error.
func ParseBool(str string) (bool, error) {switch str {case "1", "t", "T", "true", "TRUE", "True":return true, nilcase "0", "f", "F", "false", "FALSE", "False":return false, nil}return false, syntaxError("ParseBool", str)
}
  • bool → \rightarrow string strconv.FormatBool()

源码

// FormatBool returns "true" or "false" according to the value of b.
func FormatBool(b bool) string {if b {return "true"}return "false"
}

2、string与int之间的转换

  • string → \rightarrow int func ParseInt(s string, base int, bitSize int) (i int64, err error)

源码:

func ParseInt(s string, base int, bitSize int) (i int64, err error)
//参数解释:
//s为原字符串
//base为解读字符串所采用的进制
//bitSize为存转换数字所用字节数 一般默认64即可
str := "101"
res, err := strconv.ParseInt(str, 2, 64)
fmt.Println(res, err) //5 <nil> 采用二进制解读该串

前缀符号:

str := "-101"//允许串存在前导符号(‘+’或‘-’)
res, err := strconv.ParseInt(str, 2, 64)
fmt.Println(res, err) //-5 <nil> 采用二进制解读该串

base为0:

str := "-0x101"
res, err := strconv.ParseInt(str, 0, 64)//如果base为零则通过s串推断,例如二进制前缀0b,八进制前缀0...(详解请查看源码)
fmt.Println(res, err) //-257(1+16^2) <nil> 采用16进制(0x为十六进制前缀)解读该串

简便方式(Atoi):与使用ParseInt()函数base为10,bitSize为64效果相同

str := "-101"
res, _ := strconv.Atoi(str)
fmt.Printf("%T %d\n", res, res)//int -101
  • int → \rightarrow string func FormatInt(i int64, base int) string
s := strconv.FormatInt(-257, 16)
fmt.Printf("%T %v\n", s, s) //string -101

简便方式(Itoa):与使用FormatInt()函数base为10效果相同

i := -345
res := strconv.Itoa(i)
fmt.Printf("%T %s\n", res, res)

time包

1、常用常量定义

在这里插入图片描述


2、Now()获取当前年月日时分秒

源码:

在这里插入图片描述

now := time.Now()
fmt.Println(now) //2024-09-05 22:09:12.0153971 +0800 CST m=+0.001031601
//+0800 表示东八区,即UTC时间加上8小时。中国大部分地区都位于东八区。
//CST China Standard Time
year := now.Year()
month := now.Month()
day := now.Day()
hour := now.Hour()
minute := now.Minute()
second := now.Second()
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)//2024-09-05 22:06:19

3、Format()时间格式化

源码:
在这里插入图片描述

now := time.Now()
//layout参数是固定的2006-01-02 15:04:05 此时间为GO语言诞生的时间1月2号下午3点4分5秒
//用'/' 、':'、 '-'分割均可
fmt.Println(now.Format("2006-01-02 15:04:05"))//2024-09-05 22:35:57
fmt.Println(now.Format("2006/01/02 03:04"))    //2024/09/05 10:50

4、Parse()/ ParseInLocation()解析时间 str → \rightarrow Time对象

now := time.Now()
str := now.Format("2006-01-02 15:04:05")//func Parse(layout, value string) (Time, error)
t1, _ := time.Parse("2006-01-02 15:04:05", str)
fmt.Println(t1) //2024-09-08 11:44:01 +0000 UTC//func LoadLocation(name string) (*Location, error)
loc, _ := time.LoadLocation("Asia/Shanghai")
fmt.Printf("%T %v\n", loc, loc) //*time.Location Asia/Shanghai
//func ParseInLocation(layout, value string, loc *Location) (Time, error)
t2, _ := time.ParseInLocation("2006-01-02 15:04:05", str, loc)
fmt.Println(t2) //2024-09-08 11:44:01 +0800 CST

小结技巧:
首先ParseInLocation()方法需要一个*Location类型的参数,于是我们通过寻找time包下哪一个方法返回值类型为*Location,通过筛选后可以发现只有在这里插入图片描述最合适,因此完美契合。
全部时区列表


4、时间戳、时间戳 → \rightarrow Time对象

now := time.Now()
//时间戳Unix:1970.1.1 00:00:00 - 当下的一个秒数
fmt.Println(now.Unix())//1725777952//时间戳-->Time对象
timeobj := time.Unix(now.Unix(), 0)
fmt.Println(timeobj)//2024-09-08 14:45:52 +0800 CST

5、时间运算

now := time.Now()
fmt.Println(now) //2024-09-08 15:37:11.5696332 +0800 CST m=+0.000501801//加
r1 := now.Add(time.Hour)
fmt.Println(r1) //2024-09-08 16:37:11.5696332 +0800 CST m=+3600.000501801//两个时间之间的插值
r2 := now.Sub(r1)
fmt.Println(r2) //-1h0m0s//时间比较
fmt.Println(now.Equal(r1))  //false
fmt.Println(now.Before(r1)) //true
fmt.Println(now.After(r1))  //false

rand包

	//生成五个随机数for i := 0; i < 5; i++ {fmt.Println("i:", rand.Intn(10))}

现在在这里插入图片描述放法已经是一个待删的状态了,应该已经实现了完全随机,并不是伪随机了,所以我们不需要先拨种子了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于鸿蒙API10的RTSP播放器(三:底部视频滑轨进度显示)
  • 【大模型理论篇】大模型周边自然语言处理技术(NLP)原理分析及数学推导(Word2Vec、TextCNN、Gated TextCNN、FastText)
  • SQL 编程基础
  • 达梦CASE_SENSITIVE参数解析
  • 7-Python基础编程之数据类型操作——列表和元组
  • cesium.js 入门到精通(7)
  • springboot013基于SpringBoot的旅游网站的设计与实现
  • 做谷歌seo,b端跟c端有什么区别吗?
  • 【笔记】CarrierConfig 解析加载的debug和日志分析
  • 高亚科技与广东海悟携手,打造全流程电子竞标管理平台!
  • 利用高德+ArcGIS优雅获取任何感兴趣的矢量边界
  • 云服务器拉取docker镜像
  • Redis学习笔记(六)——Redis的持久化
  • flink中disableChaining() 的详解
  • mfc140u.dll错误是什么情况?如何将mfc140u.dll丢失的解决方法详细分析
  • Golang-长连接-状态推送
  • Java超时控制的实现
  • Java读取Properties文件的六种方法
  • JAVA多线程机制解析-volatilesynchronized
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Service Worker
  • session共享问题解决方案
  • Vue2.0 实现互斥
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 给初学者:JavaScript 中数组操作注意点
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 排序算法学习笔记
  • 前端js -- this指向总结。
  • 延迟脚本的方式
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​iOS安全加固方法及实现
  • #pragma 指令
  • #单片机(TB6600驱动42步进电机)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (11)MSP430F5529 定时器B
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (动态规划)5. 最长回文子串 java解决
  • (回溯) LeetCode 131. 分割回文串
  • (九)One-Wire总线-DS18B20
  • (力扣题库)跳跃游戏II(c++)
  • (六)DockerCompose安装与配置
  • (学习日记)2024.01.09
  • (转)ObjectiveC 深浅拷贝学习
  • (转)用.Net的File控件上传文件的解决方案
  • .DFS.
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET MVC之AOP
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net开发日常笔记(持续更新)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?