Go language Json parsing, regular expressions, code examples for exporting CSV files from the database

Json parsing

package main

import (
"encoding/json"
"fmt"
"os"
)

type MongoConfig struct {<!-- -->
MongoAddr string
MongoPoolLimit int
MongoDB string
MongoCollection string
}

type Config struct {<!-- -->
Port string
Mongo MongoConfig
}

func main() {<!-- -->
JsonParse := NewJsonStruct()
v := Config{<!-- -->}
if err := JsonParse.Load("json_parse.json", & amp;v); err != nil {<!-- -->
fmt.Println("Error loading configuration:", err)
return
}
fmt.Println("Port:", v.Port)
fmt.Println("MongoDb:", v.Mongo.MongoDb)
}

type JsonStruct struct{<!-- -->}

func NewJsonStruct() *JsonStruct {<!-- -->
return &JsonStruct{<!-- -->}
}

func (js *JsonStruct) Load(filename string, v interface{<!-- -->}) error {<!-- -->
data, err := os.ReadFile(filename)
if err != nil {<!-- -->
return err
}
if err = json.Unmarshal(data, v); err != nil {<!-- -->
return err
}
return nil
}

Generate Json

package main

import (
"encoding/json"
"fmt"
"os"
)

type User struct {<!-- -->
UserName string
NickName string `bson:"nickName"`
Email string
}

func main() {<!-- -->
user := & amp;User{<!-- -->
UserName: "Jack",
NickName: "Ma",
Email: "[email protected]",
}
data, err := json.Marshal(user)
if err != nil {<!-- -->
fmt.Printf("json.Marshal failed,err:", err)
return
}
fmt.Printf("%s\\
", string(data))
file, _ := os.Create("json_write.json")
defer file.Close()
file.Write(data)
}

Regexp package application example

Match phone numbers

package main

import (
"fmt"
"regexp"
)

func findPhoneNumber(str string) bool {<!-- -->
reg := regexp.MustCompile("^1[1-9]{10}")
res := reg.FindAllString(str, -1)
if res == nil {<!-- -->
return false
}
return true
}
func main() {<!-- -->
res2 := findPhoneNumber("13688888888")
fmt.Println(res2)

res2 = findPhoneNumber("02888888888")
fmt.Println(res2)

res2 = findPhoneNumber("123456789")
fmt.Println(res2)
}

Match Email

package main

import (
"fmt"
"regexp"
)

func findEmail(str string) bool {<!-- -->
reg := regexp.MustCompile("^[a-zA-Z0-9_] + @[a-zA-Z0-9] + \.[a-zA-Z0-9] + ")

res := reg.FindAllString(str, -1)
if res == nil {<!-- -->
return false
}
return true
}
func main() {<!-- -->
res2 := findEmail("[email protected]")
fmt.Println(res2)

res2 = findEmail("[email protected]")
fmt.Println(res2)

res2 = findEmail("8888@qqcom")
fmt.Println(res2)
}

Export CSV file from database

Mysql

CREATE DATABASE UserManager;

USEUserManager;

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `uid` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT '',
  `phone` varchar(20) DEFAULT '',
  `email` varchar(30) DEFAULT '',
  `password` varchar(100) DEFAULT '',
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='User Table';

BEGIN;

INSERT INTO `user` VALUES (1, 'shirdon', '1888888888', '[email protected]', '');

INSERT INTO `user` VALUES (2, 'barry', '18788888888', '[email protected]', '');

COMMIT;

Go

package main

import (
"database/sql"
"encoding/csv"
"fmt"
_ "github.com/go-sql-driver/mysql"
"log"
"os"
"strconv"
)

var db *sql.DB

type User struct {<!-- -->
Uid int
Name string
Phone string
Email string
Password string
}

//Define a global variable
var uUser

//Initialize database connection
func init() {<!-- -->
db, _ = sql.Open("mysql",
"account:password@tcp(127.0.0.1:3306)/UserManager?" +
"charset=utf8mb4 & amp;parseTime=True & amp;loc=Local")
}

func main() {<!-- -->
//Define the exported file name
filename := "./exportUsers.csv"

//Get data from database
users := queryMultiRow()
//Define a two-dimensional array
column := [][]string{<!-- -->{<!-- -->"Mobile phone number", "User UID", "Email", "Username" }}
for _, u := range users {<!-- -->
str := []string{<!-- -->}
str = append(str, u.Phone)
str = append(str, strconv.Itoa(u.Uid))
str = append(str, u.Email)
str = append(str, u.Name)
column = append(column, str)
}
//Export
ExportCsv(filename, column)
}

//Export csv file
func ExportCsv(filePath string, data [][]string) {<!-- -->
fp, err := os.Create(filePath) //Create file handle
if err != nil {<!-- -->
log.Fatalf("Failed to create file[" + filePath + "] handle, %v", err)
return
}
defer fp.Close()
fp.WriteString("\xEF\xBB\xBF") //Write UTF-8 BOM
w := csv.NewWriter(fp) //Create a new writing file stream
w.WriteAll(data)
w.Flush()
}

// Query multiple pieces of data
func queryMultiRow() []User {<!-- -->
rows, err := db.Query("select uid,name,phone,email from `user` where uid > ?", 0)
if err != nil {<!-- -->
fmt.Printf("query failed, err:%v\\
", err)
return nil
}
//Close rows and release the held database link
defer rows.Close()
//Loop to read the data in the result set
users := []User{<!-- -->}
for rows.Next() {<!-- -->
err := rows.Scan( & amp;u.Uid, & amp;u.Name, & amp;u.Phone, & amp;u.Email)
users = append(users, u)
if err != nil {<!-- -->
fmt.Printf("scan failed, err:%v\\
", err)
return nil
}
}
return users
}

Processing log files

Print General Log

package main

import (
"log"
)

func main() {<!-- -->
no := []int{<!-- -->6, 8}
log.Print("Print NO. ", no, "\\
")
log.Println("Println NO.", no)
log.Printf("Printf NO. with item [%d,%d]\\
", no[0], no[1])
}

Panic accident log

package main

import (
"log"
)

func main() {<!-- -->
no := []int{<!-- -->6, 8}
log.Panicln("Println NO.", no)
}

Fatal fatal log

package main

import (
"log"
)

func main() {<!-- -->
no := []int{<!-- -->6, 8}
log.Fatalln("Println NO.", no)
}

Custom log

package main

import (
"log"
"os"
)

func main() {<!-- -->
fileName := "New.log"
logFile, err := os.Create(fileName)
defer logFile.Close()
if err != nil {<!-- -->
log.Fatalln("open file error")
}
debugLog := log.New(logFile, "[Info]", log.Llongfile)
debugLog.Println("Info Level Message")
debugLog.SetPrefix("[Debug]")
debugLog.Println("Debug Level Message")
}