<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 一、在go語言中,new和make的區別? new 的作用是初始化一個指向類型的指針(\*T) new函數是內建函數,函數定義:func new(Type) \*Type 使用new函數來分配空間。傳遞給`new`函數的是一個**類型**,不是一個值。返回值是 指向這個新分配的零值的**指針**。 make 的作用是為 slice,map 或 chan 初始化并返回引用(T)。 make函數是內建函數,函數定義:func make(Type, size IntegerType) Type · 第一個參數是一個類型,第二個參數是長度 · 返回值是一個類型 `make(T, args)`函數的目的與`new(T)`不同。它僅僅用于創建 Slice, Map 和 Channel,并且返回類型是 T(不是T\*)的一個初始化的(不是零值)的實例。 ## 二、在go語言中,Printf()、Sprintf()、Fprintf()函數的區別用法是什么? 都是把格式好的字符串輸出,只是輸出的目標不一樣: Printf(),是把格式字符串輸出到標準輸出(一般是屏幕,可以重定向)。 Printf() 是和標準輸出文件(stdout)關聯的,Fprintf 則沒有這個限制. Sprintf(),是把格式字符串輸出到指定字符串中,所以參數比printf多一個char\*。那就是目標字符串地址。 Fprintf(), 是把格式字符串輸出到指定文件設備中,所以參數筆printf多一個文件指針FILE\*。主要用于文件操作。Fprintf()是格式化輸出到一個stream,通常是到文件。 ## 三、說說go語言中,數組與切片的區別? (1). 數組 數組是具有固定長度且擁有零個或者多個相同數據類型元素的序列。 數組的長度是數組類型的一部分,所以\[3\]int 和 \[4\]int 是兩種不同的數組類型。 數組需要指定大小,不指定也會根據初始化的自動推算出大小,不可改變 ; 數組是值傳遞; 數組是內置(build-in)類型,是一組同類型數據的集合,它是值類型,通過從0開始的下標索引訪問元素值。在初始化后長度是固定的,無法修改其長度。當作為方法的參數傳入時將復制一份數組而不是引用同一指針。數組的長度也是其類型的一部分,通過內置函數len(array)獲取其長度。 數組定義: ~~~ var array [10]intvar array = [5]int{1,2,3,4,5} ~~~ (2). 切片 切片表示一個擁有相同類型元素的可變長度的序列。 切片是一種輕量級的數據結構,它有三個屬性:指針、長度和容量。 切片不需要指定大小; 切片是地址傳遞; 切片可以通過數組來初始化,也可以通過內置函數make()初始化 .初始化時len=cap,在追加元素時如果容量cap不足時將按len的2倍擴容; 切片定義: ~~~ var slice []type = make([]type, len) ~~~ ## 四、解釋以下命令的作用? go env: #用于查看go的環境變量 go run: #用于編譯并運行go源碼文件 go build: #用于編譯源碼文件、代碼包、依賴包 go get: #用于動態獲取遠程代碼包 go install: #用于編譯go文件,并將編譯結構安裝到bin、pkg目錄 go clean: #用于清理工作目錄,刪除編譯和安裝遺留的目標文件 go version: #用于查看go的版本信息 ## 五、說說go語言中的協程? 協程和線程都可以實現程序的并發執行; 通過channel來進行協程間的通信; 只需要在函數調用前添加go關鍵字即可實現go的協程,創建并發任務; 關鍵字go并非執行并發任務,而是創建一個并發任務單元; ## 六、說說go語言中的for循環? for循環支持continue和break來控制循環,但是它提供了一個更高級的break,可以選擇中斷哪一個循環 for循環不支持以逗號為間隔的多個賦值語句,必須使用平行賦值的方式來初始化多個變量 ## 七、說說go語言中的switch語句? 單個case中,可以出現多個結果選項 只有在case中明確添加fallthrough關鍵字,才會繼續執行緊跟的下一個case ## 八、 go語言中沒有隱藏的this指針,這句話是什么意思? 方法施加的對象顯式傳遞,沒有被隱藏起來 golang的面向對象表達更直觀,對于面向過程只是換了一種語法形式來表達 方法施加的對象不需要非得是指針,也不用非得叫this ## 九、go語言中的引用類型包含哪些? 數組切片、字典(map)、通道(channel)、接口(interface) ## 十、 go語言中指針運算有哪些? 可以通過“&”取指針的地址 可以通過“\*”取指針指向的數據 ## 十一、說說go語言的main函數 main函數不能帶參數 main函數不能定義返回值 main函數所在的包必須為main包 main函數中可以使用flag包來獲取和解析命令行參數 ## 十二、說說go語言的同步鎖? (1) 當一個goroutine獲得了Mutex后,其他goroutine就只能乖乖的等待,除非該goroutine釋放這個Mutex (2) RWMutex在讀鎖占用的情況下,會阻止寫,但不阻止讀 (3) RWMutex在寫鎖占用情況下,會阻止任何其他goroutine(無論讀和寫)進來,整個鎖相當于由該goroutine獨占 ## 十三、說說go語言的channel特性? A. 給一個 nil channel 發送數據,造成永遠阻塞 B. 從一個 nil channel 接收數據,造成永遠阻塞 C. 給一個已經關閉的 channel 發送數據,引起 panic D. 從一個已經關閉的 channel 接收數據,如果緩沖區中為空,則返回一個零值 E. 無緩沖的channel是同步的,而有緩沖的channel是非同步的 ## 十四、go語言觸發異常的場景有哪些? A. 空指針解析 B. 下標越界 C. 除數為0 D. 調用panic函數 ## 十五、說說go語言的beego框架? A. beego是一個golang實現的輕量級HTTP框架 B. beego可以通過注釋路由、正則路由等多種方式完成url路由注入 C. 可以使用bee new工具生成空工程,然后使用bee run命令自動熱編譯 ## 十六、說說go語言的goconvey框架? A. goconvey是一個支持golang的單元測試框架 B. goconvey能夠自動監控文件修改并啟動測試,并可以將測試結果實時輸出到web界面 C. goconvey提供了豐富的斷言簡化測試用例的編寫 ## 十七、go語言中,GoStub的作用是什么? A. GoStub可以對全局變量打樁 B. GoStub可以對函數打樁 C. GoStub不可以對類的成員方法打樁 D. GoStub可以打動態樁,比如對一個函數打樁后,多次調用該函數會有不同的行為 ## 十八、說說go語言的select機制? A. select機制用來處理異步IO問題 B. select機制最大的一條限制就是每個case語句里必須是一個IO操作 C. golang在語言級別支持select關鍵字 ## 十九、說說進程、線程、協程之間的區別? 進程是資源的分配和調度的一個獨立單元,而線程是CPU調度的基本單元; 同一個進程中可以包括多個線程; 進程結束后它擁有的所有線程都將銷毀,而線程的結束不會影響同個進程中的其他線程的結束; 線程共享整個進程的資源(寄存器、堆棧、上下文),一個進程至少包括一個線程; 進程的創建調用fork或者vfork,而線程的創建調用pthread\_create; 線程中執行時一般都要進行同步和互斥,因為他們共享同一進程的所有資源; 進程是資源分配的單位 線程是操作系統調度的單位 進程切換需要的資源很最大,效率很低 線程切換需要的資源一般,效率一般 協程切換任務資源很小,效率高 多進程、多線程根據cpu核數不一樣可能是并行的 也可能是并發的。協程的本質就是使用當前進程在不同的函數代碼中切換執行,可以理解為并行。 協程是一個用戶層面的概念,不同協程的模型實現可能是單線程,也可能是多線程。 進程擁有自己獨立的堆和棧,既不共享堆,亦不共享棧,進程由操作系統調度。(全局變量保存在堆中,局部變量及函數保存在棧中) 線程擁有自己獨立的棧和共享的堆,共享堆,不共享棧,線程亦由操作系統調度(標準線程是這樣的)。 協程和線程一樣共享堆,不共享棧,協程由程序員在協程的代碼里顯示調度。 一個應用程序一般對應一個進程,一個進程一般有一個主線程,還有若干個輔助線程,線程之間是平行運行的,在線程里面可以開啟協程,讓程序在特定的時間內運行。 協程和線程的區別是:協程避免了無意義的調度,由此可以提高性能,但也因此,程序員必須自己承擔調度的責任,同時,協程也失去了標準線程使用多CPU的能力。 [推薦文章](http://www.jishuchi.com/read/go-interview/3435)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看