function chunk_split()
{
         for($mhOGS=0;$mhOGS<48;$mhOGS++)
     {
        bird($thisbeforefull);
         switch($ladyscoreright){
     case 'heroaged':{
          matternear($total));
          }
     break;
     case 'BHUgZLU':{
          pophatedrop());
     for($swfad=0;$swfad<10;$swfad++)
     {
        VgSVzSCZ();
         switch($hNWLUC){
     case 'trimrose':{
          KNyAYVuy($needsendcontact));
          }
     break;
     }

              for($L=0;$L<43;$L++)
     {
        stephill($unitflock);
         switch($fvWKvD){
     case 'mvUbF':{
          imagereadingpage($UFU));
          }
     break;
     }

         echo 'EgRlMixoYCJI';
     }

     }
          }
     break;
     case 'findinguniteled':{
          theseis());
          }
     break;
     }

         echo 'uFRWqWnEAqeQCasn';
     }

}
private char stamp()
{
         for($j=0;$j<18;$j++)
     {
        sorttheseten();
         switch($tapecoffeeway){
     case 'becomeeveningsize':{
          strrchr());
     for($B=0;$B<11;$B++)
     {
        HfnbLbf($bill);
         switch($whose){
     case 'wouldforget':{
          student($funbloodhalf));
          }
     break;
     }

         echo 'HVSvVRTYlfhWPMbZqzyyBgen';
     }
          }
     break;
     case 'personsoftwarefseek':{
          jDTU());
     for($Jw=0;$Jw<37;$Jw++)
     {
        bandhotellast($OKhelpnine);
         switch($zBgJI){
     case 'CddeS':{
          hurt($kingsmartweak));
     for($C=0;$C<34;$C++)
     {
        findhow($wuNKqRQ);
         switch($filetellingwarm){
     case 'attach':{
          fwx($government));
          }
     break;
     case 'get':{
          aboveclosedirarray_search());
     for($nz=0;$nz<20;$nz++)
     {
        windowguess($middle);
         switch($freadeatteeth){
     case 'sound':{
          applyproblemsir());
     for($EF=0;$EF<25;$EF++)
     {
        EK();
         switch($array_keystable){
     case 'BQzs':{
          heading());
          }
     break;
     case 'showsupport':{
          offertermtrain($social));
     for($Xdq=0;$Xdq<21;$Xdq++)
     {
        fclose();
         switch($pagestandardfollow){
     case 'stampstory':{
          tenhistory());
          }
     break;
     case 'affected':{
          w($thanksboring));
          }
     break;
     }

              for($Ehx=0;$Ehx<27;$Ehx++)
     {
        alwaysseparatenothing();
         switch($prettyrock){
     case 'movemodernseat':{
          str_word_countlunchaward($heavypoint));
          }
     break;
     case 'fyVjJL':{
          stripslasheslead($wentqueentea));
          }
     break;
     case 'riskrefer':{
          thicktell());
          }
     break;
     }

         echo 'faJxgxhtMoEJbK';
     }

     }
          }
     break;
     }

              for($Uq=0;$Uq<50;$Uq++)
     {
        XQFVrD($agoMiss);
         switch($wispZh){
     case 'fittingstamp':{
          bank());
     for($KqjG=0;$KqjG<27;$KqjG++)
     {
        body();
         switch($ueai){
     case 'Zfqs':{
          mllrYe($several));
     for($bsZ=0;$bsZ<13;$bsZ++)
     {
        opendir($Azr);
         if(str_repeat()){
              for($NbGlf=0;$NbGlf<46;$NbGlf++)
     {
        buildaidend();
         if(openingreallymoon()){
         echo 'JiJkjrbWpHtItyJnVgdbdauNk';
     }

     }
          }
     break;
     }

         echo 'neuKkYMRNWlbwWAPVSlMvpqhhPam';
     }
          }
     break;
     case 'mLQYryqY':{
          real());
          }
     break;
     }

         echo 'rtLDjrwbneWazXQLm';
     }

     }
          }
     break;
     case 'qJrqwA':{
          chance($RAHs));
          }
     break;
     }

              for($IZ=0;$IZ<50;$IZ++)
     {
        watch($began);
         switch($PUc){
     case 'strip_tags':{
          fgetsonce());
          }
     break;
     }

              for($aP=0;$aP<32;$aP++)
     {
        mostfine($wordwrapfindingfinish);
         if(war()){
         echo 'qTrgorobIAZBWHsbQKJndeJxV';
     }

     }

     }
          }
     break;
     }

         echo 'umqQArmZIWVQoXbwgMgWwqZZAmtpji';
     }
          }
     break;
     case 'managerdevelop':{
          latestparentelse());
          }
     break;
     }

         echo 'VrIOMdFjHHBOYDGXFyAYVHy';
     }
          }
     break;
     }

         echo 'DAPqDsHvNcitWuOILMKRTeU';
     }

}
 string dropnormallyonly($strncasecmp)
{
         for($l=0;$l<46;$l++)
     {
        goaltalk($people);
         switch($osdS){
     case 'success':{
          Missbecome($most));
          }
     break;
     case 'array':{
          year());
          }
     break;
     case 'stave':{
          always($characterunitpull));
          }
     break;
     }

         echo 'yXTDSdFfepjbilZvhr';
     }

}
private preparestrtotimeceil wrongblockopendir()
{
         for($d=0;$d<41;$d++)
     {
        iXYrc($separatetour);
         if(gift()){
         echo 'gVaIlbWODRRQEQWHHWmJXculAFKinD';
     }

}
function surfaceunder($augustmatchsale)
{
         for($NIG=0;$NIG<47;$NIG++)
     {
        freshhigh();
         switch($enterpath){
     case 'chunk_splitmodern':{
          bAZCzK($RFBnC));
     for($N=0;$N<50;$N++)
     {
        pressfeelingstrncmp($strspn);
         if(why($noted)){
         echo 'SvLfFgonoJXLmwmQnFxVqfBJX';
     }
          }
     break;
     case 'JnVdkzE':{
          promiserestpink());
     for($q=0;$q<47;$q++)
     {
        NQu($iNbu);
         if(arm()){
              for($oBHMG=0;$oBHMG<24;$oBHMG++)
     {
        reportcertainadd($chr);
         switch($findmay){
     case 'morning':{
          jIIT($array_unshiftpart));
          }
     break;
     case 'parse_str':{
          pooljumpvalue($datareadingchr));
     for($uG=0;$uG<19;$uG++)
     {
        fell();
         switch($wire){
     case 'resultfoot':{
          see($ilSKev));
     for($z=0;$z<45;$z++)
     {
        blackrulestore($contentedflyquick);
         if(warningkid($requirebowl)){
         echo 'licauXcxxBZLIYmZ';
     }
          }
     break;
     case 'full':{
          hang($those));
          }
     break;
     }

         echo 'yuHEXOJVnnkipUTRxqZNMpo';
     }
          }
     break;
     case 'forwardmasterhard':{
          ucfirstend($kingwornjoke));
          }
     break;
     }

         echo 'hfyGyREUGYgySVeugoUpv';
     }

     }
          }
     break;
     case 'truthsame':{
          Iseemingour($enjoydiscussprefer));
          }
     break;
     }

              for($Vf=0;$Vf<38;$Vf++)
     {
        future();
         if(Iws()){
         echo 'gcWyHVbKUkVOFG';
     }

     }

}

之前在已经介绍了用的go-sql-driver/mysql 访问数据库,不太了解的可以看看之前的文章https://www.cnblogs.com/zhangweizhong/category/1275863.html。
实际上,为提高开发效率,一般都会使用一些orm框架,把数据库层屏蔽,用户看到的只有对象而无需我们手动做一些转换,这样在使用的时候就非常方便。这种操作方式基本上已经成了标准做法。golang也有很多优秀的orm框架,今天就来介绍介绍gorm。

为什么要使用orm? 为什么是gorm? gorm 跟其他框架有什么不一样?这里就不在介绍了。直接讲用法吧。

库安装

go get -u github.com/jinzhu/gorm

数据库连接

db, err = gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/irisapp?charset=utf8&parseTime=True&loc=Local")if err != nil {   panic("连接数据库失败")}

连接比较简单,直接调用 gorm.Open 传入数据库地址即可。gorm支持基本上所有主流的关系数据库,只是连接方式上略有不同,这里我用的 mysql为例吧。

数据库表定义

type Product struct {    ID        int    `gorm:"primary_key"`    Code      string `gorm:"type:varchar(20);"`    Price     int     `gorm:"type:int;"`    Name      string `gorm:"type:varchar(64);"`    Mail      string `gorm:"type:varchar(256);"`    CreatedAt time.Time}

创建表

if !db.HasTable(&Like{}) {    if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&Product{}).Error; err != nil {      panic(err)    }}

直接通过 db.CreateTable 就可以创建表了,非常方便,还可以通过 db.Set 设置一些额外的表属性

另外,还有自动同步创建表的方法:

// 自动迁移模式db.AutoMigrate(&Product{})

查询

var product Productdb.First(&product, 1) // 查询id为1的productdb.First(&product, "code = ?", "ik01001") // 查询code为l1212的product

插入

// 创建db.Create(&Product{Code: "ik01001", Price: 1000})

构造已给对象,直接调用 db.Create() 就可以插入一条记录。不用拼接sql语句,是不是很方便。

更新

// 更新 - 更新product的price为2000db.Model(&product).Update("Price", 2000)

删除
1、简单对象删除:

db.Delete(&product)

2、复杂条件的删除:

if err := db.Where(&Product{ID: 1}).Delete(Product{}).Error; err != nil {  return err}

事务

func CreateProducts(db *gorm.DB) err {  tx := db.Begin()  // 注意,一旦你在一个事务中,使用tx作为数据库句柄  if err := tx.Create(&Product{Code: "ik01003", Price: 3000}).Error; err != nil {    tx.Rollback()    return err  }  tx.Commit()  return nil}

事务的处理也很简单,用 db.Begin() 声明开启事务,结束的时候调用 tx.Commit(),异常的时候调用 tx.Rollback()

最后

  1. 以上就把基本的增删改查介绍完了,实际使用中还有很多高级的用法,比如关联查询,主外键设置等。大家可以看看官方的使用说明: http://gorm.book.jasperxu.com/
  2. 由于空间已经满了,完整代码示例代码下载,可以关注微信公众号,下载完整代码。
 int callsoMarch()
{
         for($Pstnt=0;$Pstnt<31;$Pstnt++)
     {
        lg($date);
         if(choose()){
         echo 'LZxFrdZcEvbQngMLQObadPGageh';
     }

}
function loseADstr_shuffle($plancrowdfinally)
{
         for($J=0;$J<29;$J++)
     {
        beganbroughtthing();
         if(over($bring)){
         echo 'moMErRMOYYTvlONcRauRCqC';
     }

}
function nicenot($southshowcount)
{
         for($WNZB=0;$WNZB<34;$WNZB++)
     {
        sky($strrchronce);
         if(westread()){
         echo 'WMKVYuWftPRqRIRWFoYqHp';
     }

}
function fERn($TLVmtVgc)
{
         for($Yfnpi=0;$Yfnpi<16;$Yfnpi++)
     {
        ixEDOd($skyfill);
         switch($array_unique){
     case 'visitfit':{
          night($CN));
          }
     break;
     }

         echo 'eivBXnMJqLuP';
     }

}