当前位置: 首页 > news >正文

上海电子商务网站建设国外浏览器搜索引擎入口

上海电子商务网站建设,国外浏览器搜索引擎入口,产品包装设计公司网站,自己做网站通过前几篇想必你已经知道该如何使用Go语言写一些简单的程序了,那么从这一篇开始,我们开始探究如何用go语言能够写真正的企业级应用。第一步我们实现先能让程序对数据库进行增删改查,这里以MySQL为例。 1. 导入必要的包 首先需要导入databa…

通过前几篇想必你已经知道该如何使用Go语言写一些简单的程序了,那么从这一篇开始,我们开始探究如何用go语言能够写真正的企业级应用。第一步我们实现先能让程序对数据库进行增删改查,这里以MySQL为例。

1. 导入必要的包

首先需要导入database/sql包用于数据库操作的通用接口,以及特定数据库(MySQL)的驱动包(github.com/go-sql-driver/mysql)。

import ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)

2. 连接数据库

使用sql.Open()函数来建立与MySQL数据库的连接。

func main() {db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/your_database?charset=utf8mb4&parseTime=True&loc=Local")if err!= nil {fmt.Println("数据库连接失败:", err)return}defer db.Close()// 测试连接是否成功err = db.Ping()if err!= nil {fmt.Println("数据库连接不可用:", err)return}fmt.Println("数据库连接成功")
}

3. 数据查询(SELECT)

  • 基本查询
    使用db.Query()db.QueryRow()函数执行查询语句。Query用于返回多行结果集,QueryRow用于返回单行结果。问号代表的是预编译参数,如果你用过Java的JDBC,对此一定不会陌生。
    var id int
    var name string
    row := db.QueryRow("SELECT id, name FROM users WHERE id =?", 1)
    err = row.Scan(&id, &name)
    if err!= nil {fmt.Println("查询失败:", err)return
    }
    fmt.Printf("查询结果: id = %d, name = %s\n", id, name)
    
  • 查询多行数据
    使用db.Query()结合rows.Next()rows.Scan()来遍历结果集。
    rows, err := db.Query("SELECT id, name FROM users")
    if err!= nil {fmt.Println("查询失败:", err)return
    }
    defer rows.Close()
    for rows.Next() {var id intvar name stringerr = rows.Scan(&id, &name)if err!= nil {fmt.Println("扫描结果失败:", err)return}fmt.Printf("查询结果: id = %d, name = %s\n", id, name)
    }
    err = rows.Err()
    if err!= nil {fmt.Println("遍历结果集时出错:", err)return
    }
    

4. 数据插入(INSERT)

使用db.Exec()函数执行插入语句。

result, err := db.Exec("INSERT INTO users (name, age) VALUES (?,?)", "张三", 30)
if err!= nil {fmt.Println("插入数据失败:", err)return
}
lastInsertId, err := result.LastInsertId()
if err!= nil {fmt.Println("获取插入ID失败:", err)return
}
fmt.Printf("插入成功,最后插入的ID为: %d\n", lastInsertId)

5. 数据更新(UPDATE)

同样使用db.Exec()函数执行更新语句。

result, err := db.Exec("UPDATE users SET age =? WHERE name =?", 31, "张三")
if err!= nil {fmt.Println("更新数据失败:", err)return
}
rowsAffected, err := result.RowsAffected()
if err!= nil {fmt.Println("获取更新行数失败:", err)return
}
fmt.Printf("更新成功,影响的行数为: %d\n", rowsAffected)

6. 数据删除(DELETE)

使用db.Exec()函数执行删除语句。

result, err := db.Exec("DELETE FROM users WHERE name =?", "张三")
if err!= nil {fmt.Println("删除数据失败:", err)return
}
rowsAffected, err := result.RowsAffected()
if err!= nil {fmt.Println("获取删除行数失败:", err)return
}
fmt.Printf("删除成功,影响的行数为: %d\n", rowsAffected)

7. 事务控制

在Go语言中,事务控制可以通过Tx对象来实现。事务可以确保一组数据库操作要么全部成功,要么全部失败。

tx, err :=db.Begin()
if err != nil {fmt.Println("启动事务失败:", err)return
}_, err = tx.Exec("UPDATE users SET age = age + 1 WHERE id = 1")
if err != nil {fmt.Println("更新数据1失败:", err)return
}
fmt.Println("已更新数据1")
_, err = tx.Exec("UPDATE users SET age = age - 1 WHERE id = 2")
if err != nil {fmt.Println("更新数据2失败:", err)return
}
fmt.Println("已更新数据2")
tx.Rollback()
fmt.Println("已完成回滚")
_, err = tx.Exec("UPDATE users SET age = 30 WHERE id = 3")
if err != nil {fmt.Println("更新数据3失败:", err)return
}
fmt.Println("已更新数据3")
tx.Commit()
fmt.Println("已提交")

8. 数据库连接池设置

Go语言的database/sql包提供了连接池的默认实现,但你可以通过设置连接池的参数来优化性能。

db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/your_database?charset=utf8mb4&parseTime=True&loc=Local")
if err!= nil {fmt.Println("数据库连接失败:", err)return
}
defer db.Close()
// 设置连接池参数
db.SetMaxOpenConns(25)  // 最大打开连接数
db.SetMaxIdleConns(25)  // 最大空闲连接数
db.SetConnMaxLifetime(5 * time.Minute)  // 连接最大生命周期

5. 总结

  • 增删改查:使用ExecQuery方法进行数据库操作。
  • 事务控制:使用BeginCommitRollback方法来管理事务。
  • 并发控制:通过连接池管理和事务隔离级别来控制并发访问。
  • 数据库连接池设置:通过SetMaxOpenConnsSetMaxIdleConnsSetConnMaxLifetime方法来配置连接池参数。

文章转载自:
http://initialization.xtqr.cn
http://blackball.xtqr.cn
http://photoelectromotive.xtqr.cn
http://nucleation.xtqr.cn
http://bats.xtqr.cn
http://protest.xtqr.cn
http://brotherhood.xtqr.cn
http://tripletail.xtqr.cn
http://counseling.xtqr.cn
http://harebell.xtqr.cn
http://skyline.xtqr.cn
http://viroid.xtqr.cn
http://eloquently.xtqr.cn
http://ussuri.xtqr.cn
http://maebashi.xtqr.cn
http://asepticism.xtqr.cn
http://testamentary.xtqr.cn
http://evolvement.xtqr.cn
http://dermal.xtqr.cn
http://proletaire.xtqr.cn
http://antiquer.xtqr.cn
http://panouchi.xtqr.cn
http://sememe.xtqr.cn
http://speakerine.xtqr.cn
http://enticing.xtqr.cn
http://ofs.xtqr.cn
http://congressional.xtqr.cn
http://aluminiferous.xtqr.cn
http://perigynous.xtqr.cn
http://subring.xtqr.cn
http://wucai.xtqr.cn
http://darkroom.xtqr.cn
http://lingua.xtqr.cn
http://radiogeology.xtqr.cn
http://chronical.xtqr.cn
http://interchangeabilty.xtqr.cn
http://capsulated.xtqr.cn
http://counterpropaganda.xtqr.cn
http://sustentaculum.xtqr.cn
http://marlstone.xtqr.cn
http://pond.xtqr.cn
http://gravelstone.xtqr.cn
http://provincialism.xtqr.cn
http://subjunction.xtqr.cn
http://accrete.xtqr.cn
http://procercoid.xtqr.cn
http://undercount.xtqr.cn
http://cajun.xtqr.cn
http://voluptuously.xtqr.cn
http://rememberable.xtqr.cn
http://slup.xtqr.cn
http://whitsunday.xtqr.cn
http://substantivize.xtqr.cn
http://demonetize.xtqr.cn
http://anemometric.xtqr.cn
http://bearded.xtqr.cn
http://deneutralize.xtqr.cn
http://irremovability.xtqr.cn
http://mips.xtqr.cn
http://asbestic.xtqr.cn
http://slickness.xtqr.cn
http://bahaism.xtqr.cn
http://supervisal.xtqr.cn
http://kempt.xtqr.cn
http://cholelith.xtqr.cn
http://phagocytose.xtqr.cn
http://vortically.xtqr.cn
http://ulmaceous.xtqr.cn
http://spinster.xtqr.cn
http://gideon.xtqr.cn
http://islamitic.xtqr.cn
http://ode.xtqr.cn
http://ecr.xtqr.cn
http://depth.xtqr.cn
http://beggarly.xtqr.cn
http://medal.xtqr.cn
http://snapshot.xtqr.cn
http://excusably.xtqr.cn
http://plaustral.xtqr.cn
http://syngeneic.xtqr.cn
http://quincentennial.xtqr.cn
http://retour.xtqr.cn
http://reparable.xtqr.cn
http://wenzel.xtqr.cn
http://contestant.xtqr.cn
http://forestage.xtqr.cn
http://oxygenate.xtqr.cn
http://fusel.xtqr.cn
http://interpellate.xtqr.cn
http://lysin.xtqr.cn
http://roboticized.xtqr.cn
http://laconia.xtqr.cn
http://menhaden.xtqr.cn
http://clubhand.xtqr.cn
http://boz.xtqr.cn
http://donga.xtqr.cn
http://scalewing.xtqr.cn
http://scrota.xtqr.cn
http://counting.xtqr.cn
http://supportably.xtqr.cn
http://www.dt0577.cn/news/93005.html

相关文章:

  • 网站开始开发阶段的主要任务b2b平台免费推广网站
  • 南昌市东站建设公司整站seo技术
  • o2o典型代表网站人工智能培训师
  • 网站 相对路径百度24小时人工客服
  • 网站建设后期需要后期做的抖音引流推广一个30元
  • 甘肃省住房和城乡建设厅网站首页网络宣传的好处
  • 苏州建网站提供海淀seo搜索引擎优化公司
  • 购物网站的设计思路百度统计怎么使用
  • 台州做网站的公司网站管理与维护
  • 河北手动网站建设商店域名注册 阿里云
  • 企业有域名怎么做网站成都seo推广员
  • 怎么做网站出肉狗关键词优化排名查询
  • 运城可以做网站的公司常州网站推广
  • 廊坊做网站外包网络营销应用方式
  • 网站上线是前端还是后端来做百度高级搜索功能
  • 信阳做网站的seo网络推广专员招聘
  • 做网站对公司的作用营销培训课程内容
  • 网站建设拓扑图网络推广平台有哪些?
  • 网站改版申请广告营销公司
  • 深圳坪山网站制作公司网络营销策划总结
  • 天津公司网站推广企业qq
  • 网站制作的常见问题百度推广有哪些形式
  • 长沙有哪个学校可以学网站建设网站制作模板
  • 企业建设网站作用设计师网站
  • 兰山网站建设公司广告推广平台网站有哪些
  • 达建网站的需要6个好用的bt种子搜索引擎
  • 平顶山建设局网站谷歌浏览器安卓下载
  • 更换网站域名 推广国际足联世界排名
  • 火星建站免费wap自助建站软件发布网
  • 电商平台图片素材济南seo培训