@@ -1,58 +0,0 @@ 09.golang数据类型转换汇总 | 凤凰涅槃进阶之路

09.golang数据类型转换汇总

Abel sun2023年1月6日约 648 字大约 2 分钟

09.golang数据类型转换汇总

golang作为强类型语言,我们在日常开发过程中,遇到类型转换的场景也非常多,本文整理我在工作开发中遇到过的类型转换实践。

String To Other

  • string to int

    • 方法一

       str := "10"
       int, err := strconv.Atoi(str)
      
    • 方法二

       str := "10"
       int, err := strconv.ParseInt(str, 10, 0)
      
  • string to int8

     str := "10"
     int, err := strconv.ParseInt(str, 10, 8)
    
  • string to int32

    int32也叫做rune

     str := "10"
     int, err := strconv.ParseInt(str, 10, 32)
    
  • string to int64

     str := "10"
     int, err := strconv.ParseInt(str, 10, 64)
    
  • string to float32

     ret, _ := strconv.ParseFloat("3.14159", 32)
     fmt.Println(ret)
    
  • string to float64

     ret, _ := strconv.ParseFloat("3.14159", 64)
     fmt.Println(ret)
    
  • string to []byte

     s1 := "hello"
      b := []byte(s1)
    
  • json string to map

    func JsonToMap(jsonStr string) (m map[string]string, err error) {
     err = json.Unmarshal([]byte(jsonStr), &m)
     if err != nil {
      return nil, err
     }
     return
    }
    

Other To String

  • []byte to string

     var s1 []byte
     fmt.Println(string(s1))
    
  • int64 to string

    int, int32, int16, int8 转十进制字符串

     var number int = 12 // 您可以在这里使用任何整数: int32, int16, int8
     s := strconv.FormatInt(int64(123), 10)
     fmt.Println(s)
    

    要转换intstring也可以使用strconv.Itoaopen in new windowwhich 等价于strconv.FormatInt(int64(i), 10)open in new window.

     number := 12
     str := strconv.Itoa(number)
     fmt.Println(str)
    

Map To Other

  • map to json string

    func MapToJson(m map[string]string) (string, error) {
     result, err := json.Marshal(m)
     if err != nil {
      return "", nil
     }
     return string(result), nil
    }
    

    通常也会使用一些第三方的json库进行解析,这里推荐:github.com/json-iterator/goopen in new window

    package main
    
    import (
     "fmt"
    
     jsoniter "github.com/json-iterator/go"
    )
    
    var json = jsoniter.ConfigCompatibleWithStandardLibrary
    
    func main() {
     tmpData := map[string]interface{}{"name": "eryajf", "age": 18}
    
     output, err := json.Marshal(&tmpData)
     if err != nil {
      fmt.Println(err)
     }
     fmt.Println(string(output))
    }
    
  • map to slice

    func MapToSlice(m map[int]string) []string {
      s := make([]string, 0, len(m))
      for _, v := range m {
        s = append(s, v)
      }
      return s
    }
    

Json To Other

  • json to map

    func JsonToMap() {
     jsonStr := `{"name": "eryajf","age": 18}`
     var mapResult map[string]interface{}
     err := json.Unmarshal([]byte(jsonStr), &mapResult)
     if err != nil {
      fmt.Println("JsonToMap err: ", err)
     }
     fmt.Println(mapResult)
    }
    
  • json to struct

    package main
    
    import (
     "encoding/json"
     "fmt"
    )
    
    type People struct {
     Name string `json:"name"`
     Age int `json:"age"`
    }
    
    func main() {
     jsonStr := `{"name": "eryajf","age": 18}`
     var people People
     json.Unmarshal([]byte(jsonStr), &people)
     fmt.Println(people.Name, people.Age)
    }
    

    使用第三方JSON库进行解析:

    package main
    
    import (
     "fmt"
    
     jsoniter "github.com/json-iterator/go"
    )
    
    type People struct {
     Name string `json:"name"`
     Age int `json:"age"`
    }
    
    func main() {
     jsonStr := `{"name": "eryajf","age": 18}`
     var people People
     json.Unmarshal([]byte(jsonStr), &people)
     fmt.Println(people.Name, people.Age)
    }
    

Struct To Other

  • struct to json

    package main
    
    import (
     "encoding/json"
     "fmt"
    )
    
    type People struct {
     Name string `json:"name"`
     Age int `json:"age"`
    }
    
    func main() {
     p := People{
      Name: "eryajf",
      Age:  18,
     }
     jsonBytes, err := json.Marshal(p)
     if err != nil {
      fmt.Println(err)
     }
     fmt.Println(string(jsonBytes))
    }
    

    同理,这里仍旧可以借助第三方JSON库进行解析:

    package main
    
    import (
     "fmt"
    
     jsoniter "github.com/json-iterator/go"
    )
    
    var json = jsoniter.ConfigCompatibleWithStandardLibrary
    
    type People struct {
     Name string `json:"name"`
     Age  int    `json:"age"`
    }
    
    func main() {
     p := People{
      Name: "eryajf",
      Age:  18,
     }
     jsonBytes, err := json.Marshal(p)
     if err != nil {
      fmt.Println(err)
     }
     fmt.Println(string(jsonBytes))
    }
    

未完。。。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.9.1