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

静态网站如何建设注册公司条件和要求

静态网站如何建设,注册公司条件和要求,电信电信网站备案系统,wordpress源码类主题golang的sqlite驱动不使用cgo实现 更换gorm默认的SQLite驱动 最近在开发一个边缘物联网程序时使用Golang开发,用到GORM来操作SQLite数据库,GORM默认使用gorm.io/driver/sqlite这个库作为SQLite驱动,该库用CGO实现,在使用过程中遇…

golang的sqlite驱动不使用cgo实现 更换gorm默认的SQLite驱动

最近在开发一个边缘物联网程序时使用Golang开发,用到GORM来操作SQLite数据库,GORM默认使用gorm.io/driver/sqlite这个库作为SQLite驱动,该库用CGO实现,在使用过程中遇到一些问题,编译好二进制程序放到资源受限的设备中运行,报错如下;最后更换第三方SQLite驱动解决。

github.com/mattn/go-sqlite3 这个库现在在 go 项目当中,引用最多,应用最广;俨然成为这一方面的标准,但有一个最大的问题就是,这是一个 C 语言实现的库,如果要应用这个库,那么你的环境就需要解决这个 CGO 依赖。

报错如下,正是因为GORM官方SQLite驱动使用CGO实现,因此我在使用过程中遇到以下错误:

[error] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub panic: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub

大致意思是GORM SQLite驱动使用了CGO实现,需要在CGO环境下才能工作。

那么解决方法也很简单,只需要修改CGO_ENABLED这个环境变量启用CGO支持即可:

go env -w CGO_ENABLED=1

启用CGO后,编译的是动态链库的二进制文件,那么你一旦更换平台,比如将程序放到Windows下运行,可能因为缺少相关的一些动态链库(比如:SQLite)从而无法运行,为了保持编译的二进制文件能够无动态依赖的情况下正常运行,因此不得不考虑静态编译,所以就和GORM SQLite驱动产生了冲突。

很多瘦小设备,弱设备里的系统,没有相关依赖库和驱动,也很难安装相关的驱动,此时不得不考虑使用不依赖任何三方的驱动情况下运行程序。

解决方案-更换GORM默认的SQLite驱动

在GORM官方的Issues发现也有人反馈此类问题,于是顺藤摸瓜,找到了github.com/glebarez/sqlite这个库,该库使用纯go实现,不依赖CGO,地址是:https://github.com/glebarez/sqlite

使用如下驱动

import ("fmt"_ "github.com/glebarez/sqlite""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/sqlite"
)const (dbDriverName = "sqlite"dbName       = "iot.db"
)var SqliteDb *gorm.DBfunc SqliteInit() {var err errorSqliteDb, err = gorm.Open(dbDriverName, "./"+dbName)if err != nil {fmt.Printf("connect DB failed, err:%v\n", err)return}fmt.Println("connect DB success")// 打印 SQL 语句SqliteDb.LogMode(true)// 空闲状态下的最大连接数,默认的最大空闲连接数为2SqliteDb.DB().SetMaxIdleConns(10)// 最大打开连接数, 默认值为0(无限制)SqliteDb.DB().SetMaxOpenConns(50)// 不要复数表名SqliteDb.SingularTable(true)// 自动迁移模型(创建表)//SqliteDb.AutoMigrate()
}func SqliteClose() {//关闭SqliteDb.Close()
}

这样就可以在不依赖CGO的情况下编译出静态二进制文件,从而解决跨平台依赖动态链库的问题。

代价

glebarez/sqlite性能不及官方驱动,但牺牲少部分性能来换取方便个人觉得还是值得的,如果没有跨平台需求,使用官方默认驱动即可

静态编译打包后的文件体积明显增加

参考链接:
https://blog.xiaoz.org/archives/18195
https://wiki.eryajf.net/pages/74da0a/#%E5%89%8D%E8%A8%80
https://yoby123.cn/2021/06/15/20210615-sqlite.html

http://www.yayakq.cn/news/900498/

相关文章:

  • 阿里云服务器添加网站二级域名需要备案吗
  • 单页面网站国内有哪些给公司网站设计
  • 手机网站 域名个人网页设计制作题目目的
  • 山东网站制作设计樟木头仿做网站
  • 兰州网站建设网站建设龙华网站建设-信科网络
  • 网站域名怎么免费获取中企动力科技股份有限公司做网站
  • seo泛站群flash 的网站
  • 怎么判断网站是不是模板做的创建一家公司的步骤
  • 网站分析案例wordpress图片质量插件
  • jsp网站开发总结深圳seo网络推广公司
  • 编辑网站绑定 主机名西安网站建设发布
  • 洛阳制作网站公司哪家好wordpress 安全狗
  • 抖音seo优化软件南宁seo如何做
  • 怎样到国外做合法网站法网站国内企业邮箱排名
  • 网站编辑工具软件网站设计制作一般多少钱
  • 怎么阻止网站wordpress5.0.2安装
  • 专业做外贸英文公司网站珍爱网
  • 佛山网站设计哪家便宜wordpress微信免签能用吗
  • 专业广州网站建设人力资源加盟代理哪个好
  • 海山免费网站建设为 wordpress 的评论链接加上 nofollow
  • 德州手机网站建设费用乡村建设相关网站
  • 做农产品的网站白银网站网站建设
  • 建设电影网站代码龙岩kk网首页
  • 网站系统建设招标文件下载中国最新军事新闻
  • 中山网站建设设计电脑打不开建设银行网站
  • php做网站的源码公司信用信息查询系统
  • 凡科网免费做网站三亚可以做什么兼职
  • 厦门建公司网站平面设计画册设计
  • 上海网站建设网页制建网电气有限公司
  • 免费做团购网站的软件好水母智能设计平台