Go 语言之 Json 解析,正则表达式,从数据库导出 CSV 文件代码示例

Json 解析

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", &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
}

生成 Json

package main

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

type User struct {
	UserName string
	NickName string `bson:"nickName"`
	Email    string
}

func main() {
	user := &User{
		UserName: "Jack",
		NickName: "Ma",
		Email:    "xxxxx@qq.com",
	}
	data, err := json.Marshal(user)
	if err != nil {
		fmt.Printf("json.Marshal failed,err:", err)
		return
	}
	fmt.Printf("%s\n", string(data))
	file, _ := os.Create("json_write.json")
	defer file.Close()
	file.Write(data)
}

Regexp 包应用示例

匹配电话号码

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)
}

匹配 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("8888@qq.com")
	fmt.Println(res2)

	res2 = findEmail("shir?don@qq.com")
	fmt.Println(res2)

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

从数据库导出 CSV 文件

Mysql

CREATE DATABASE UserManager;

USE UserManager;

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='用户表';

BEGIN;

INSERT INTO `user` VALUES (1, 'shirdon', '1888888888', 'shirdonliao@gmail.com', '');

INSERT INTO `user` VALUES (2, 'barry', '18788888888', 'barry@163.com', '');

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
}

// 定义一个全局变量
var u User

// 初始化数据库连接
func init() {
	db, _ = sql.Open("mysql",
		"account:password@tcp(127.0.0.1:3306)/UserManager?"+
			"charset=utf8mb4&parseTime=True&loc=Local")
}

func main() {
	//定义导出的文件名
	filename := "./exportUsers.csv"

	//从数据库中获取数据
	users := queryMultiRow()
	//定义一个二维数组
	column := [][]string{{"手机号", "用户UID", "Email", "用户名"}}
	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)
	}
	//导出
	ExportCsv(filename, column)
}

// 导出csv文件
func ExportCsv(filePath string, data [][]string) {
	fp, err := os.Create(filePath) //创建文件句柄
	if err != nil {
		log.Fatalf("创建文件["+filePath+"]句柄失败,%v", err)
		return
	}
	defer fp.Close()
	fp.WriteString("\xEF\xBB\xBF") //写入UTF-8 BOM
	w := csv.NewWriter(fp)         //创建一个新的写入文件流
	w.WriteAll(data)
	w.Flush()
}

// 查询多条数据
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\n", err)
		return nil
	}
	// 关闭rows释放持有的数据库链接
	defer rows.Close()
	// 循环读取结果集中的数据
	users := []User{}
	for rows.Next() {
		err := rows.Scan(&u.Uid, &u.Name, &u.Phone, &u.Email)
		users = append(users, u)
		if err != nil {
			fmt.Printf("scan failed, err:%v\n", err)
			return nil
		}
	}
	return users
}

处理日志文件

Print 一般日志

package main

import (
	"log"
)

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

Panic 意外日志

package main

import (
	"log"
)

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

Fatal 致命日志

package main

import (
	"log"
)

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

自定义日志

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")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 不支持。 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于 JavaScript 对象表示法,但是它也可以在其他语言中使用。 JSON 用于在网络上传输数据,它是一个文本格式,用于描述由属性名称和值组成的数据对象。 JSON 不支持正则表达式,因为正则表达式是用来匹配和操作文本的,而 JSON 是用来描述和传输数据的。 ### 回答2: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于存储和传输结构化的数据。它是基于JavaScript的一个子集,因此可以直接在JavaScript中使用。 JSON本身并不支持正则表达式。它只是一种用于描述数据结构的格式,并不涉及数据的处理。但是,在使用JSON的场景下,可以通过JavaScript语言正则表达式功能来处理JSON数据。 在JavaScript中,可以使用正则表达式来对JSON字符串进行一些特定的处理,比如搜索、匹配、替换等操作。通过使用正则表达式的相应方法(如RegExp对象的test()、exec()和replace()等方法),可以对JSON数据进行自定义的处理。 但需要注意的是,在处理JSON数据时,应当谨慎使用正则表达式正则表达式的复杂性会导致性能下降,尤其是在大规模的数据处理时。因此,在实际应用中,应当根据具体需求和性能要求,合理选择是否使用正则表达式来处理JSON数据。 ### 回答3: JSON(JavaScript Object Notation)是一种用于数据传输和存储的轻量级数据交换格式,它主要用于前后端数据交互以及API的调用。JSON本身并不支持直接使用正则表达式。 在JSON中,我们只能使用一些基本的数据类型,如字符串、数字、布尔值、数组和对象等。而不像某些编程语言(例如JavaScript)中,可以直接使用正则表达式的特性。 然而,我们可以使用字符串来表示正则表达式,并在JSON中进行传输或存储。通常,我们可以将正则表达式作为一个字符串值,与其他键值对一起构建一个JSON对象。 例如,我们可以将正则表达式对象表示为一个字符串,然后在JSON中使用该字符串。在接收JSON数据时,我们可以将该字符串解析正则表达式对象,然后进行进一步的处理和匹配。 总结来说,JSON本身不直接支持正则表达式,但我们可以将正则表达式作为字符串值嵌入到JSON中,以达到传输和存储的目的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蒋的学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值