二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Shell编程

  • Go编程笔记

    • 开发技巧

      • go日常开发代码片段
      • golang交叉编译
      • 两个切片内容相减的几种方法
      • golang以结构体中某个字段进行排序
      • vscode开发golang报黄提示composite literal uses unkeyed fields
      • golang使用$in或$nin查询MongoDB是否在数组内的数据
      • golang使用$push和$addToSet往数组添加字段的异同
      • MongoDB自增ID在golang中的实践
      • golang数据类型转换汇总
        • String To Other
        • Other To String
        • Map To Other
        • Json To Other
        • Struct To Other
      • 记录VSCode中写Go代码切换Sqlite无CGO依赖版本的过程以及遇到的五个问题
      • 企业微信自建应用-golang校验回调
      • 对接腾讯云未集成到SDK的接口开发实践小记
      • Go开发实践之Gin框架将前端的dist目录embed到二进制
    • 库包研究

    • 个人项目

  • 前端编程笔记

  • Go学习笔记

  • Vue-21年学习笔记

  • Vue-22年重学笔记

  • 编程世界
  • Go编程笔记
  • 开发技巧
二丫讲梵
2022-07-17
目录

golang数据类型转换汇总

文章发布较早,内容可能过时,阅读注意甄别。

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

# String To Other

  • string to int

    • 方法一

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

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

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

    int32 也叫做 rune

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

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

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

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

    	s1 := "hello"
      b := []byte(s1)
    
    1
    2
  • 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
    }
    
    1
    2
    3
    4
    5
    6
    7

# Other To String

  • []byte to string

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

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

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

    要转换int为string也可以使用strconv.Itoa (opens new window)which 等价于strconv.FormatInt(int64(i), 10) (opens new window).

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

# 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
    }
    
    1
    2
    3
    4
    5
    6
    7

    通常也会使用一些第三方的 json 库进行解析,这里推荐:github.com/json-iterator/go (opens 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))
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
  • 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
    }
    
    1
    2
    3
    4
    5
    6
    7

# 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)
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 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)
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    使用第三方 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)
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

# 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))
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23

    同理,这里仍旧可以借助第三方 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))
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

未完。。。

微信 支付宝
上次更新: 2024/09/26, 21:41:44
MongoDB自增ID在golang中的实践
记录VSCode中写Go代码切换Sqlite无CGO依赖版本的过程以及遇到的五个问题

← MongoDB自增ID在golang中的实践 记录VSCode中写Go代码切换Sqlite无CGO依赖版本的过程以及遇到的五个问题→

最近更新
01
记录二五年五一之短暂回归家庭
05-09
02
学习周刊-总第210期-2025年第19周
05-09
03
学习周刊-总第209期-2025年第18周
05-03
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式