golang中数据类型及转换.
每种语言中都提供了类型转换方法,在ruby中常用to_s, to_i, to_sym做一些类型的转化,最近在看golang, 记录下其中类似的方法及其使用。
1. 数据类型的用途:
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
2. 常见的int和unit的区别:
uint为无符号整型(正数,所以价格,id都用uint格式),int为有符号整型。uint如果不指定位数,按照你机器的位数取,如你的计算机是64位,则声明uint的数字实际为uint64.
3. 数据类型的转换
golang中strconv包中提供了一些类型转换的方法,比较常用的有两个:
1. Atoi, 将string转成int,Atoi指的是Ascii to integer(10进制)
2. Itoa, 将int转成string, Itoa指的是Integer to ascii (10进制)
i, err := strconv.Atoi("123")
str := strconv.Itoa(123)
该包中也提供了几个parse开头的方法,用来将string转化为数值,参数必须是string, 其它值会报错。
bool, err := strconv.ParseBool("1")
f, err := strconv.ParseFloat("3.1415", 64)
i, err := strconv.ParseInt("-42", 10, 64)
u, err := strconv.ParseUint("42", 10, 64)
上面的parse方法返回的最大类型是float64, int64, and uint64,当然也可以指定类型.其中ParseInt总是返回int64,所以我们web项目中经常有将参数(string)转为int的情况,用strconv.ParseInt("42", 10, 64)即可。
i32, err := strconv.ParseInt("42", 10, 32)
reflect.TypeOf(i32) //类型返回 int64
int32(i32) //转化为32位
每种int类型可存储的数值范围:
Int16 -- (-32,768 to +32,767)
Int32 -- (-2,147,483,648 to +2,147,483,647) 和int范围等同
Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)
该包中也提供了几个Format开头的方法将值转化为string:
s := strconv.FormatBool(true)
s := strconv.FormatFloat(3.1415, 'E', -1, 64)
s := strconv.FormatInt(-42, 16)
s := strconv.FormatUint(42, 16)
q := strconv.Quote("Hello, 世界") => "Hello, 世界"
q := strconv.QuoteToASCII("Hello, 世界") => "Hello, \u4e16\u754c"