go init函式 面試錄 Go語言篇 記憶體模型

2021-10-11 08:48:25 字數 854 閱讀 6595

問:了解過go的記憶體模型嗎?大概講一講

答: go記憶體模型指定了一系列條件,在這些條件下,可以保證在乙個goroutine中讀取變數可以觀察到其他goroutine中對同一變數所寫的值。即安全的在不同的協程中讀寫變數。

問:為什麼需要有這些條件呢?

答:編譯器或處理器不保證指令執行順序和程式書寫順序一致,同時讀寫變數由於變數體積不同,也不一定是原子性的。

問:舉乙個理論上不保證能讀到寫的例子,並解釋。

答:

package
答:包初始化 init函式。建立goroutine銷毀goroutine

channel

對channel的關閉先行發生於接收到0值,因為channel已經被關閉了。

2. 無緩衝channel的接收先行發生於傳送完成。

3. 在容量為c的channel上的第k個接收先行發生於從這個channel上的第k+c次傳送完成。

對任意的sync.mutex或sync.rwmutex變數l和n < m,n次呼叫l.unlock()先行發生於m次l.lock()返回

2. 對於sync.rwmutex變數l,任意的函式呼叫l.rlock滿足第n次l.rlock後發生於第n次呼叫l.unlock,對應的l.runlock先行發生於第n+1次呼叫l.lock

once

對於 f() 的單個呼叫在所有的 once.do(f) 返回之前發生。

go init函式 Go語言設計模式 單例

單體設計模式是一種建立型的設計模式,也是最常用的設計模式之一。只允許結構體的乙個例項存在時才使用此模式。這個唯一例項稱為單例物件。單例物件適用的情況有 單例例項是在結構體首次初始化時建立的。通常,為只需要建立乙個例項的結構體定義getinstance方法。一旦建立之後,getinstance每次都返...

Go語言 函式

函式是結構化程式設計的最小模組單元,使用關鍵字 func 定義函式。go語言定義函式的一些特點總結如下 無需前置宣告 不支援命名巢狀定義 不支援同名函式過載 不支援預設引數 支援不定長變參 支援多返回值 支援命名返回值 支援匿名函式和閉包 函式屬於第一類物件,具備相同簽名 引數及返回值型別 的視為同...

Go語言函式

go語言函式function go函式不支援巢狀 過載和預設引數 但支援以下特性 無需宣告原型 不定長度引數 多返回值 命名返回值引數 匿名函式 閉包 定義函式使用關鍵字func,且左大括號不能另起一行 函式也可以作為一種型別使用 不定引數 不定引數的傳遞 任意型別的不定引數 如果你希望傳任意型別的...