回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,20 +1,20 @@
# 第13章 底層編
# 第13章 底层编
Go言的設計包含了多安全策略,限了可能致程序行出現錯誤的用法。編譯時類型檢査檢査可以發現大多數類型不匹配的操作,例如兩個字符串做法的錯誤。字符串、map、slice和chan等所有的內置類型,都有格的類型轉換規則
Go言的设计包含了多安全策略,限了可能致程序行出现错误的用法。编译时类型检查检查可以发现大多数类型不匹配的操作,例如两个字符串做法的错误。字符串、map、slice和chan等所有的内置类型,都有格的类型转换规则
對於無法靜態檢測到的錯誤,例如數組訪問越界或使用空指針,運行時動態檢測可以保程序在遇到問題的時候立卽終止併打印相關的錯誤信息。自動內存管理(垃圾存自動迴收)可以消除大部分野指針和內存洩漏相關的問題
对于无法静态检测到的错误,例如数组访问越界或使用空指针,运行时动态检测可以保程序在遇到问题的时候立即终止并打印相关的错误信息。自动内存管理(垃圾存自动回收)可以消除大部分野指针和内存泄漏相关的问题
Go言的實現刻意藏了很多底層細節。我們無法知道一個結構體眞實的內存布局,也無法獲取一個運行時函數對應的機器碼,也法知道前的goroutine是行在哪操作繫統線程之上。事Go言的調度器自己定是否需要將某個goroutine從一個操作繫統線程轉移到另一操作繫統線程。一指向量的指針也併沒有展示變量眞實的地址。因垃圾收器可能會根據需要移動變量的存位置,當然變量對應的地址也被自更新。
Go言的实现刻意藏了很多底层细节。我们无法知道一个结构体真实的内存布局,也无法获取一个运行时函数对应的机器码,也法知道前的goroutine是行在哪操作系统线程之上。事Go言的度器自己定是否需要将某个goroutine从一个操作系统线程转移到另一操作系统线程。一指向量的指针也并没有展示变量真实的地址。因垃圾收器可能会根据需要移动变量的存位置,当然变量对应的地址也被自更新。
總的來説Go言的些特性使得Go程序相比較低級的C語言來説更容易預測和理解,程序也不容易崩。通過隱藏底層的實現細節也使得Go語言編寫的程序具有高度的可移植性,因爲語言的語義在很大程度上是獨立於任何編譯器實現、操作繫統和CPU繫統結構的(然也不是完全絶對獨例如int等型就依賴於CPU器字的大小,某些表式求值的具體順序,還有編譯器實現的一些外的限等)。
总的来说Go言的些特性使得Go程序相比较低级的C语言来说更容易预测和理解,程序也不容易崩。通过隐藏底层的实现细节也使得Go语言编写的程序具有高度的可移植性,因为语言的语义在很大程度上是独立于任何编译器实现、操作系统和CPU系统结构的(然也不是完全绝对独例如int等型就依赖于CPU器字的大小,某些表式求值的具体顺序,还有编译器实现的一些外的限等)。
候我可能會放棄使用部分言特性而優先選擇更好具有更好性能的方法,例如需要其他語言編寫的庫互操作,或者用Go語言無法實現的某些函
候我可能会放弃使用部分言特性而优先选择更好具有更好性能的方法,例如需要其他语言编写的库互操作,或者用Go语言无法实现的某些函
在本章,我們將展示如何使用unsafe包來襬脫Go語言規則帶來的限製述如何建C言函數庫的綁定,以及如何進行繫統調用。
在本章,我们将展示如何使用unsafe包来摆脱Go语言规则带来的限制述如何建C言函数库的绑定,以及如何进行系统调用。
本章提供的方法不應該輕易使用(譯註:屬於黑魔法,然可能功能很大,但是也容易誤傷到自己)。如果沒有處理好細節,它可能致各不可預測的併且隱晦的錯誤,甚至連有經驗的的C言程序員也無法理解這些錯誤。使用unsafe包的同也放了Go言保證與未來版本的兼容性的承,因它必然在有意意中使用很多實現的細節,而這些實現的細節在未的Go言中很可能被改
本章提供的方法不应该轻易使用(译注:属于黑魔法,然可能功能很大,但是也容易误伤到自己)。如果没有处理好细节,它可能致各不可预测的并且隐晦的错误,甚至连有经验的的C言程序员也无法理解这些错误。使用unsafe包的同也放了Go言保证与未来版本的兼容性的承,因它必然在有意意中使用很多实现的细节,而这些实现的细节在未的Go言中很可能被改
意的是unsafe包是一采用特殊方式實現的包。然它可以和普通包一樣的導入和使用,但它實際上是由編譯器實現的。它提供了一些訪問語言內部特性的方法,特别是存布局相關的細節。將這些特性封到一個獨立的包中,是爲在極少數情況下需要使用的候,同引起人們的註意(譯註:因看包的名字就知道使用unsafe包是不安全的。此外有一些境因安全的因素可能限製這個包的使用。
意的是unsafe包是一采用特殊方式实现的包。然它可以和普通包一样的导入和使用,但它实际上是由编译器实现的。它提供了一些访问语言内部特性的方法,特别是存布局相关的细节。将这些特性封到一个独立的包中,是为在极少数情况下需要使用的候,同引起人们的注意(译注:因看包的名字就知道使用unsafe包是不安全的。此外有一些境因安全的因素可能限制这个包的使用。
unsafe包被泛地用於比較低級的包, 例如runtime、os、syscall有net包等爲它們需要和操作繫統密切配合,但是對於普通的程序一般是不需要使用unsafe包的。
unsafe包被广泛地用于比较低级的包, 例如runtime、os、syscall有net包等为它们需要和操作系统密切配合,但是对于普通的程序一般是不需要使用unsafe包的。