zoukankan      html  css  js  c++  java
  • go语言字符串的处理与json转换

    1 字符串的处理

     可以通过Go标准库中的strings和strconv两个包中的函数进行相应的操作

    1 字符串的操作

    1 func Contains(s, substr string) bool
    2 字符串s中是否包含substr,返回bool值
    package main
    
    import (
        "fmt"
        "strings"
    )
    //1 func Contains(s, substr string) bool
    //字符串s中是否包含substr,返回bool值
    func main() {
        fmt.Println(strings.Contains("hello","llo"))
    }
    //2 func Join(a []string, sep string) string
    //字符串链接,把slice a通过sep链接起来
    func main() {
       s := []string{"abc", "456", "999"}
       fmt.Println(strings.Join(s, "** "))
    }
    //3 func Index(s, sep string) int
    //在字符串s中查找sep所在的位置,返回位置值,找不到返回-1
    func main() {
       fmt.Println(strings.Index("chicken", "ken"))
    }
    //4 func Repeat(s string, count int) string
    //重复s字符串count次,最后返回重复的字符串
    func main() {
       fmt.Println("ba" + strings.Repeat("na", 2))
    }
    //5 func Replace(s, old, new string, n int) string
    //在s字符串中,把old字符串替换为new字符串,n表示替换的次数,小于0表示全部替换
    func main() {
       fmt.Println(strings.Replace("ok ok ok", "k", "ky", 2))
    }
    //6  func Split(s, sep string) []string
    //把s字符串按照sep分割,返回slice
    func main() {
       fmt.Printf("%q
    ", strings.Split("a,b,c", ","))
    }
    //7 func Trim(s string, cutset string) string
    //在s字符串的头部和尾部去除cutset指定的字符串
    func main() {
       fmt.Printf("[%q]", strings.Trim(" !哈!哈! ", "! "))
    }
    //8 func Fields(s string) []string
    //去除s字符串的空格符,并且按照空格分割返回slice
    func main() {
       fmt.Println( strings.Fields("  a b  c   "))
    }

    2. 字符串转换

       Append系列函数:将整数等转换为字符串后,添加到现有的字节数组中

    package main
    
    import (
       "fmt"
       "strconv"
    )
    
    func main() {
       str := make([]byte, 0, 100)
       //以10进制方式追加
       str = strconv.AppendInt(str, 4567, 10)
       str = strconv.AppendBool(str, false)
       str = strconv.AppendQuote(str, "abcdefg")
       str = strconv.AppendQuoteRune(str, '')
       fmt.Println(string(str))
    }

      Format系列函数:把其他类型的转换为字符串

    package main
    
    import (
       "fmt"
       "strconv"
       "reflect"
    )
    
    func main() {
       a := strconv.FormatBool(false)
       b := strconv.FormatInt(-1234, 10)
       //Uint无符号
       c := strconv.FormatUint(1234, 10)
       //与FormatInt一样,简写
       d := strconv.Itoa(-2234)
       fmt.Println(a, b, c, d)
       fmt.Println(reflect.TypeOf(a))
    }

    2 处理json

      使用go语言内置的encoding/json 标准库

      1)编码json 

    func Marshal(v interface{}) ([]byte, error) 

      2) 通过结构体生成json

    package main
    
    import (
       "encoding/json"
       "fmt"
    )
    
    type Person struct {
       Name  string
       Hobby string
    }
    
    func main() {
       //1.方式一
       p := Person{"Mr.Sun", ""}
       b, err := json.Marshal(p)
       if err != nil {
          fmt.Println("json err:", err)
       }
       fmt.Println(string(b))
    
       //2.方式二:格式化
       //第二个参数:每行的前缀
       //第三个参数:每行的缩进格式
       b, err = json.MarshalIndent(p,"","    ")
       if err != nil {
          fmt.Println("json err:", err)
       }
       fmt.Println(string(b))
    }

      3) struct tag      tag用来给json字段起别名,也可以隐藏字段

      4)通过map生成json

    package main
    
    import (
       "encoding/json"
       "fmt"
    )
    
    func main() {
       //创建保存任意值的map
       mmp := make(map[string]interface{})
       mmp["name"] = "Mr.Sun"
       mmp["age"] = 18
       mmp["niubility"] = true
    
       //转json
       json, err := json.Marshal(mmp)
       if err != nil {
          fmt.Println("json err:", err)
       }
       fmt.Println(string(json))
    }

    解码json

       解析到结构体

    package main
    
    import (
       "encoding/json"
       "fmt"
    )
    
    type Person struct {
       Name  string `json:"name"`
       Hobby string `json:"hobby"`
    }
    
    func main() {
       //1.创建json数据
       b := []byte(`{"Name":"zhangsan","Hobby":""}`)
       //2.声明结构体
       var p Person
       //3.json解析到结构体
       err := json.Unmarshal(b, &p)
       if err != nil {
          fmt.Println("json err:", err)
       }
       fmt.Println(p)
    }

      解析到interface

    package main
    
    import (
       "encoding/json"
       "fmt"
    )
    
    func main() {
       //1.创建json数据
       b := []byte(`{"Name":"zhangsan","Hobby":""}`)
       //2.声明空interface
       var i interface{}
       //3.解析
       err := json.Unmarshal(b, &i)
       if err != nil {
          fmt.Println(err)
       }
       //默认转成了map
       fmt.Println(i)
       //4.解析到interface的json可以判断类型
       m := i.(map[string]interface{})
       for k, v := range m {
          switch vv := v.(type) {
          case string:
             fmt.Println(k, "是string类型", vv)
          case int:
             fmt.Println(k, "是int类型", vv)
          default:
             fmt.Println("xxx")
          }
       }
    }
  • 相关阅读:
    使用VS Code插件Graphviz Preview来画图
    Y1S002 xshell脚本编写示意
    Y1S001 ubuntu下samba安装配置以及使用vbs映射到驱动器
    Y1吐槽002 情绪
    Y1E001 HDI二阶板、三阶板
    Y1O001波分复用器
    2018-4-5-cadence skill
    2018-4-5-MEMS
    2018-4-5-硬件集成测试规程结构
    Cadence学习笔记
  • 原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/10835510.html
Copyright © 2011-2022 走看看