一、字符串和切片之间的转换
>>  1 package main                                                                                              2                                                                                                           3 import "fmt"                                                                                              4                                                                                                           5                                                                                                           6 func main() {                                                                                             7 |   var testData string = "hello"                                                                         8 |                                                                                                         9 |   //字符串转切片                                                                                        10 |   slice := []byte(testData)                                                                             11 |   fmt.Printf("slice:%v\n", slice)                                                                       12                                                                                                           13 |   //切片转字符串                                                                                        14 |   strData := string(slice)                                                                              15 |   fmt.Printf("slice:%s\n", strData)                                                                    10 } 
结果:
slice:[104 101 108 108 111]
slice:hello
二、切片和整型之间的转换
>>  1 package main                                                                                              2                                                                                                           3 import (                                                                                                  4 |   "encoding/binary"                                                                                     5 |   "fmt"                                                                                                 6 )                                                                                                         7                                                                                                           8                                                                                                           9 func main() {                                                                                             10 |   var intData uint32 = 1024                                                                             11 |   var sliceData []byte                                                                                  12                                                                                                           13 |   //整型转切片                                                                                          14 |   sliceData = make([]byte, 4)                                                                           15 |   binary.LittleEndian.PutUint32(sliceData, intData)                                                     16 |   fmt.Printf("intData:%v\n", sliceData)                                                                 17                                                                                                           18 |   //切片转整型                                                                                          19 |   aa := binary.LittleEndian.Uint32(sliceData)                                                           20 |   fmt.Printf("aa:%v\n", aa)                                                                             21 }   
结果:
intData:[0 4 0 0]
aa:1024
三、结构体和切片之间的转换
>>  1 package main                                                                                                                       2                                                                                                                                    3 import (                                                                                                                           4 |   "bytes"                                                                                                                        5 |   "encoding/binary"                                                                                                              6 |   "fmt"                                                                                                                          7 )                                                                                                                                  8                                                                                                                                    9                                                                                                                                    10 func main() {                                                                                                                      11 |   type structData struct {                                                                                                       12 |   |   intData  uint32                                                                                                            13 |   |   strData  []byte                                                                                                            14 |   }                                                                                                                              15                                                                                                                                    16 |   var ss = structData{intData: 12}                                                                                               17 |   var buffer = bytes.Buffer{}                                                                                                    18 |   err := binary.Write(&buffer, binary.BigEndian, ss.intData)                                                                     19 |   if err != nil {                                                                                                                20 |   |   fmt.Printf("err")                                                                                                          21 |   }                                                                                                                              22                                                                                                                                    23 |   ss.strData = make([]byte, 10)                                                                                                  24 |   copy(ss.strData, []byte("heloo"))                                                                                              25 |   err = binary.Write(&buffer, binary.BigEndian, ss.strData)                                                                      26 |   if err != nil {                                                                                                                27 |   |   fmt.Printf("err")                                                                                                          28 |   }                                                                                                                              29                                                                                                                                    30 |   fmt.Printf("struct:%v\n", buffer)                                                                                              31 }    
结果:
struct:{[0 0 0 12 104 101 108 111 111 0 0 0 0 0] 0 0}
由于err = binary.Write(&buffer, binary.BigEndian, ss.strData)这个函数的最后一个参数是需要有固定大小的参数,才能写入,因此 如果没有初始化的话,会之间报错。
 如果结构体中的各个 参数 都是有固定长度的也可以这样写:
>>  1 package main                                                                                                                       2                                                                                                                                    3 import (                                                                                                                           4 |   "bytes"                                                                                                                        5 |   "encoding/binary"                                                                                                              6 |   "fmt"                                                                                                                          7 )                                                                                                                                  8                                                                                                                                    9                                                                                                                                    10 func main() {                                                                                                                      11 |   type structData struct {                                                                                                       12 |   |   intData  uint32                                                                                                            13 |   |   strData  uint32                                                                                                            14 |   }                                                                                                                              15                                                                                                                                    16 |   var ss = structData{intData: 12, strData: 12}                                                                                  17 |   var buffer = bytes.Buffer{}                                                                                                    18 |   err := binary.Write(&buffer, binary.BigEndian, ss.intData)                                                                     19 |   if err != nil {                                                                                                                20 |   |   fmt.Printf("err")                                                                                                          21 |   }                                                                                                                              22                                                                                                                                    23 |   err = binary.Write(&buffer, binary.BigEndian, ss.strData)                                                                      24 |   if err != nil {                                                                                                                25 |   |   fmt.Printf("err")                                                                                                          26 |   }                                                                                                                              27                                                                                                                                    28 |   fmt.Printf("struct:%v\n", buffer)                                                                                              29 }                                                                                                                                  
~              
结果:
struct:{[0 0 0 12 0 0 0 12] 0 0}
四、字符串和整型之间的转换
>>  1 package main                                                                                                                       2                                                                                                                                    3 import (                                                                                                                           4 |   "fmt"                                                                                                                          5 |   "strconv"                                                                                                                      6 )                                                                                                                                  7                                                                                                                                    8                                                                                                                                    9 func main() {                                                                                                                      10 |   //字符串转整型                                                                                                                 11 |   ss, err := strconv.Atoi("12")                                                                                                  12 |   if err != nil {                                                                                                                13 |   |   fmt.Printf("err")                                                                                                          14 |   }                                                                                                                              15 |   fmt.Printf("ss:%d\n", ss)                                                                                                      16                                                                                                                                    17 |   aa := strconv.Itoa(ss)                                                                                                         18 |   fmt.Printf("aa:%s\n", aa)                                                                                                      19                                                                                                                                    20 }    
结果:
ss:12
aa:12
补充:
v1 := "100"
v2, _ := strconv.Atoi(v1)  // 将字符串转化为整型,v2 = 100v3 := 100
v4 := strconv.Itoa(v3)   // 将整型转化为字符串, v4 = "100"v5 := "true"
v6, _ := strconv.ParseBool(v5)  // 将字符串转化为布尔型
v5 = strconv.FormatBool(v6)  // 将布尔值转化为字符串v7 := "100"
v8, _ := strconv.ParseInt(v7, 10, 64)   // 将字符串转化为整型,第二个参数表示进制,第三个参数表示最大位数
v7 = strconv.FormatInt(v8, 10)   // 将整型转化为字符串,第二个参数表示进制v9, _ := strconv.ParseUint(v7, 10, 64)   // 将字符串转化为无符号整型,参数含义同 ParseInt
v7 = strconv.FormatUint(v9, 10)  // 将字符串转化为无符号整型,参数含义同 FormatIntv10 := "99.99"
v11, _ := strconv.ParseFloat(v10, 64)   // 将字符串转化为浮点型,第二个参数表示精度
v10 = strconv.FormatFloat(v11, 'E', -1, 64)q := strconv.Quote("Hello, 世界")    // 为字符串加引号
q = strconv.QuoteToASCII("Hello, 世界")  // 将字符串转化为 ASCII 编码
五、杂项
var f float64
bits = *(*uint64)(unsafe.Pointer(&f))type ptr unsafe.Pointer
bits = *(*uint64)(ptr(&f))var p ptr = nil
float64就强制转换成uint64类型,float的地址就是一个值但是类型是float64,然后创建了一个uint64类型变量,地址值也是float64的地址值,两个变量值相同类型不同,强制转换了类型。
unsafe强制转换是指针的底层操作了,用c的朋友就很熟悉这样的指针类型转换,利用内存对齐才能保证转换可靠,例如int和uint存在符号位差别,利用unsafe转换后值可能不同,但是在内存存储二进制一模一样。