一、讀取文件數據,是阻塞還是非阻塞的?
? ? ? ? 分兩種情況:常規讀取文件數據,和網絡IO讀取數據
1. 常規讀取文件數據:
????io.Reader 和 bufio.Reader?是同步進行的。?
? ? bufio.Reader
?提供緩沖的讀取操作,意味著數據是被阻塞式地?一次一段地 讀取進來,然后存儲在緩沖區內。當你需要讀取更多數據時,它會從文件或其他 IO 源繼續填充緩沖區。
????如果想要異步讀取文件,可以使用 goroutines 和 channels。
2.?網絡IO讀取數據:
? ?Go語言中的網絡IO模型,主要采用IO多路復用的方式,通過 goroutine 和 阻塞機制, 同時監聽多個IO事件(文件描述符fd)。
? ??開發者使用阻塞式的方式來編寫程序,然后通過goroutine和channel來處理并發,每個channel對應一個io操作。所有的IO操作都是阻塞調用的。
????Go語言中,網絡IO的操作被封裝在netpoll中。。
二、GO使用組合而非繼承,體現了哪些優勢?
1. 代碼更優雅:對象的層次結構能夠保持簡潔,易于理解對象是負責哪個單一任務。
2. 降低了耦合:繼承表示的是類型擴展的邏輯;而組合表示的是對象之間的包含關系。組合模式需要承擔的職責更低,比如省去了構造和析構的繼承邏輯。
3. 使用更靈活:嵌入的對象,可以在運行的時候被改變,被替換成同類型對象。
三、傳參、引用類型、賦值
? ? Go語言傳參,不管是數值類型還是引用類型,都是 值傳遞。
? ? 傳遞 引用類型 的時候,傳遞的是指針。傳遞之后,會有新的指針變量,但是指向的數據是同一份數據, 修改數據的話會修改原值。
? ? 引用類型 賦值 的話是淺拷貝,數據修改邏輯同上。