golang常用文書処理まとめ
5754 ワード
本文は主にいくつかの常用文書の処理方法をまとめ、後期に更新し続けます.
一、JSONは構造体に解析します.
この部分を紹介する前に、Jsonの文法を簡単に紹介します.
JSON文法はJavaScript文法のサブセットです.JSON文法はJavaScriptの対象がフランス語法のサブセットを表しています.データは、名称/値ペアにおいて である.データはカンマ区切り です.大かっこ保存オブジェクト 中かっこ保存配列 1.JSON名称/値ペア数字(整数または浮動小数点) 文字列(二重引用符) 論理値(trueまたはfalse) 配列(中かっこ) オブジェクト(大括弧内) null 3.JSONデータJSON数字は、整体または浮動小数点型であることができます.
配列は複数のオブジェクトを含むことができます.
m:map[IP:127.1.0.1 name:SKY] name:SKY IP:127.1.0.1
三、JSONを生成する
文字列の余分なスペース(tabを含む)を削除し、複数のスペースがある場合は、1つのスペースだけを残して、文字列のtabをスペースに変えます.
一、JSONは構造体に解析します.
この部分を紹介する前に、Jsonの文法を簡単に紹介します.
JSON文法はJavaScript文法のサブセットです.JSON文法はJavaScriptの対象がフランス語法のサブセットを表しています.
"name" : "value"
2.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-mappackage 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