津南区提供网站建设协议,wordpress主题生成器,山西省建设工程信息网,江苏省住房和城乡建设网站由于Go语言不存在隐式类型转换#xff0c;因此所有的类型转换都必须显式的声明。
string、int、float类型相互转换
string转其他
string转成int#xff1a;
int, err : strconv.Atoi(string)
string转成int64#xff1a;
// 参数1#xff1a;带转换字符串#xff0c;/…由于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:其它情况)// 如果格式标记为 eE和f则 prec 表示小数点后的数字位数// 如果格式标记为 gG则 prec 表示总的数字位数整数部分小数部分str1 strconv.FormatFloat(11.34,E,-1,32)str2 strconv.FormatFloat(10.55,E,-1,64)fmt.Println(str1,str2) //1.134E01 1.055E01//解析转换后的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(Its 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 m0.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 m0.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
这里的转换可以选择是转换为当地时间还是伦敦时间。