2019.12
.2天氣
陰
今天才發現原來資料庫的in查詢可以多列一起使用in查詢,只怪自己之前孤陋寡聞,學藝不精了。
select
*from mmall_order t where
(t.id,t.order_no)in(
(102
,1491753014256
))
接下來用go pg演示下寫法
type pair struct
func
exercisecountmap
(pairs ...pair)
(map
[int64
]int
,error
) itf :=
make([
]inte***ce,0
)for
_, item :=
range pairs )}
type row struct
var ss [
]*row
err := m.db.
model
(&previewexercise.schema).
column
( m.
tag(
&m.lessonid).v
(),)
.columnexpr
(statements.
count
("*"
,"count"))
.where
( statements.
multiin
( m.
tag(
&m.lessonid).v
(), m.
tag(
&m.source).v
(),)
, pg.
inmulti
(itf...),
).where
(m.tag
(&m.isdelete).eq
(),false).
group
(m.tag
(&m.lessonid).v
(), m.
tag(
&m.source).v
()).
select
(&ss)
if err !=
nilfor
_, item :=
range ss
return ret,
nil}
離睡覺時間還早,又看了go http的使用陷阱。
不要在生產環境使用go原生的http.get之類的方法。
原因如下:
1, http.get 使用預設的http.client 預設的配置沒有超時設定,這就導致如果請求的服務時間過長,當前的協程就會被處於被掛起狀態,這是有風險的。
2, 多個協程如果使用同乙個client,那麼對乙個協程的client配置就會影響到其他協程,解決辦法就是自定義自己的client傳送請求,不要使用預設的。
最後彩蛋,判斷是否是網路超時錯誤的方法。
if err, ok := err.
(net.error)
; ok && err.
timeout()
Go開發常見陷阱
go作為一種簡便靈巧的語言,深受開發者的喜愛。但對於初學者來說,要想輕鬆駕馭它,還得做好細節學習工作。初學者應該注意的地方 大括號不能獨立成行。未使用變數錯誤 對於全域性變數和函式引數變數,是可以定義後不使用的。但是對於函式內部變數來說,如果進行定義後不進行使用,編譯器會提示錯誤。匯入包未呼叫錯誤 ...
go語言 8 語言陷阱
x int return t 呼叫f2返回5,因為defer改變的是新建的t變數的值 funcf1 r int return0 返回1,因為defer修改的r是返回值,所以返回值被修改了防止陷阱的辦法時f1的返回值不要命名,即去掉r 陣列都是值傳遞。包括 陣列間的直接賦值,陣列作為函式引數 陣列內嵌...
Go無緩衝通道的陷阱
channel是go的特色之一,甚至說是最大的特色也不為過,使用起來也非常簡單。首先定義乙個int型別的channel ch1 make chan int 無緩衝通道 ch2 make chan int,10 帶緩衝的通道我們這裡主要關注無緩衝通道。來看看這段 package main import...