Go类型转换

由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明。

string、int、float类型相互转换

string转其他

  • string转成int:
int, err := strconv.Atoi(string)
  • string转成int64:
// 参数1:带转换字符串,// 参数2:基于几进制,值可以是0,8,16,32,64// 参数3:要转成哪个int类型:可以是0、8、16、32、64,分别对应 int,int8,int16,int32,int64int64, err := strconv.ParseInt(string, 10, 64)
  • string转成uint64:
uint64, err := strconv.ParseUint(string, 10, 64)
  • string转成float64、float32
// ParseFloat 将字符串转换为浮点数// str:要转换的字符串// bitSize:指定浮点类型(32:float32、64:float64)// 如果 str 是合法的格式,而且接近一个浮点值,// 则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)// 如果 str 不是合法的格式,则返回“语法错误”// 如果转换结果超出 bitSize 范围,则返回“超出范围”//到float64float64,err := strconv.ParseFloat(str,64)//到float32float32,err := strconv.ParseFloat(str,32)

int、int64、uint64转其他

  • int转成string:
string := strconv.Itoa(int)// 或者:先把int转为int64string := strconv.FormatInt(int64(int), 10)
  • int64转成string:
string := strconv.FormatInt(int64,10)
  • uint64转成string:
string := strconv.FormatUint(uint64,10)
  • int转float32
float := float32(int)

float转其他

  • float转成string
// FormatFloat 将浮点数 f 转换为字符串值// f:要转换的浮点数// fmt:格式标记(b、e、E、f、g、G)// prec:精度(数字部分的长度,不包括指数部分)// bitSize:指定浮点类型(32:float32、64:float64)// 格式标记:// 'b' (-ddddp±ddd,二进制指数)// 'e' (-d.dddde±dd,十进制指数)// 'E' (-d.ddddE±dd,十进制指数)// 'f' (-ddd.dddd,没有指数)// 'g' ('e':大指数,'f':其它情况)// 'G' ('E':大指数,'f':其它情况)// 如果格式标记为 'e','E'和'f',则 prec 表示小数点后的数字位数// 如果格式标记为 'g','G',则 prec 表示总的数字位数(整数部分+小数部分)str1 = strconv.FormatFloat(11.34,'E',-1,32)str2 = strconv.FormatFloat(10.55,'E',-1,64)fmt.Println(str1,str2)        //1.134E+01  1.055E+01//解析转换后的string变量str为floath,_ :=strconv.ParseFloat(str1,32)fmt.Println(h)        //11.34000015258789h,_ =strconv.ParseFloat(str2,64)fmt.Println(h)        //10.55
  • float转int64(会有精度损失)
var x float64 = 6.9y := int64(x)

类型断言

  • 类型断言的本质,跟类型转换类似,都是类型之间进行转换,不同之处在于,类型断言是在接口之间进行。类型转换在编译期完成,类型断言在运行时确定,包括安全类型断言和非安全类型断言。
  • 语法:

  <目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言

  <目标类型的值> := <表达式>.( 目标类型 )  //非安全类型断言

var a interface{}value, ok := a.(string)if !ok {fmt.Println("It's not ok for type string")return}fmt.Println("The value is ", value)
  • 可以配合switch语句进行判断
var t interface{}t = functionOfSomeType()switch t := t.(type) {case bool:fmt.Printf("boolean %t\n", t)             // t has type boolcase int:fmt.Printf("integer %d\n", t)             // t has type intcase *bool:fmt.Printf("pointer to boolean %t\n", *t) // t has type *boolcase *int:fmt.Printf("pointer to integer %d\n", *t) // t has type *int}default:fmt.Printf("unexpected type %T", t)       // %T prints whatever type t has

时间与时间戳

时间类型

获取当地时间,获取时间的函数为​time.now()​,这里加不加​.Local()​,获取的都是当地时间。加​.UTC​得到的是0时区(也就是伦敦)的时间。​func Now() Time​这个函数的返回值是​Time​,也就是时间类型。例如:

fmt.Println(time.Now())fmt.Println(time.Now().Local())fmt.Println(time.Now().UTC())fmt.Println(time.Now().Location())// 输出2018-11-21 11:50:39.540473 +0800 CST m=+0.0003115622018-11-21 11:50:39.540628 +0800 CST2018-11-21 03:50:39.540632 +0000 UTCLocal

时间戳

时间戳函数的返回值都是​int64​,是一个大整数。时间戳就是格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起到此时此刻的【总秒数】。

fmt.Println(time.Now().Unix())fmt.Println(time.Now().Local().Unix())fmt.Println(time.Now().UTC().Unix())fmt.Println(time.Now().UnixNano())// 输出1542772752154277275215427727521542772752846107000

在go语言中,​time.Now().Unix()​或者​time.Now().Local().Unix()​就是【北京时间1970年01月01日08时00分00秒】到【北京时间此时此刻】的总秒数。

相应的​time.Now().UTC().Unix()​就是【格林威治时间1970年01月01日00时00分00秒】到【格林威治时间此时此刻】的总秒数。因此上面得到的几个时间戳是一样的。时间戳是一个【总秒数】,所以时间戳函数的返回值都是​int64​。所以go语言中有时间类型,但并没有一个单独的【时间戳类型】。

时间类型格式化

将时间类型格式化,得到一个表示时间的字符串。第一行是​time.Now()​的结果,是时间类型【​Time​】下面两行是​t.Format()​的结果,是字符串。

t := time.Now()str := t.Format("2006-01-02 15:04:05")str1 := t.Format("2006年1月2日 15:04:05")fmt.Println(t)fmt.Println(str)fmt.Println(str1)// 输出2018-11-21 12:48:19.870047 +0800 CST m=+0.0005037402018-11-21 12:48:192018年11月21日 12:48:19

字符串转Time

函数​func Parse(layout, value string) (Time, error)​的第一个参数是需要转换的字符串的格式,第二个参数是需要转换的字符串。返回值是时间类型和一个err。

t := time.Now()str := t.Format("2006-01-02 15:04:05")str1 := t.Format("2006年1月2日 15:04:05")timestamp, _ := time.Parse("2006-01-02 15:04:05", str)timestamp1, _ := time.Parse("2006年1月2日 15:04:05", str1)fmt.Println(timestamp)fmt.Println(timestamp1)// 输出2018-11-21 12:48:19 +0000 UTC2018-11-21 12:48:19 +0000 UTC

在将字符串转为时间类型的时候,是直接转为了【伦敦时间】,go语言并不会去判断这个字符串表示的是北京时间,还是伦敦时间,因为没法判断,只有你知道它表示的是哪里的时间。比如16:08:05在中国那当然表示的是北京时间,但是如果把这个字符串转为时间类型,就直接变成伦敦时间的16:08:05了。

Time转时间戳

直接调用方法​func (t Time) Unix() int64​即可。将上面的两个时间变量​timestamp​和​timestamp1​转为时间戳。

fmt.Println(timestamp.Unix())fmt.Println(timestamp1.Unix())// 输出15428044991542804499

时间戳转Time

用函数​func Unix(sec int64, nsec int64) Time​进行转换,第一个参数是秒,第二个参数是纳秒,会被加到结果的小数点后面。

tmsp := time.Now().Unix()fmt.Println(tmsp)t1 := time.Unix(tmsp, 0).UTC()t2 := time.Unix(tmsp, tmsp).Local()fmt.Println(t1)fmt.Println(t2)// 输出15427797082018-11-21 05:55:08 +0000 UTC2018-11-21 13:55:09.542779708 +0800 CST

这里的转换可以选择是转换为当地时间还是伦敦时间。

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

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

相关文章

linux tee 重定向_快乐的linux命令行-重定向

整理自《快乐的linux命令行一书》。linux系统版本&#xff1a; Ubuntu 17.04本章&#xff0c;我们将介绍命令行最酷的特性&#xff0c;叫做I/O重定向&#xff0c;通过这个工具&#xff0c;可以重定向命令的输入输出&#xff0c;命令的输入来自文件&#xff0c;而输出也存到文。…

Java 诊断工具 Arthas 常见命令

基本概念 云原生这么多微服务&#xff0c;当然需要一个诊断利器来排查问题。 Arthas 是阿里开源的 Java 诊断工具&#xff0c;深受开发者喜爱。在线排查问题&#xff0c;无需重启&#xff1b;动态跟踪 Java 代码&#xff1b;实时监控 JVM 状态。Arthas 支持 JDK 6&#xff0c…

28和lba48命令格式区别_编译Sass(命令行)

本文作者&#xff1a;开课吧无忧图文编辑&#xff1a;开三金sass编译有很多种方式&#xff0c;如命令行编译模式、编辑器自动编译、编译软件koala、sass-loader等。今天我们就先来看第一种&#xff1a;命令行编译刚才我在test文件夹里面已经建立了一个style.scss文件&#xff0…

JAVA基础编程代码50个

【程序1】 题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子对数为多少&#xff1f; 程序分析&#xff1a; 兔子…

爬虫软件python功能_Python 网络爬虫程序详解

#!/usr/bin/python #调用pythonfrom sys import argv #导入sys是导入python解释器和他环境相关的参数from os import makedirs,unlink,sep  #os主要提供对系统路径&#xff0c;文件重命名和删除文件所需的函数#makedirs是创建递归文件夹的函数。#比如说我们要创建一个新的目录…

价钱转换python_如何在python中转换货币?

我正在做一个虚拟助手项目。我想让它告诉我其他货币的美元汇率。我用beauthoulsoup编写了以下代码&#xff0c;它从给定的网站获取数据&#xff0c;对其进行解析并在命令行中打印结果供我阅读。但这只是美元对巴基斯坦卢比。如何修改程序&#xff0c;使其接受任何货币并告诉我该…

char qt 转unicode_Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK 乱码与转码问题...

2012-03-22 14:00175人阅读评论(0)代码如下&#xff1a;如果不不设全局的字符集是utf-8&#xff0c;那么网上一般的方法是可以转的。如下程序中 #define DD 1的情况下&#xff1b;但是如果设置了全局的utf-8&#xff0c;再用以前的方法&#xff1a;QByteArraybaaaa.toLatin1();…

计算机图形学考试题及答案_计算机图形学考试题及答案

3、在图形文件中&#xff0c;常用来描述图形元素(点&#xff0c;线&#xff0c;圆&#xff0c;弧等)&#xff1b;而在光栅扫描图形显示器中&#xff0c;采用显示所有图形。4、当三维物体用透视变换方程投影到观察平面上&#xff0c;物体中不与观察平面平行任一簇平行线投影成收…

子窗体中组合框联动_一张表实现组合框联动

嗨&#xff0c;大家中午好&#xff01;最近&#xff0c;有网友给我私信&#xff0c;想要一个联动的示例&#xff0c;一个有关于部门联动的操作。其实关于联动的操作有很多&#xff0c;可以是组合框的联动&#xff0c;列表框联动&#xff0c;组合框与列表框也可以联动&#xff0…

中如何实现文字转语音_录音转文字、文字转语音,学会这一招就够了!手把手教你如何操作...

阅读文章时候想着有人可以把文章读给我听就好了&#xff0c;写作时想着语音直接可以转换成文字就好了&#xff0c;大家是不是有时会突然冒出这样的想法&#xff1f;七十这些看似天真的想法&#xff0c;还真的有办法解决&#xff0c;这里就手把手教你如何操作才能将的文字转换成…

图像 理想低通滤波_图像处理之滤波(下)

[toc]目录一、常规滤波低通高通带通带阻二、非局部均值滤波三、维纳滤波四、卡尔曼滤波前言所谓滤波&#xff0c;其实就是从混合在一起的诸多信号中提取出所需要的信号。信号的分类&#xff1a;确定型信号&#xff0c;可以表示为确定的时间函数&#xff0c;可确定其在任何时刻的…

泰山行宫碧霞元君祠_临清市泰山行宫碧霞元君祠5月4号(农历三月三十日)举行大型泰山奶奶接驾法会...

临清是泰山奶奶的娘家&#xff0c;每年的四月泰山奶奶要回临清省亲临清市道教协会定于2019年农历三月三十(5月4号星期六)于临清桑树园泰山行宫碧霞元君祠举行大型泰山奶奶迎鸾接驾庙会。届时&#xff0c;将有架鼓会、云龙会、狮胞会、钢叉会、高跷会、天音会、彩船会、秧歌会等…

充分条件反过来是必要条件吗_“充分必要条件”引发的现实思考

昨天看了一篇文章是介绍“充分条件和必要条件”&#xff0c;大致就是A能直接推导出B&#xff0c;那A就是B的充分条件。A不一定能推导出B&#xff0c;但是没A一定推导不出B&#xff0c;那A就是B必要条件。举个简单的例子&#xff1a;对你好&#xff08;A&#xff09;与喜欢你&am…

手机游戏降低游戏延迟的软件_怎么降低手机网络延迟(减少网络延迟的5个小技巧)...

在过去的几十年里&#xff0c;用户或开发人员并不担心延迟。在上世纪90年代和本世纪初&#xff0c;个人互联网连接速度要慢得多&#xff0c;因此发送请求和接收响应之间的延迟要远远小于下载完成所需的时间。如今&#xff0c;更高的带宽连接使下载速度更快&#xff0c;因此延迟…

mysql常用的开发软件下载_强烈推荐!14款经典的MySQL客户端软件

【IT168 评论】不用我说&#xff0c;大家都知道MySQL是一个怎么样的数据库。虽然它的命运比较坎坷&#xff0c;但是丝毫没有影响到我们对MySQL的热情。不论是个人程序或者网站&#xff0c;还是企业数据库&#xff0c;MySQL的身影无处不在。无论做什么数据库的开发&#xff0c;一…

mysql最大值最小值_mysql最大值,最小值,总和查询与计数查询

1、最大值查询&#xff1a;mysql> select max(score) from 4a;------------| max(score) |------------| 93 |------------1 row in set (0.06 sec)2、最小值查询&#xff1a;mysql> select max(4a.score),min(4inall.score) from 4a,4inall;-------------------…

阿里云 centos mysql_在阿里云的CentOS环境中安装配置MySQL的教程

1 常规错误的yum安装方法&#xff1a;在前文中记述了CentOS 6.5系统中通过yum方式快速地搭建了LNMP环境&#xff0c;那么是否也能在CentOS 7或CentOS 7.1系统中依葫芦画瓢安装MySql5.6.24呢&#xff1f;答案是否定的。[roottypecodes ~]# yum -y install mysql mysql-server my…

mysql文件脱机_SQL数据库的脱机与联机操作

online : 可对数据库进行访问offline&#xff1a;数据库无法使用1、使用查询语句select state_desc from sysdatabases where name 数据库名 2、使用databasepropertyex( database,property)函数select databasepropertyex( 数据库 ,’ status )分离数据库&#xff1a;EXEC…

dockerfile 安装mysql_dockerfile构建mysql镜像

使用dockerfile构建mysql&#xff0c;镜像构建完成后&#xff0c;运行容器后&#xff0c;启动mysql服务总是报错Fatal error: Cant open and lock privilege tables: Table storage engine for db doesnt have this optionmysql安装使用的官方的压缩包mysql-5.7.20-linux-glibc…

ubunt11 安装mysql_ubuntu 11.10安装mysql

1. 安装devadmdevserver:~$ sudo apt-get install mysql-server......The following NEW packages will be installed:libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1mysql-c…