【Go语言】4、文本编码处理

文本编码处理

 

    1、字符串

    字符串的基本操作包括包含,连接,取索引,分割等等。

    (1)包含判断使用strings.Contains(s, temp),其中s为检测字符串,temp为是否包含的字符串,该函数包含则返回true,反之。

    (2)取索引使用strings.Index(s, temp),其中s为检测字符串,temp为待取的字符串,该函数返回的是temp在s中开始的索引位置,没有搜索到返回-1。

    (3)分割字符串使用strings.Split(s, temp),其中s为待分割字符串,temp为分割字符,函数返回的是一个以temp为分割,将s分割开的字符串数组。

    说到这里有个合并字符串的操作,strings.Join(arrayStr, temp),进行的是和Split完全相反的操作,意会一下。

    (4)检测前缀和检测后缀,strings.HasPrefix和strings.HasSuffix,参数包含两个,s和temp,函数返回s的前缀或者后缀是否为temp的bool值。

    以上操作如下图中代码所示

 

    2、struct对象的序列化和反序列化

    对于struct类型的数据进行xml序列化的时候只有一点需要注意的就是,struct里的变量名都必须大写开头,否则会无法序列化,如下图所示

    而反序列化则是使用Unmarshal函数,参数包括已经序列化了的[]byte类型数据以及等待被赋予结果的结构体数据。

 

    3、一个自动化读取vs工程xml类文件的代码实例

package main

import (
	"bytes"
	"encoding/xml"
	"fmt"
	"io/ioutil"
)

//获取节点属性值
func getAttrValue(attrs []xml.Attr, name_attr string) string {
	var value string
	//遍历出入的属性数组,当名称为我们所需要的时候,返回对应的值
	for _, v := range attrs {
		if v.Name.Local == name_attr {
			value = v.Value
		}
	}
	return value
}

func main() {
	//读取文件,并解析成一个Decoder
	content, err := ioutil.ReadFile("Assembly-CSharp.csproj")
	txt_decoder := xml.NewDecoder(bytes.NewBuffer(content))

	//待用状态机
	var isInItemGroup bool = false
	//待用节点
	var t xml.Token

	//循环整个Decoder
	for t, err = txt_decoder.Token(); err == nil; t, err = txt_decoder.Token() {

		switch token := t.(type) {
		case xml.StartElement:        		//如果是开始节点
			//如果状态机为真说明在ItemGroup中,如果状态机为假且当前节点名称为ItemGroup则修改状态机
			if isInItemGroup {
				if token.Name.Local == "Compile" {
					fmt.Println(getAttrValue(token.Attr, "Include"))
				}
			} else if token.Name.Local == "ItemGroup" {
				isInItemGroup = true
			}
		case xml.EndElement:        			//如果是结束节点
			//如果状态机为真,且当前结束节点是ItemGroup则修改状态机状态,表示已遍历出ItemGroup标签
			if isInItemGroup {
				if token.Name.Local == "ItemGroup" {
					isInItemGroup = false
				}
			}
		}
	}
}

 

    4、命令行解析

    待学习!!!

 

    (关于文本编码处理的一点学习笔记,若有误望指正,有新的内容会继续回来编辑)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值