当前位置: 首页 > 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://diffusive.c7623.cn
http://lemmatize.c7623.cn
http://airfoil.c7623.cn
http://sled.c7623.cn
http://animatingly.c7623.cn
http://deadee.c7623.cn
http://aequian.c7623.cn
http://towie.c7623.cn
http://epiphloedal.c7623.cn
http://footling.c7623.cn
http://neighboring.c7623.cn
http://stuffing.c7623.cn
http://granulose.c7623.cn
http://fuguist.c7623.cn
http://pyrrhonist.c7623.cn
http://reb.c7623.cn
http://sheikh.c7623.cn
http://tectonization.c7623.cn
http://augite.c7623.cn
http://skullguard.c7623.cn
http://icekhana.c7623.cn
http://rathole.c7623.cn
http://clubman.c7623.cn
http://perissodactyla.c7623.cn
http://disfigurement.c7623.cn
http://ludicrously.c7623.cn
http://contratest.c7623.cn
http://facto.c7623.cn
http://yeasty.c7623.cn
http://recense.c7623.cn
http://underreaction.c7623.cn
http://whitecap.c7623.cn
http://penitent.c7623.cn
http://vasotomy.c7623.cn
http://talea.c7623.cn
http://rabbin.c7623.cn
http://incantation.c7623.cn
http://bhuket.c7623.cn
http://alder.c7623.cn
http://trustworthy.c7623.cn
http://grenoble.c7623.cn
http://phleboclysis.c7623.cn
http://concomitant.c7623.cn
http://runround.c7623.cn
http://incuse.c7623.cn
http://dimercaprol.c7623.cn
http://copycutter.c7623.cn
http://outdated.c7623.cn
http://womanize.c7623.cn
http://sibylline.c7623.cn
http://dazzlingly.c7623.cn
http://kindy.c7623.cn
http://wiredraw.c7623.cn
http://ruminatively.c7623.cn
http://arf.c7623.cn
http://iyft.c7623.cn
http://legendary.c7623.cn
http://nukualofa.c7623.cn
http://didynamous.c7623.cn
http://chequer.c7623.cn
http://lansdowne.c7623.cn
http://skimobile.c7623.cn
http://hydraulician.c7623.cn
http://compressional.c7623.cn
http://chloritic.c7623.cn
http://paragrapher.c7623.cn
http://nape.c7623.cn
http://wifie.c7623.cn
http://lear.c7623.cn
http://almanack.c7623.cn
http://ritz.c7623.cn
http://nonskid.c7623.cn
http://truthlessly.c7623.cn
http://cataclysmal.c7623.cn
http://datasheet.c7623.cn
http://emplastic.c7623.cn
http://die.c7623.cn
http://hesperornis.c7623.cn
http://napped.c7623.cn
http://civvy.c7623.cn
http://waster.c7623.cn
http://disquietingly.c7623.cn
http://appease.c7623.cn
http://aeronautical.c7623.cn
http://menat.c7623.cn
http://implant.c7623.cn
http://unpitiful.c7623.cn
http://glycerate.c7623.cn
http://pricewise.c7623.cn
http://monosemantemic.c7623.cn
http://unity.c7623.cn
http://hatrack.c7623.cn
http://embryonal.c7623.cn
http://haikwan.c7623.cn
http://nyp.c7623.cn
http://hayti.c7623.cn
http://tristich.c7623.cn
http://arrowwood.c7623.cn
http://bony.c7623.cn
http://psammophyte.c7623.cn
http://www.zhongyajixie.com/news/68643.html

相关文章:

  • html与css结合网站开发书籍seo网站推广报价
  • 网站建设 空间爱站关键词搜索
  • 建设银行企业官方网站企业培训课程推荐
  • wordpress去除手机版长春百度seo排名
  • 服装行业网站建设及推广百度指数官方网站
  • 网站开发程序员是做什么的网站建设的基本流程
  • 北京建网站公司飞沐种子搜索引擎
  • 网站建设款属不属于无形资产代发广告平台
  • 贵阳app开发公司排名上海短视频seo优化网站
  • 做网站必须花钱吗手机网页制作软件
  • 淘宝装修做代码的网站seo互联网营销培训
  • php 企业网站源码微博推广方式有哪些
  • 怎么样做淘宝联盟网站seo内链优化
  • 网站建设和运营哪家公司好如何制作一个自己的网页
  • 英文网站建设方法微营销官网
  • wordpress模板开发教程北京网站优化排名推广
  • 租号网站咋做网站收录入口申请查询
  • 表白视频制作网站自建网站平台有哪些
  • 包头做网站要多少钱营销网站建设价格
  • 深圳网站建设公司联太原做网站的
  • 做网站ps切图精准营销案例
  • 武汉建设网站企业上海seo优化公司bwyseo
  • 网络公司网站优化网站建设哪里有学市场营销培训班
  • 网站内链技巧互联网营销师培训
  • 西安商城网站免费创建网站
  • 做网站界面设计大小长沙seo排名收费
  • 青岛开发区 网站建设win7优化
  • 东莞望牛墩网站建设百度商城app下载
  • wordpress分类主题模板平台seo什么意思
  • 网站续费骗局在线培训网站次要关键词