golang常用文書処理まとめ


本文は主にいくつかの常用文書の処理方法をまとめ、後期に更新し続けます.
一、JSONは構造体に解析します.
この部分を紹介する前に、Jsonの文法を簡単に紹介します.
JSON文法はJavaScript文法のサブセットです.JSON文法はJavaScriptの対象がフランス語法のサブセットを表しています.
  • データは、名称/値ペアにおいて
  • である.
  • データはカンマ区切り
  • です.
  • 大かっこ保存オブジェクト
  • 中かっこ保存配列
  • 1.JSON名称/値ペア
    "name" : "value"
    2.JSON値は、
  • 数字(整数または浮動小数点)
  • 文字列(二重引用符)
  • 論理値(trueまたはfalse)
  • 配列(中かっこ)
  • オブジェクト(大括弧内)
  • null
  • 3.JSONデータJSON数字は、整体または浮動小数点型であることができます.   
    { "age":30 }
    4.JSON対象JSONは、大括弧({})に書く:  オブジェクトには複数の名前と値のペアが含まれます.
    {
        "name": "runoob",
        "alexa": 10000,
        "sites": {
            "site1": "www.runoob.com",
            "site2": "m.runoob.com",
            "site3": "c.runoob.com"
        }
    }
    5.JSON配列JSON配列は、中かっこで書く:
    配列は複数のオブジェクトを含むことができます.
    {
        "sites": [
            {
                "name": "    ",
                "url": "www.runoob.com"
            },
            {
                "name": "google",
                "url": "www.google.com"
            },
            {
                "name": "  ",
                "url": "www.weibo.com"
            }
        ]
    }
    6.JSONブール値
    { "flag":true }
    7.JSON null
    { "runoob":null }
    Jsonは構造体に解析しました.
    //JSON      
    package main
    import (
    	"encoding/json"
    	"fmt"
    	"os"
    )
    type Server struct {
    	ServerName string
    	ServerIP   string
    }
    type Serverslice struct {
    	Servers []Server
    }
    func main() {
    	var s Serverslice
    	str := `{"servers":
       [{"serverName":"Guangzhou_Base","serverIP":"127.0.0.1"},
       {"serverName":"Beijing_Base","serverIP":"127.0.0.2"}]}`
    	err:=json.Unmarshal([]byte(str), &s)
    	if err!=nil{
    		fmt.Println(err)
    	}
    	fmt.Println(s)
    	fmt.Println(s.Servers[0].ServerName)
    }
    二、Json-map
    package main
    
    
    import (
        "fmt"
        "encoding/json"
    )
    
    func main() {
    
        b := []byte(`{"IP": "127.0.0.1", "name": "SKY"}`)
    
        m := make(map[string]string)
    
        err := json.Unmarshal(b, &m)
        if err != nil {
    
            fmt.Println("Umarshal failed:", err)
            return
        }
    
    
        fmt.Println("m:", m)
    
        for k,v :=range m {
            fmt.Println(k, ":", v)
        }
    }
    
    出力結果:
    m:map[IP:127.1.0.1 name:SKY]  name:SKY  IP:127.1.0.1
    三、JSONを生成する
    package main
    import (
        "encoding/json"
        "fmt"
    )
    type Server struct {
        ServerName string `json:"serverName,string"`
        ServerIP   string `json:"serverIP,omitempty"`
    }
    type Serverslice struct {
        Servers []Server `json:"servers"`
    }
    func main() {
        var s Serverslice
        s.Servers = append(s.Servers, Server{ServerName: "Guangzhou_Base", ServerIP: "127.0.0.1"})
        s.Servers = append(s.Servers, Server{ServerName: "Beijing_Base", ServerIP: "127.0.02"})
        b, err := json.Marshal(s)
        if err != nil {
            fmt.Println("JSON ERR:", err)
        }
        fmt.Println(string(b))
    }
    
    四、書類を書く
    //   
    package main
    import (
    	"fmt"
    	"os"
    )
    func main() {
    	userFile := "test.txt"
    	fout, err := os.Create(userFile)
    	defer fout.Close()
    	if err != nil {
    		fmt.Println(userFile, err)
    		return
    	}
    	for i := 0; i < 10; i++ {
    		fout.WriteString("Just a test!\r
    ") fout.Write([]byte("Just a test!\r
    ")) } }
    五、書類を読む
    //   
    package main
    import (
        "fmt"
        "os"
    )
    func main() {
        userFile := "text.txt"
        fl, err := os.Open(userFile)
        defer fl.Close()
        if err != nil {
            fmt.Println(userFile, err)
            return
        }
        buf := make([]byte, 1024)
        for {
            n, _ := fl.Read(buf)
            if 0 == n {
                break
            }
            os.Stdout.Write(buf[:n])
        }
    }
    六、行ごとにファイルを読み込みます.
    package main
    
    import (
    	"fmt"
    	"os"
    	"io"
    	"bufio"
    	"strings"
    )
    
    func main() {
    	fileName := "test.txt"
    	file, err := os.OpenFile(fileName, os.O_RDWR, 0666)
    	if err != nil {
    		fmt.Println("Open file error!", err)
    		return
    	}
    	defer file.Close()
    
    	stat, err := file.Stat()
    	if err != nil {
    		panic(err)
    	}
    
    	var size = stat.Size()
    	fmt.Println("file size=", size)
    
    	buf := bufio.NewReader(file)
    	for {
    		line, err := buf.ReadString('
    ') line = strings.TrimSpace(line) fmt.Println(line) if err != nil { if err == io.EOF { fmt.Println("File read ok!") break } else { fmt.Println("Read file error!", err) return } } } }
    七、文字列の余分なスペースを削除します.
            文字列の余分なスペース(tabを含む)を削除し、複数のスペースがある場合は、1つのスペースだけを残して、文字列のtabをスペースに変えます.
    
    func DeleteExtraSpace(s string) string {
    	//           ,      ,       
    	s1 := strings.Replace(s, "	", " ", -1)      //  tab   
    	regstr := "\\s{2,}"                          //               
    	reg, _ := regexp.Compile(regstr)             //       
    	s2 := make([]byte, len(s1))                  //        
    	copy(s2, s1)                                 //         
    	spc_index := reg.FindStringIndex(string(s2)) //       
    	for len(spc_index) > 0 {                     //     
    		s2 = append(s2[:spc_index[0]+1], s2[spc_index[1]:]...) //      
    		spc_index = reg.FindStringIndex(string(s2))            //         
    	}
    	return string(s2)
    }
    
    もっとテキスト処理方法https://blog.csdn.net/wade3015/article/details/83715492