golang 你所不知道的 log 和 fmt

2022-03-14 07:22:33 字數 799 閱讀 1491

直接點說,就是由於fmt 是執行緒不安全的, 如果你在多協程場景下使用fmt列印資訊可能會得到亂序的結果就是說 不按**裡的順序列印.

下面看示例

**示例

golang fmt 多執行緒 亂序:

func main()  

wg.add(10)

var arr int

for i:=0;i<10;i++ (i)

} wg.wait() // 隔離

s :=0

for _, v := range arr

log.println(s)

}

輸出結果是這樣的:

2019/09/16 20:54:22 i: 2

22019/09/16 20:54:22 i: 4

42019/09/16 20:54:22 i: 0

82019/09/16 20:54:22 i: 8

72019/09/16 20:54:22 i: 6

2019/09/16 20:54:22 40

雖然有wait 隔離了協程的執行,但 fmt 還是導致了亂序. 和普通的多執行緒問題還不太一樣.

這個我和同事研究了一下,有可能是因為log 有個輸出的buffer,wait之前的邏輯 只能確保資訊輸出到buffer,之後log 和fmt 競爭std.out. 所以交叉輸出.

最後最後,列印資訊的話 一般也不用fmt,fmt一般用來格式化. 所以沒啥奇葩需求也就不要用fmt了.

你所不知道的 const

const 常量是不可修改的,也就是說only read,例如 const int nbuffsize 512 nbuffsize 0 error就是因為const 常量不能修改,所以定義時必須初始化預設在全域性作用域中定義的非const變數可以在整個程式中訪問,例如 int ncounter ex...

你所不知道的background

今天要說說css中background這個屬性裡面的大學問。在乙個宣告中設定所有的背景屬性 body 看到這串 你怕了嗎?知道他們都代表啥意思嘛?不要捉急,來看展開式。展開式 background color設定元素的背景顏色,不能設定到外邊距,可以繼承父級的背景顏色,預設為透明。backgroun...

overflow hidden 你所不知道的事

overflow hidden 你所不知道的事 overflow hidden這個css樣式是大家常用到的css樣式,但是大多數人對這個樣式的理解僅僅侷限於隱藏溢位,而對於清除浮動這個含義不是很了解。這是乙個常用的div寫法,下面我們來書寫樣式。大家可以在dmx中自己做試驗 wai nei 可以看到...