每种语言中都提供了类型转换方法,在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"