有趣的GO写法

//计算带中文字符串的长度,会正确计算中文字符的长度
utf8.RuneCountInString(字符串变量名)
//遍历字符串并转为rune格式【unicode】数组,可以正确遍历中文字符串
bytes := []byte(字符串变量名)
for len(bytes) > 0 {
    ch, size := utf8.DecodeRune(bytes)
    bytes = bytes[size:]
    fmt.Printf("%c", ch)
}

//也可以这么做,更简单直接/此操作会另开一个内存空间,重新构建一个rune格式数组,每字符4字节
for i, ch := range []rune(字符串变量名) {
    fmt.Printf("(%d %c", i, ch)
}
// 返回参数1减去参数2后的字符串
func getSuffixDir(filePath string, prefix string) string {
	bufferLength := len(prefix)
	prefixByte := make([]byte, bufferLength)
	var b bytes.Buffer
	b.Write([]byte(filePath))
	b.Read(prefixByte)
	return b.String()
}
//一次遍历实现数组去重
func heavy(keywords []string) []string {
	var theMap = make(map[string]bool)
	var returnList []string
	for i := 0;i < len(keywords);i++ {
		if _, ok := theMap[keywords[i]]; ok {
			continue
		} else {
			theMap[keywords[i]] = false
			returnList = append(returnList, keywords[i])
		}
	}
	return returnList
}
if !validUTF8(file_data) {
	keywords = ConvertToString(keywords, "GB18030", "UTF-8")
}

//转字符集
func ConvertToString(src string, srcCode string, tagCode string) string {
	srcCoder := mahonia.NewDecoder(srcCode)
	srcResult := srcCoder.ConvertString(src)
	tagCoder := mahonia.NewDecoder(tagCode)
	_, cdata, _ := tagCoder.Translate([]byte(srcResult), true)
	result := string(cdata)
	return result
}

//判断字符集是不是UTF-8
func validUTF8(buf []byte) bool{
	nBytes := 0
	for i:= 0;i<len(buf);i++{
		if nBytes == 0{
			if (buf[i] & 0x80) != 0 {  //与操作之后不为0,说明首位为1
				for (buf[i] & 0x80) != 0 {
					buf[i] <<= 1 //左移一位
					nBytes++ //记录字符共占几个字节
				}

				if nBytes < 2 || nBytes > 6 { //因为UTF8编码单字符最多不超过6个字节
					return false
				}

				nBytes-- //减掉首字节的一个计数
			}
		}else{ //处理多字节字符
			if buf[i] & 0xc0 != 0x80{ //判断多字节后面的字节是否是10开头
				return false
			}
			nBytes--
		}
	}
	return nBytes == 0
}
//返回json数组时,如果数组为空,有可能返回的是空字符串"",但是反序列化空字符串会报错,所以如果json数组为空,要把json格式的空数组"[]"拿去反序列化
返回数据 := "[]"
if !strings.EqualFold(string(json数据), "") {
	返回数据 = string(json数据)
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值