Golang 使用过程,碰到的问题

1. json 转 数组

数据表中存储的json数据,包含字符串和整型,读取出来要重写数据;
则需要讲数据设置为interface{},

// 数据表数据:[{"age": 13, "sort": 1, "name": "张三", "class_id": 82}, {"age": 14, "sort": 2, "name": "李四", "class_id": 82}]
// 数据库json 转 数组,读取并更改
var classMsg []map[string]interface{}
// 转数据 
var err = json.Unmarshal([]byte(roleDialog.DialogContent), &classMsg)
if err == nil {
	fmt.Println(classMsg)
	// 打印结果 -----------------------
	// [map[name:张三 age:13 class_id:82 sort:1] map[name:李四 age:14 class_id:82 sort:2]]
	// 打印结果 End -----------------------
}

已经讲json转成数组结构;

2. interface{} 中的数据转string,int

根据上面获取的数据,需要读取class_id 中的数据,并处理,处理源的数据类型为int;
然而在interface{}中的数值为float64,不能直接使用,会报错:【interface conversion: interface {} is float64, not int】

fmt.Printf("name: %v, type: %v \n", classMsg[0]["class_id"], reflect.TypeOf(classMsg[0]["class_id"]))
// 打印结果 ------------------
// name: 82, type: float64 
// 打印结果 End -----------------------
classId := int(classMsg[0]["class_id"].(float64))
fmt.Printf("name: %v, type: %v \n", classId, reflect.TypeOf(classId))
// 打印结果 ------------------
// name: 82, type: int 
// 打印结果 End -----------------------

3. []interface{} 转数组

  1. 简单数据结构
    数据库存放数据json:其中包含字符串和数组
    classMsg:{“level”: “3”, “class_id”: “173”, “students”: [174]}
// 类型[]interface{}, 转数组
var students = classMsg["students"]
fmt.Println(students)					// [174]
fmt.Println(reflect.TypeOf(students))	// []interface {}
value := reflect.ValueOf(students)
fmt.Println(value)						// [174]
var res []uint
for i := 0; i < value.Len(); i++ {
	res = append(res, uint(value.Index(i).Interface().(float64)))
}
fmt.Println(res)						// [174]
fmt.Println(reflect.TypeOf(res))		// []uint
  1. 复杂的数据结构:(数据存储成这样我也是不想的 T-T)
    {“info”: [{“intro”: 111, “title”: 1, “audio_id”: 1247, “listorder”: 1}, {“intro”: 222, “title”: 2, “audio_id”: 1131, “listorder”: 2}], “dlgs_id”: 0}
    类型转换,类型断言
var behaviorInfo map[string]interface{}
err:= json.Unmarshal([]byte(originPoint.BehaviorInfo), &behaviorInfo)
//  {"info": [{"intro": 111, "title": 1, "audio_id": 1247, "listorder": 1}, {"intro": 222, "title": 2, "audio_id": 1131, "listorder": 2}], "dlgs_id": 0}
if err == nil {
	fmt.Println(behaviorInfo["info"])
	info := reflect.ValueOf(behaviorInfo["info"])
	var temInfo []interface{} = info.Interface().([]interface{})
	// [{"intro": 111, "title": 1, "audio_id": 1247, "listorder": 1}, {"intro": 222, "title": 2, "audio_id": 1131, "listorder": 2}]
	fmt.Println(temInfo)
	for _, infoItem := range temInfo {
		var temInfoItem = reflect.ValueOf(infoItem)
		var temInfoItem1 map[string]interface{} = temInfoItem.Interface().(map[string]interface{})
		// {"intro": 111, "title": 1, "audio_id": 1247, "listorder": 1}
		fmt.Println(temInfoItem1["audio_id"])
		/*for k, v := range temInfoItem1 {
			fmt.Printf("key: %v, value: %v \n", k, v)
		}*/
	}

}

4. 字符串与数组互转

字符串转数组

字符串数据:“张三,李四,王五”
strings.Split(数组, “分隔符”)

var str = "张三,李四,王五"
fmt.Printf("value: %v, type: %v \n", str, reflect.TypeOf(str))
// value: 张三,李四,王五, type: string
var arr = strings.Split(str, ",")
fmt.Println(arr)
// [张三 李四 王五]
数组转字符串
var temStr = ""
for _, value = range arr {
	if len(temStr) >0 {
		temStr = temStr + "," + value
	} else {
		temStr = value
	}
}

// 字符串转int
intValue, _ := strconv.Atoi(stringValue)
// int 转字符串
stringValue := strconv.Itoa(intValue)

5. 判断数组中是否有某个键存在

if _, ok := arr["key"]; ok {
	// 存在
}

6. 正则和替换

regexpAudio := regexp.MustCompile("\"audio_id\": (\"(.*?)\"|(\\d*))")
audioValue := regexpAudio.FindAllString(originPoint.BehaviorInfo, -1)
fmt.Println(audioValue)
fmt.Println("---------------------")
fmt.Println(originPoint.BehaviorInfo)
for _, value := range audioValue {
	var temAudioId = strings.Split(value, ": ")[1]
	audioId, _ := strconv.Atoi(temAudioId)
	var replaceId = strconv.Itoa(int(playDataMap["audio"][uint(audioId)]))
	// 字符替换
	originPoint.BehaviorInfo = strings.Replace(originPoint.BehaviorInfo, " "+temAudioId, " "+replaceId, -1)
}
fmt.Println(originPoint.BehaviorInfo)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang使用教程可以按照以下步骤进行学习: 1. 确保环境搭建完成:根据golang基础教程(一)中的指引,搭建好Golang的开发环境。 2. 了解开发规范及API:参考golang基础教程(二),学习Golang的开发规范和常用的API使用方法。 3. 学习变量与数据类型:阅读golang基础教程(三)和(四),掌握Golang中的变量声明和各种基本数据类型。 4. 掌握基本数据类型的转换:参考golang基础教程(五)和(六),学习Golang中基本数据类型的相互转换方法。 5. 理解指针的概念:阅读golang基础教程(七),了解指针在Golang中的作用和使用方法。 6. 学习数组和切片:参考golang基础教程(八)和(九),掌握Golang中数组和切片的定义和操作。 7. 熟悉map的使用:阅读golang基础教程(十),学习Golang中map的定义和使用方法。 8. 理解结构体的概念:参考golang基础教程(十一),了解Golang中结构体的定义和使用。 9. 掌握方法的使用:阅读golang基础教程(十二),学习Golang中方法的定义和调用。 10. 了解继承的概念:参考golang基础教程(十三),了解Golang中的继承实现方式。 11. 掌握接口和多态的使用:阅读golang基础教程(十四),学习Golang中接口的定义和多态的实现。 12. 学习异常处理:参考golang基础教程(十五),了解Golang中异常处理的方式。 13. 熟悉文件操作:阅读golang基础教程(十六),学习Golang中文件的读写操作方法。 14. 理解goroutine和channel的使用:参考golang基础教程(十七),了解Golang中并发编程的基本概念和使用方法。 15. 了解Golang并发原理:参考golang基础教程(十八),学习Golang中并发编程的底层原理。 16. 掌握反射的使用:阅读golang基础教程(十九),了解Golang中反射的基本操作和使用场景。 17. 学习tcp网络编程:参考golang基础教程(二十),了解Golang中基于TCP协议的网络编程方法。 18. 进行单元测试:阅读golang基础教程(附录一),学习Golang中单元测试的编写和执行。 以上是一个基本的Golang使用教程的概述,按照这些步骤,你可以系统地学习和掌握Golang的基础知识和常用技巧。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [golang基础教程](https://blog.csdn.net/weixin_37910453/article/details/87276411)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Golang基础教程](https://blog.csdn.net/a58125584s/article/details/124511834)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值