做全国家电维修网站到哪里做找个小网站
- 作者: 五速梦信息网
- 时间: 2026年04月18日 10:01
当前位置: 首页 > news >正文
做全国家电维修网站到哪里做,找个小网站,wordpress 整站下载,深圳软件外包公司都有哪些概述
如果您没有Golang的基础#xff0c;应该学习如下前置课程。
Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728
基础不好的同学每节课的代码最好配合视频进行阅读和学习#xff0c;如果基础比较扎实#xff0c;则阅读本教程巩固一下相…概述
如果您没有Golang的基础应该学习如下前置课程。
Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728
基础不好的同学每节课的代码最好配合视频进行阅读和学习如果基础比较扎实则阅读本教程巩固一下相关知识点即可遇到不会的知识点再看视频。
视频课程
最近发现越来越多的公司在用Golang了所以精心整理了一套视频教程给大家这个是其中的第5部后续还会有很多。
视频已经录制完成完整目录截图如下
打个小广告目前处于特价阶段一节课只需要1块钱29节课只需要29元哦。如果有需要请前往我的淘宝店铺“Python私教”下单。
课程目录
01 使用Go语言连接MySQL02 ySQL官方库的拉取和使用03 打开和关闭连接04 创建用户表05 新增用户06 根据ID查询用户07 查询所有的用户08 根据ID修改用户09 根据ID删除用户10 使用预处理查询所有的用户11 使用预处理新增用户12 事务的介绍和使用13 回顾RESTAPI接口开发14 开发获取所有用户信息的接口15 使用HTTP客户端测试获取所有用户接口16 开发和测试根据ID获取用户的接口17 开发和测试新增用户的接口18 开发和测试根据ID修改用户的接口19 开发根据ID删除用户的接口20 新增数据的SQL代码分析21 实现MySQL通用新增数据的方法22 测试MySQL通用新增数据的方法23 封装并测试通用的修改数据的方法24 封装并测试通用的删除方法25 封装通用的查询所有数据的方法26 将查询的数据转换为字典27 优化查询所有用户的方法28 实现根据ID查询并进行测试29 总结
精品代码
完整代码实在是太多了放弃了给大家分享完整代码的想法这里摘录一些个人认为比较精品的代码。
封装将SQL查询结果转换为字典的方法
这个方法想了很久也查阅了大量的资料最终被实现了。
代码封装如下
package zdpgo_mcrudimport (database/sqlerrorsfmtstrings
)func GetBy(db *sql.DB,tableName string,columns []string,conditions map[string]interface{},
) (data []map[string]interface{}, err error) {if db nil {err errors.New(db is nil)return}if tableName {err errors.New(tableName is empty)return}var columnStr stringif columns nil || len(columns) 0 {columnStr *} else {columnStr strings.Join(columns, ,)}sqlStr : fmt.Sprintf(select %s from %s,columnStr,tableName,)// 构造查询条件whereValues : []interface{}{}whereKeys : []string{}if conditions ! nil len(conditions) 0 {// select * from user// select * from user where kvfor k, v : range conditions {whereKeys append(whereKeys, fmt.Sprintf(%s?, k))whereValues append(whereValues, v)}whereStr : strings.Join(whereKeys, ,)sqlStr where whereStr}// 准备执行查询var stmt *sql.Stmtstmt, err db.Prepare(sqlStr)if err ! nil {fmt.Println(err)return}defer stmt.Close()// 执行查询var rows *sql.Rowsrows, err stmt.Query(whereValues…)defer rows.Close()if rows nil {err errors.New(rows is nil)return}count : len(columns) // 列的个数values : make([]interface{}, count) // 一组数据的值valuePtrs : make([]interface{}, count) // 一组数据的值的对应地址for rows.Next() {for i : 0; i count; i {valuePtrs[i] values[i] // 将列的数据的值的地址取出来赋值给地址值}err rows.Scan(valuePtrs…) // 获取各列的值放在对应地址中if err ! nil {return}item : make(map[string]interface{}) // 构建列名和值的对应关系 {name:张三,age:22}for i, col : range columns {var v interface{} // 临时值val : values[i] // 对应的值b, ok : val.([]byte) // 判断能不能转换为字节数组实际上就是判断是不是字符串if ok {v string(b) // 转换为字符串} else {v val}item[col] v}data append(data, item)}return
}
使用方法如下
package mainimport (database/sqlfmtgithub.com/zhangdapeng520/zdpgomcrud github.com/zhangdapeng520/zdpgo_mysql
)var (db *sql.DBerr error
)func initMySQL() {dbUrl : root:roottcp(127.0.0.1:3306)/testdb, err sql.Open(mysql, dbUrl)if err ! nil {fmt.Println(err)return}
}func closeMySQL() {db.Close()
}func main() {initMySQL()defer closeMySQL()err db.Ping()if err ! nil {fmt.Println(err)return}conditions : map[string]interface{}{id: 1,}data, err : zdpgo_mcrud.GetBy(db,user,[]string{id, name, age},conditions,)if err ! nil {fmt.Println(err)return}fmt.Println(data)
}
有了这个方法以后我们就有了一个通用的查询方法不用再写重复的SQL语句了。
实现用户增删改查REST API接口
这个需要大家学习我之前的前置课就是那个REST API的基础课。
再结合这个课程的MYSQL基础知识就可以开发了。
服务端代码如下
package mainimport (database/sqlfmtgithub.com/zhangdapeng520/zdpgohttprouter github.com/zhangdapeng520/zdpgo_mysqlnet/httptime
)var (db *sql.DBerr error
)func initMySQL() {dbUrl : root:roottcp(127.0.0.1:3306)/testdb, err sql.Open(mysql, dbUrl)if err ! nil {fmt.Println(err)return}
}func closeMySQL() {db.Close()
}type User struct {Id int64 json:idName string json:nameAge int json:age
}func DbGetAllUser() []User {var users []UsersqlStr : select id,name,age from uservar stmt *sql.Stmtstmt, err db.Prepare(sqlStr)if err ! nil {fmt.Println(err)return users}defer stmt.Close()var rows *sql.Rowsrows, err stmt.Query()defer rows.Close()// 读取for rows.Next() {var (uid int64name stringage int)err rows.Scan(uid, name, age)if err ! nil {fmt.Println(err)return users}users append(users, User{uid, name, age})fmt.Println(uid, name, age)}return users
}
func DbGetUser(uid string) []User {var users []UsersqlStr : select id,name,age from user where id?var stmt *sql.Stmtstmt, err db.Prepare(sqlStr)if err ! nil {fmt.Println(err)return users}defer stmt.Close()var rows *sql.Rowsrows, err stmt.Query(uid)defer rows.Close()// 读取for rows.Next() {var (uid int64name stringage int)err rows.Scan(uid, name, age)if err ! nil {fmt.Println(err)return users}users append(users, User{uid, name, age})fmt.Println(uid, name, age)}return users
}func DbAddUser(name string, age int) int64 {sqlStr : insert into user(name,age) values (?,?)var stmt *sql.Stmtstmt, err db.Prepare(sqlStr)if err ! nil {fmt.Println(err)return -1}defer stmt.Close()var result sql.Resultresult, err stmt.Exec(name, age)if err ! nil {fmt.Println(err)return -1}var uid int64uid, err result.LastInsertId()if err ! nil {fmt.Println(err)return -1}fmt.Println(插入成功ID是, uid)return uid
}func DbUpdateUser(name string, age int, id string) int64 {sqlStr : update user set name?, age? where id?var result sql.Resultresult, err db.Exec(sqlStr, name, age, id)if err ! nil {fmt.Println(err)return 0}var rowNum int64rowNum, err result.RowsAffected()if err ! nil {fmt.Println(err)return 0}fmt.Printf(更新 %d 条数据成功\n, rowNum)return rowNum
}func DbDeleteUser(id string) int64 {sqlStr : delete from user where id?var result sql.Resultresult, err db.Exec(sqlStr, id)if err ! nil {fmt.Println(err)return 0}var rowNum int64rowNum, err result.RowsAffected()if err ! nil {fmt.Println(err)return 0}fmt.Printf(删除 %d 条数据成功\n, rowNum)return rowNum
}func RouterGetAllUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {users : DbGetAllUser()zdpgo_httprouter.ResponseSuccess(w, users)
}func RouterGetUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {uid : ps.ByName(id)users : DbGetUser(uid)var user Userif len(users) 0 {user users[0]}zdpgo_httprouter.ResponseSuccess(w, user)
}func RouterAddUser(w http.ResponseWriter, r *http.Request, _ zdpgo_httprouter.Params) {var user Userzdpgo_httprouter.GetJson(r, user)uid : DbAddUser(user.Name, user.Age)user.Id uidzdpgo_httprouter.ResponseSuccess(w, user)
}
func RouterUpdateUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {var user Userzdpgo_httprouter.GetJson(r, user)uid : ps.ByName(id)updateRows : DbUpdateUser(user.Name, user.Age, uid)zdpgo_httprouter.ResponseSuccess(w, updateRows)
}
func RouterDeleteUser(w http.ResponseWriter, r *http.Request, ps zdpgo_httprouter.Params) {uid : ps.ByName(id)updateRows : DbDeleteUser(uid)zdpgo_httprouter.ResponseSuccess(w, updateRows)
}func main() {initMySQL()defer closeMySQL()err db.Ping()if err ! nil {fmt.Println(err)return}router : zdpgo_httprouter.New()router.GET(/user, RouterGetAllUser)router.GET(/user/:id, RouterGetUser)router.POST(/user, RouterAddUser)router.PUT(/user/:id, RouterUpdateUser)router.DELETE(/user/:id, RouterDeleteUser)server : http.Server{Addr: 0.0.0.0:8888,Handler: router,ReadTimeout: 5 * time.Second,WriteTimeout: 5 * time.Second,}server.ListenAndServe()
}
客户端代码也有增删改查的这里以根据ID删除为例子。
package mainimport (fmtgithub.com/zhangdapeng520/zdpgo_httprouterio
)func main() {targetUrl : http://localhost:8888/user/3data : map[string]interface{}{}resp, err : zdpgo_httprouter.SendJson(DELETE, targetUrl, data)if err ! nil {fmt.Println(err)return}body : resp.BodybodyBytes, err : io.ReadAll(body)if err ! nil {fmt.Println(err)return}fmt.Println(string(bodyBytes))
}
总结
本套教程主要讲解Go语言操作MySQL的基础知识同时还讲解了如何结合之前学习的REST API的基础知识开发用户增删改查的API接口最后还通过对MySQL通用方法的封装让大家学习到MySQL的进阶使用技巧。
如果您需要完整的源码打赏20元即可。
人生苦短我用Python我是您身边的Python私教~
- 上一篇: 做区位分析的网站海外推广方式有哪些
- 下一篇: 做全屏网站设计时容易犯的错app设计风格有哪些
相关文章
-
做区位分析的网站海外推广方式有哪些
做区位分析的网站海外推广方式有哪些
- 技术栈
- 2026年04月18日
-
做区块链网站需要注意哪些ashu wordpress
做区块链网站需要注意哪些ashu wordpress
- 技术栈
- 2026年04月18日
-
做求职网站市场苏宁易购电子商务网站建设目标
做求职网站市场苏宁易购电子商务网站建设目标
- 技术栈
- 2026年04月18日
-
做全屏网站设计时容易犯的错app设计风格有哪些
做全屏网站设计时容易犯的错app设计风格有哪些
- 技术栈
- 2026年04月18日
-
做全屏网站设计时容易犯的错建设网站的拓扑图
做全屏网站设计时容易犯的错建设网站的拓扑图
- 技术栈
- 2026年04月18日
-
做全屏网站设计时容易犯的错找人做ps的网站
做全屏网站设计时容易犯的错找人做ps的网站
- 技术栈
- 2026年04月18日
