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))
}
}
反射
// 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ù)寫不進去
浙公網(wǎng)安備 33010602011771號