Golang数据类型总结及其转换

golang数据类型

  • 基本类型:boolean,numeric,string类型的命名实例是预先声明的。
  • 复合类型:array,struct,指针,function,interface,slice,map,channel类型(可以使用type构造)。

数据类型转换表

// []byte -> other type
[]byte => string : string([]byte)
[]byte => int : binary包处理, 查看下面


// int -> other type
int => string : s = strconv.Itoa(i)  
int => int32  : i32 = int32(num)
int => int64 : i64 = int64(num)
int64/int32 => int : i = int(num)
int64 => string : strconv.FormatInt(int64, 10)
int64 => time.Duration : time.Duration(int64)
int32 => byte : bytes.NewBuffer() 看上面 intbyte 互转
int => float64 : float64(num) 
// other type -> int
i = int(int32/int64)
float64/float32 => int(int64/int32)


// string -> other type
string => int :  i, err = strconv.Atoi(s)
string => bool : strconv.ParseBool("true")
string => float32 : strconv.ParseFloat(s, 32)
string => float64 : strconv.ParseFloat(s, 64)
string => uint : strconv.ParseUint()
string => int32/int64 : strconv.ParseInt(s, 10, 32/64)
string => []byte : []byte(string)
string(16进制) => int32/int64 : strconv.ParseInt(s, 0, 32/64)

// other type -> string
int,int32,int64 => string : str1 := fmt.Sprintf("%d", i)             // i可以是int/int32/int64
                        或  str2 := strconv.Itoa(i)                  // i为int
                        或  str3 := strconv.FormatInt(int64(i), 10)  // i可以是int/int32/int64
uint64 => string : strconv.FormatUint(unit64, 10) 
bool => string : strconv.FormatBool(true)
float64 => string : strconv.FormatFloat(float64(12), 'f', -1, 64) 
                        或  fmt.Sprintf("%.2f", float64)


// array -> slice : 
1) copy(array[:], slice[0:4])  | 全部 copy(array[:], slice)
2) for
for index, b := range someSlice {
    array[index] = b
}

// slice -> array
slice=>array :    array[:]

数据类型说明

1. int类型中哪些支持负数

  • 有符号(负号):int8 int16 int32 int64
  • 无符号(负号):uint8 uint16 uint32 uint64

2. 浮点类型的值有float32和float64(没有 float 类型)

3. byte和rune特殊类型是别名

  • byte就是unit8的别名
  • rune就是int32的别名

4. int和uint取决于操作系统(32位机器上就是32字节,64位机器上就是64字节)

  • uint是32字节或者64字节
  • int和uint是一样的大小

5. 为了避免可移植性问题,除了byte(它是uint8的别名)和rune(它是int32的别名)之外,所有数字类型都是不同的。 在表达式或赋值中混合使用不同的数字类型时,需要转换。例如,int32和int不是相同的类型,即使它们可能在特定架构上具有相同的大小。


笔记参考:GO基本数据类型总结



posted @ 2018-12-21 19:02  kumata  阅读(5816)  评论(0编辑  收藏  举报