pg in 查詢 go 網路陷阱

2021-10-01 05:12:31 字數 1720 閱讀 7692

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...