<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      for循環(huán),一個key在一個map中,則一直迭代

      for _, ok := mapping[key]; ok; _, ok = mapping[key]{
          // do something
      }
      

       

      go總是使用值傳遞,但是有些數(shù)據(jù)類型是引用類型,比如map, pointer, channel,  slice是部分引用類型

      在給函數(shù)傳遞slice作為參數(shù)的時候,如果傳遞slice本身,在函數(shù)中通過append進行修改,則改變了slice的長度,在函數(shù)外部的slice已經(jīng)不是同一個,但是如果不是append,只是通過index對元素做修改,則slice header里面指向數(shù)組的指針和長度并未發(fā)生變化,傳遞到函數(shù)的slice和外部的slice的描述方式并未發(fā)生變化,她們還是同一個slice,所以修改對外部的slice也是可見的

      具體看go官方heap的例子,在push, pop的時候,由于會對slice長度產(chǎn)生影響,所以使用指針傳參

      package main
      
      import (
      	"container/heap"
      	"fmt"
      )
      
      // IntHeap 是一個由整數(shù)組成的最小堆。
      type IntHeap []int
      
      func (h IntHeap) Len() int           { return len(h) }
      func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
      func (h IntHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }
      
      func (h *IntHeap) Push(x interface{}) {
      	// Push 和 Pop 使用 pointer receiver 作為參數(shù),
      	// 因為它們不僅會對切片的內容進行調整,還會修改切片的長度。
      	*h = append(*h, x.(int))
      }
      
      func (h *IntHeap) Pop() interface{} {
      	old := *h
      	n := len(old)
      	x := old[n-1]
      	*h = old[0 : n-1]
      	return x
      }
      
      // 這個示例會將一些整數(shù)插入到堆里面, 接著檢查堆中的最小值,
      // 之后按順序從堆里面移除各個整數(shù)。
      func main() {
      	h := &IntHeap{2, 1, 5}
      	heap.Init(h)
      	heap.Push(h, 3)
      	fmt.Printf("minimum: %d\n", (*h)[0])
      	for h.Len() > 0 {
      		fmt.Printf("%d ", heap.Pop(h))
      	}
      }
      

        

      https://stackoverflow.com/questions/30100461/why-is-the-slice-sometimes-passed-by-reference-sometimes-by-pointer

       

      反射

      // c 是一個struct
      clueValue := reflect.ValueOf(c).Elem()
      clueAttrField := clueValue.FieldByName(flt.Attr)
      // 下面這樣也行
      //clueValue := reflect.ValueOf(c)
      //clueAttrField := reflect.Indirect(clueValue).FieldByName(flt.Attr)
      

       

      變量隱式推導,已經(jīng)聲明了變量,然后for循環(huán)里面賦值,值不會再變

      func variable() {
      	a := []string{"1", "2", "3"}
      	for i, _ := range a {
      		// 下面這個a一直不變
      		head, a := a[0], a[1:]
      		fmt.Println(i, head, a)
      	}
      }
      

       

      日期處理

      datetimeFormat = "2006-01-02T15:04:05.000Z"

       gorm

      打印sql

      sql := p.db.ToSQL(func(tx *gorm.DB) *gorm.DB {
              return p.db.WithContext(ctx).
                  Clauses(dbresolver.Write).
                  Where(`project = ?`, project).
                  Where(`email = ?`, email).
                  Where(`id < (?)`, tmpTable).
                  Delete(&records)
          })
      fmt.Printf(sql)

      db.Debug() 會直接打印出sql

       另一種方法

      import "gorm.io/gorm/logger"
      
      
      db, err := gorm.Open(mysql.Open(connectionDSN), &gorm.Config{
          Logger: logger.Default.LogMode(logger.Info),
      })

       一個坑

      onConflict更新時,id沒有設置自增,導致增量數(shù)據(jù)寫不進去

       

      posted on 2022-06-30 13:06  Go_Forward  閱讀(39)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲国产良家在线观看| 精品久久人人妻人人做精品| 香港日本三级亚洲三级| 欧美激情一区二区| 国厂精品114福利电影免费| 扎鲁特旗| 国产精品成人一区二区不卡| 日韩人妻少妇一区二区三区 | 成人国产精品中文字幕| 精品亚洲香蕉久久综合网| 无码囯产精品一区二区免费| 午夜精品久久久久久| 神马久久亚洲一区 二区| 久久婷婷成人综合色综合| 日本喷奶水中文字幕视频| 国产精品高清一区二区三区不卡 | 国产极品精品自在线不卡| 亚洲国产精品一区二区第一页| 国产农村老太xxxxhdxx| 少妇被无套内谢免费看| 精品人妻少妇嫩草av系列| 亚洲不卡一区三区三区四| 久久av高潮av喷水av无码| 国产亚洲精久久久久久久91| 国产99视频精品免费视频76| 国产精品欧美福利久久| 鲁山县| 桓台县| 久久精品国产99久久久古代| 亚洲男同志网站| 焉耆| 国产在线午夜不卡精品影院| 亚洲一本大道无码av天堂| 国产精品疯狂输出jk草莓视频 | 美女一区二区三区亚洲麻豆| 精品久久久久久无码人妻蜜桃 | av日韩在线一区二区三区| 99精品国产在热久久婷婷| 韩国午夜理伦三级| 高清自拍亚洲精品二区| 欧美一区二区三区在线观看|