在編程中經(jīng)常會(huì)碰到一些數(shù)據(jù)類型轉(zhuǎn)換問(wèn)題残吩,每次都要搜索查詢好久,今天直接自己整理一下
string
string到int (Atoi)
int,err:=strconv.Atoi(string)
string到int (ParseInt)
// ParseInt 將字符串轉(zhuǎn)換為 int 類型
// s:要轉(zhuǎn)換的字符串
// base:進(jìn)位制(2 進(jìn)制到 36 進(jìn)制)
// bitSize:指定整數(shù)類型(0:int、8:int8、16:int16、32:int32、64:int64)
// 返回轉(zhuǎn)換后的結(jié)果和轉(zhuǎn)換時(shí)遇到的錯(cuò)誤
// 如果 base 為 0忌卤,則根據(jù)字符串的前綴判斷進(jìn)位制(0x:16,0:8楞泼,其它:10)
func ParseInt(s string, base int, bitSize int) (i int64, err error)
fmt.Println(strconv.ParseInt("123", 10, 8))
string到int64
int64, err := strconv.ParseInt(string, 10, 64)
string到uint
// ParseUint 功能同 ParseInt 一樣驰徊,只不過(guò)返回 uint 類型整數(shù)
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
fmt.Println(strconv.ParseUint("FF", 16, 8))
string到bool
// ParseBool 將字符串轉(zhuǎn)換為布爾值
// 它接受真值:1, t, T, TRUE, true, True
// 它接受假值:0, f, F, FALSE, false, False.
// 其它任何值都返回一個(gè)錯(cuò)誤
strconv.ParseBool("1")
string到float
// s:要轉(zhuǎn)換的字符串
// bitSize:指定浮點(diǎn)類型(32:float32笤闯、64:float64)
// 如果 s 是合法的格式,而且接近一個(gè)浮點(diǎn)值棍厂,
// 則返回浮點(diǎn)數(shù)的四舍五入值(依據(jù) IEEE754 的四舍五入標(biāo)準(zhǔn))
// 如果 s 不是合法的格式颗味,則返回“語(yǔ)法錯(cuò)誤”
// 如果轉(zhuǎn)換結(jié)果超出 bitSize 范圍,則返回“超出范圍”
func ParseFloat(s string, bitSize int) (f float64, err error)
s := "0.12345678901234567890"
f, err := strconv.ParseFloat(s, 32)
fmt.Println(f, err) // 0.12345679104328156
string到time
其中l(wèi)ayout的時(shí)間必須是"2006-01-02 15:04:05"這個(gè)時(shí)間牺弹,不管格式如何浦马,時(shí)間點(diǎn)一定得是這個(gè),如:"Jan 2, 2006 at 3:04pm (MST)"张漂,"2006-Jan-02"等晶默。如換一個(gè)時(shí)間解析出來(lái)的時(shí)間就不對(duì)了,要特別注意這一點(diǎn)航攒。
layout := ""2006-01-02 15:04:05.999999""
t, _ := time.Parse(layout, "2013-10-05 18:30:50")
fmt.Println(t.Year())
// 當(dāng)前時(shí)區(qū)時(shí)間格式化轉(zhuǎn)換
strTime := "2018-03-24T20:01:00+08:00"
tim, _:=time.ParseInLocation("2006-01-02T15:04:05+08:00", strTime, time.Local)
int
int到string
string:=strconv.Itoa(int)
將 int 型整數(shù) i 轉(zhuǎn)換為字符串形式磺陡,并追加到 dst 的尾部
// AppendInt 將 int 型整數(shù) i 轉(zhuǎn)換為字符串形式,并追加到 dst 的尾部
// i:要轉(zhuǎn)換的字符串
// base:進(jìn)位制
// 返回追加后的 []byte
func AppendInt(dst []byte, i int64, base int) []byte
func main() {
b := make([]byte, 0)
b = strconv.AppendInt(b, -2048, 16)
fmt.Printf("%s", b) // -800
}
int64到string
// FormatUint 將 int 型整數(shù) i 轉(zhuǎn)換為字符串形式
// base:進(jìn)位制(2 進(jìn)制到 36 進(jìn)制)
// 大于 10 進(jìn)制的數(shù)屎债,返回值使用小寫字母 'a' 到 'z'
func FormatInt(i int64, base int) string
func main() {
i := int64(-2048)
fmt.Println(strconv.FormatInt(i, 2)) // -100000000000
fmt.Println(strconv.FormatInt(i, 8)) // -4000
fmt.Println(strconv.FormatInt(i, 10)) // -2048
fmt.Println(strconv.FormatInt(i, 16)) // -800
fmt.Println(strconv.FormatInt(i, 36)) // -1kw
}
int64到time(將納秒轉(zhuǎn)time)
tt := time.Unix(0,1515049539324129700) //將納秒轉(zhuǎn)換為 time 類型
fmt.Println(tt.String())
int64到time(將毫秒轉(zhuǎn)time)
tt := time.Unix(0,毫秒*1e6) //將納秒轉(zhuǎn)換為 time 類型
fmt.Println(tt.String())
int64到time(將秒轉(zhuǎn)time)
tt := time.Unix(1136214245,0) //將秒轉(zhuǎn)換為 time 類型
fmt.Println(tt.String())
Float
Float到string
// FormatFloat 將浮點(diǎn)數(shù) f 轉(zhuǎn)換為字符串值
// f:要轉(zhuǎn)換的浮點(diǎn)數(shù)
// fmt:格式標(biāo)記(b仅政、e垢油、E盆驹、f、g滩愁、G)
// prec:精度(數(shù)字部分的長(zhǎng)度躯喇,不包括指數(shù)部分)
// bitSize:指定浮點(diǎn)類型(32:float32、64:float64)
//
// 格式標(biāo)記:
// 'b' (-ddddp±ddd硝枉,二進(jìn)制指數(shù))
// 'e' (-d.dddde±dd廉丽,十進(jìn)制指數(shù))
// 'E' (-d.ddddE±dd,十進(jìn)制指數(shù))
// 'f' (-ddd.dddd妻味,沒(méi)有指數(shù))
// 'g' ('e':大指數(shù)正压,'f':其它情況)
// 'G' ('E':大指數(shù),'f':其它情況)
//
// 如果格式標(biāo)記為 'e'责球,'E'和'f'焦履,則 prec 表示小數(shù)點(diǎn)后的數(shù)字位數(shù)
// 如果格式標(biāo)記為 'g','G'雏逾,則 prec 表示總的數(shù)字位數(shù)(整數(shù)部分+小數(shù)部分)
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
f := 100.12345678901234567890123456789
fmt.Println(strconv.FormatFloat(f, 'b', 5, 32))
// 13123382p-17
fmt.Println(strconv.FormatFloat(f, 'e', 5, 32))
// 1.00123e+02
fmt.Println(strconv.FormatFloat(f, 'E', 5, 32))
將float轉(zhuǎn)string并將結(jié)果追加到尾部
// AppendFloat 將浮點(diǎn)數(shù) f 轉(zhuǎn)換為字符串值嘉裤,并將轉(zhuǎn)換結(jié)果追加到 dst 的尾部
// 返回追加后的 []byte
func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte
func main() {
f := 100.12345678901234567890123456789
b := make([]byte, 0)
b = strconv.AppendFloat(b, f, 'f', 5, 32)
b = append(b, " "...)
b = strconv.AppendFloat(b, f, 'e', 5, 32)
fmt.Printf("%s", b) // 100.12346 1.00123e+0
}
Uint
Uint到string
// FormatUint 將 uint 型整數(shù) i 轉(zhuǎn)換為字符串形式
// base:進(jìn)位制(2 進(jìn)制到 36 進(jìn)制)
// 大于 10 進(jìn)制的數(shù),返回值使用小寫字母 'a' 到 'z'
func FormatUint(i uint64, base int) string
func main() {
i := uint64(2048)
fmt.Println(strconv.FormatUint(i, 2)) // 100000000000
fmt.Println(strconv.FormatUint(i, 8)) // 4000
fmt.Println(strconv.FormatUint(i, 10)) // 2048
fmt.Println(strconv.FormatUint(i, 16)) // 800
fmt.Println(strconv.FormatUint(i, 36)) // 1kw
}
將 uint 型整數(shù) i 轉(zhuǎn)換為字符串形式栖博,并追加到 dst 的尾部
// AppendUint 將 uint 型整數(shù) i 轉(zhuǎn)換為字符串形式屑宠,并追加到 dst 的尾部
// i:要轉(zhuǎn)換的字符串
// base:進(jìn)位制
// 返回追加后的 []byte
func AppendUint(dst []byte, i uint64, base int) []byte
func main() {
b := make([]byte, 0)
b = strconv.AppendUint(b, 2048, 16)
fmt.Printf("%s", b) // 800
}
bool
bool到string
fmt.Println(strconv.FormatBool(0 < 1)) // true
fmt.Println(strconv.FormatBool(0 > 1)) // false
將bool轉(zhuǎn)string并將結(jié)果追加到尾部
// AppendBool 將布爾值 b 轉(zhuǎn)換為字符串 "true" 或 "false"
// 然后將結(jié)果追加到 dst 的尾部,返回追加后的 []byte
func AppendBool(dst []byte, b bool) []byte
func main() {
rst := make([]byte, 0)
rst = strconv.AppendBool(rst, 0 < 1)
fmt.Printf("%s\n", rst) // true
rst = strconv.AppendBool(rst, 0 > 1)
fmt.Printf("%s\n", rst) // truefalse
}
time
獲取納秒值
na:=time.Now().UnixNano()
獲取毫秒值
na:=time.Now().UnixNano()//獲取時(shí)間戳包含納秒
fmt.Println(na / 1e6) //納秒轉(zhuǎn)毫秒
fmt.Println(na / 1e9) //納秒轉(zhuǎn)秒
獲取秒值
miao:=time.Now().Unix()
時(shí)間轉(zhuǎn)string
time.Now().Format("2006-01-02 15:04")
年月日時(shí)分秒轉(zhuǎn)time
the_time := time.Date(2014, 1, 7, 5, 50, 4, 0, time.Local)
unix_time := the_time.Unix()
fmt.Println(unix_time)
interface
與基本類型轉(zhuǎn)換
func main() {
//var i interface{} = "TT"
var i interface{} = 77
value, ok := i.(int)
if ok {
fmt.Printf("類型匹配int:%d\n", value)
} else {
fmt.Println("類型不匹配int\n")
}
if value, ok := i.(int); ok {
fmt.Println("類型匹配整型:%d\n", value)
} else if value, ok := i.(string); ok {
fmt.Printf("類型匹配字符串:%s\n", value)
}
}
斷言的使用
func echoArray(a interface{}){
b,_:=a.([]int)//通過(guò)斷言實(shí)現(xiàn)類型轉(zhuǎn)換
for _,v:=range b{
fmt.Print(v," ")
}
fmt.Println()
return
}