在写一个将 discuzx 的 post 数据的 bbcode 转换成 html 的功能。

但是转换过程中,越到后面,越卡了。

本来想学学并发的,无奈不会啊。。。太菜了。

注释掉的是想要弄的。。。

求个解决方案。代码如下。

package main

import (

"database/sql"

"fmt"

"github.com/frustra/bbcode"

_ "github.com/go-sql-driver/mysql"

//"time"

//"runtime"

"strconv"

)

const (

XnFromPost = "bbs_post"

XnTopost = "bbs_post"

DxFromPost = "pre_forum_post"

)

type Hostinfo struct {

DBUser,

DBPassword,

DBname,

DBHost,

DBPort,

DBChar string

}

type post struct {

pid int

message string

}

var OldDB, NewDB *sql.DB

/**

设置数据库,并连接数据库

*/

func SetDB() (olddata, newdata *sql.DB) {

var localhost, remotehost Hostinfo

localhost = Hostinfo{

"root",

"123456",

"xiuno",

"",

"3306",

"utf8",

}

remotehost = Hostinfo{

"root",

"123456",

"gxvtc",

"",

"3306",

"utf8",

}

olddata, _ = connMysql(&localhost)

newdata, _ = connMysql(&remotehost)

return olddata, newdata

}

/**

连接数据库

*/

func connMysql(host *Hostinfo) (*sql.DB, error) {

//db, err := sql.Open("mysql", "root:123456@/"+dbs+"?charset=utf8")

if host.DBHost != "" {

host.DBHost = "tcp(" + host.DBHost + ":" + host.DBPort + ")"

fmt.Println(host.DBHost)

}

db, err := sql.Open("mysql", host.DBUser+":"+host.DBPassword+"@"+host.DBHost+"/"+host.DBname+"?charset="+host.DBChar)

return db, err

}

func main() {

OldDB, NewDB = SetDB()

defer OldDB.Close()

defer NewDB.Close()

updatePost()

}

func updatePost() {

const total = 100

//selectPost := "SELECT pid,message FROM " + XnFromPost + " ORDER BY pid ASC LIMIT 10"

selectPost := "SELECT pid,message FROM " + DxFromPost + " ORDER BY pid ASC "

/*

Data, err := OldDB.Query(selectPost)

if err != nil {

fmt.Println(err.Error())

}*/

fmt.Println(selectPost)

updatePost := "UPDATE " + XnTopost + " SET message = ? WHERE pid = ? limit 1"

fmt.Println(updatePost)

stmt, err := OldDB.Prepare(updatePost)

//insertPost := "INSERT INTO " + XnTopost + " (message,pid) VALUES (?,?)"

//fmt.Println(insertPost)

//stmt, err := OldDB.Prepare(insertPost)

if err != nil {

fmt.Println(err.Error())

}

//mypost := make(map[int]post)

i := 0

for {

tmpNum := i * total

i++

tmpSQL := selectPost + " LIMIT " + strconv.Itoa(tmpNum) + "," + strconv.Itoa(total)

fmt.Println(tmpSQL)

Data, err := NewDB.Query(tmpSQL)

//Data, err := NewDB.Query(tmpSQL)

if err != nil {

fmt.Println(err.Error())

}

tag := false

//使用并发的方式

for Data.Next() {

tag = true

var pid int

var msg string

Data.Scan(&pid, &msg)

fmt.Println(pid)

//bbcode转码html

compiler := bbcode.NewCompiler(true, true)

msg = compiler.Compile(msg)

//mypost[pid] = post{pid, msg}

_, err = stmt.Exec(msg, pid)

if err != nil {

fmt.Println("pid: ", pid, err.Error())

}

}

if tag == false {

fmt.Println("没有数据了...")

break

}

}

/*

//直接查找并更新

for Data.Next() {

var pid int

var msg string

Data.Scan(&pid, &msg)

//bbcode转码html

compiler := bbcode.NewCompiler(true, true)

msg = compiler.Compile(msg)

mypost[pid] = post{pid, msg}

//fmt.Println(mypost)

fmt.Println(pid)

_, err = stmt.Exec(msg, pid)

if err != nil {

fmt.Println("pid: ", pid, err.Error())

}

}

*/

/*

//使用并发的方式

for Data.Next() {

var pid int

var msg string

Data.Scan(&pid, &msg)

//bbcode转码html

compiler := bbcode.NewCompiler(true, true)

msg = compiler.Compile(msg)

mypost[pid] = post{pid, msg}

}

runtime.GOMAXPROCS(runtime.NumCPU())

c := make(chan post)

for _, v := range mypost {

go ShowMsg(c, v)

/*

go func() {

fmt.Println(v.pid)

c

}()

//time.Sleep(2 * time.Second)

//fmt.Println(v.pid)

}

for _, _ = range mypost {

fmt.Println(&c)

} */

}

func ShowMsg(c chan post, mypost post) {

//fmt.Println(mypost.pid)

c

}

go mysql id为0_go 语言中mysql操作200万数据时应该如何写?相关推荐

  1. 用 Go 操作 MySQL 的 200 万数据时应该怎么搞?

    前两天看到字节一个老哥写的帖子,提到高阶开发者必须掌握的技能,其中他明确提出了"精通MySQL". 为啥MySQL对开发人员如此重要? 第一,不管你去面试哪家公司,数据库是必问项, ...

  2. c语言数组中逗号的作用,在C语言中,每个语句和数据定义是用( )结束。? 逗号|括号|分号|句号...

    在C语言中,每个语句和数据定义是用( )结束.? 逗号|括号|分号|句号 更多相关问题 [多选题]有关商事登记的内容,下列表述哪些是不正确的: A. 商事登记不是取得商人资格的必备条件 B. 商事登记 ...

  3. hibernate mysql id 自增长 注解_hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询...

    不同数据库 自增长ID配置 正对不同的数据库可以同时使用 @Id @GeneratedValue(strategy = GenerationType.AUTO) 2 针对mysql @Id @Gene ...

  4. mysql的条件求和函数_使用SQL语句统计数据时sum和count函数中使用if判断条件的讲解...

    首先举个栗子(不想看的话直接下面看总结): order_type:订单类型 open_id:用户唯一标识 SELECT date(create_time) AS '当天日期', sum(real_pr ...

  5. c语言 1或0 结果,C语言中,在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”。()...

    语言中运算数He sent a telegram saying when he would arrive. 男性,表示28岁,硬脊膜外麻醉,手术过程中突然出现意识不清.血压下降.呼吸急促,并迅速出现昏 ...

  6. 为什么在C语言中,用scanf输入字符串时,不需加

    因为字符串变量名在 scanf 语句里 表示指针 (地址) 例如: char s[80]; scanf("%s",s); --这里的 s 已是地址. 当然,写成 scanf(&qu ...

  7. c语言中tc和vc有什么区别,转:写C++用什么编译器好——TC,VC++6.0,DEV C++,VS2005浅显比较...

    TC: 现在估计给你钱,你也不会要用TC了吧.一个复制粘帖都不觉得顺手的编译器,确实是不方便的. VC 6.0: 虽然这个软件比较小,一般就是几百兆,用起来也差强人意,不过难免还是存在一些小问题: 小 ...

  8. mysql中更新的命令是_MySQL 语言中,更新表数据的命令是( )。_学小易找答案

    [简答题]MySQL 语言中包含数都定义语言.数据操纵语言和数据控制语言,分别有哪些功能? [单选题]查询员工工资信息时,结果按工资降序排列,正确的是( ). [简答题]arrayList测验 [填空 ...

  9. php mysql怎么实现,使用php与mysql怎么实现一个无限级分类

    使用php与mysql怎么实现一个无限级分类 发布时间:2020-12-25 15:25:14 来源:亿速云 阅读:84 作者:Leah 本篇文章为大家展示了使用php与mysql怎么实现一个无限级分 ...

最新文章

  1. /etc/passwd 文件详解
  2. JDBC连接数据库经验集萃
  3. Lambda表达式的使用
  4. XCode 快捷键, MAC 快捷键
  5. php怎么写官网,PHP - Manual: 简介 (官方文档)
  6. 信息学奥赛一本通C++语言——1054:三角形判断
  7. Go语言基础环境配置(windows)
  8. 测试面试题集-2.测试用例设计
  9. TDirectory.GetParent获取指定目录的父目录
  10. jquery 1~6
  11. BGP(边界网关协议)
  12. python requests 安装
  13. 银行业会计人员技能训练系统(含文字录入、小键盘、点钞)
  14. 尚学堂Struts视频总结之一
  15. django ajax jquery csrf_exempt 设置favicon.ico
  16. 《方与圆》序人生控制论
  17. element导航菜单添加搜索功能
  18. 人工智能对学计算机的影响,计算机专业大学生对人工智能对人类的影响分析.docx...
  19. 外网远程访问群晖NAS,内网穿透
  20. jquery选择器连续选择_jQuery选择器简介

热门文章

  1. django跳转到其他页面的方式
  2. mysql查询操作的5种子句
  3. win10下zookeeper的下载以及安装
  4. python opencv findcontours_OpenCV之视频分析 – 背景消除与前景ROI提取
  5. python做马尔科夫模型预测法_Python实现HMM(隐马尔可夫模型)
  6. 二年级计算机认识键盘教案,认识计算机键盘教案.doc
  7. JAVA中修改顺序表中的元素_在Java中修改列表的每个项目
  8. 避免Unity变量初始化错误的8条建议
  9. OpenShift 4 - 了解Secret
  10. .net core精彩实例分享 -- 异步和并行