發表文章

目前顯示的是有「FAQ」標籤的文章

[Go] 閱讀心得 不負責任翻譯 Golang Frequently Asked Questions (FAQ) PART4 END

https://golang.org/doc/faq 官方FAQ 提供一些有趣的資訊,很認真的試圖都理解一下,由於內容太多,拆成幾個部分來看。 PART4這裡有 Functions and Methods   Control flow Packages and Testing Implementation  Performance Changes from C --Functions and Methods-- Why do T and *T have different method sets? 接收到型態T的對象,有型態T所有的method,但如果是接收到型態*T,則會擁有型態T和型態*T的所有method。 如果interface裡面包含*T,那麼操作的行為會是pointer,如果是T,那操作的行為只能是value的處理方式。 如果是傳value,copy值之後,就跟原本被copy的部分沒關係了。 What happens with closures running as goroutines? func main() { done := make(chan bool) values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done 這個範例是在學GO蠻經典的例子,結論是永遠不要在gorutine裡面直接使用外面的變數。 因為goruntine宣告後並不是馬上建立的,可能等一下才建立,以及複數個gorutine建立起來可能沒有順序性,此時外面的變數已經不知道跑到哪裡去了。 有兩個比較直觀的解法,一個是每次都直接將變數傳入goruntine的function。 一個是傳入之前都先copy一份。(這個感覺跟每個與scope處理的範圍有關,比較不直覺。) --Control flow-- Does Go have the ?: operator? Go 沒有問號冒號的運算符號,請愛用if else 達成你的目標。 ...

[Go] 閱讀心得 不負責任翻譯 Golang Frequently Asked Questions (FAQ) PART3

https://golang.org/doc/faq 官方FAQ 提供一些有趣的資訊,很認真的試圖都理解一下,由於內容太多,拆成幾個部分來看。 PART3這裡有 Values   Writing Code   Pointers and Allocation   Concurrency --Values-- Why does Go not provide implicit numeric conversions? 要考量的問題很多,轉換後是否為正數?值會多大?會不會溢位?是否可用? 自動轉換數字型態所帶來的混亂大過好處,沒有特別設計的compile架構很難滿足這個機制。 對GO而言即使64-bit的系統,int也不等於int64的型態。 Why are maps built in? 如strings一樣重要,這種結構可以滿足廣大的定義需求。 map結構,雖然語意寫法稍微不方便了點,但complie的速度快,這應該是可被接受的合理平衡點。 Why don’t maps allow slices as keys? map 裡面的查找,需要equality 運算子(我不清楚這個equality是什麼)。 對於slice是沒有equality 運算子的,但array,和struct有,所以可以當作map的keys。(我的天呀) (會問這種問題,真是超乎想像) Why are maps, slices, and channels references while arrays are values? 為什麼map, slices, and channels 是參考,arrays 是數值。 我的理解是在講call by references 的 references,還有 call by value的value。 map, slices, and channels 是指標,所以不可能生出非指標型態的實體,GO也掙扎的想把array做成這樣。 但會有一些很複雜的作用,所以GO放棄,還是維持value的可用性較高。(這部分看得不是很懂)  -- Writing Code--   How are libraries document...

[Go] 閱讀心得 不負責任翻譯 Golang Frequently Asked Questions (FAQ) PART2

https://golang.org/doc/faq 官方FAQ 提供一些有趣的資訊,很認真的試圖都理解一下,由於內容太多,拆成幾個部分來看。 PART2這裡有   Types   Types Is Go an object-oriented language? Go 說是,也不是,有OO的風格,但沒有『繼承』,在GO裡面的interface也跟其他語言的interface有所不同。 透過interface可以達到某些類似subclass的目的,但GO聲明這樣的東西,絕對不等於subclass。 (BOX 和 UBOX 的概念我不清楚,找到的參考是 https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/types/boxing-and-unboxing ,但還是不懂意思,GO表示可以把ubox integer也塞進struct,這很厲害?) 再次聲明,沒有了『繼承』,少了負擔感覺真好。 (OS: 你到底多討厭繼承,這好像我第三次看到了,然後我也覺得就直說不是傳統物件導向的語言,別甲仙啦。) How do I get dynamic dispatch of methods? 『dynamic dispatch of methods』是一個概念,搭配Polymorphism的概念一起看,在GO能做到這件事的唯一方式就是透過interface。 在struct裡面的method和具體的method都是靜態處理。 Why is there no type inheritance? GO想走別的方向,不想要有『繼承』。 沒有『繼承』帶來實質上的好處,『繼承』機制所需要的紀錄彼此關係這件事情,造成很高的複雜度和負擔。 GO的interface可以達到你的目的,再者,沒有了『繼承』就不需要管型態與interface的『明確關係』,每個type可以乾淨的跟interface結合。 (所以其他OO語言,有繼承的type,如果有使用interface,他們之間會定義某種關係狀態,拖累某些處理和速度是嗎?) 舉例fmt.Fprintf 可以印出任何型態的東西,io.Writer可以各種寫入,就是靠『沒繼承』+ 『...

[Go] 閱讀心得 不負責任翻譯 Golang Frequently Asked Questions (FAQ) PART1

https://golang.org/doc/faq 官方FAQ 提供一些有趣的資訊,很認真的試圖都理解一下,由於內容太多,拆成幾個部分來看。 PART1這裡有  Origins  Usage    Design --Origins-- What is the purpose of the project? 依賴管理對於現在語言非常重要,C語言有著絕佳的速度,但header file的方式在管理依賴這件事上實在非常糟糕。於是想要一個速度快,依賴管理方面又能滿足我們的語言。 沒有『繼承』的概念,這點可以省略『判斷兩個型態彼此之間的關係』所花的時間。(這點蠻有趣的,我不曉得『繼承』需要這樣的cost) Go準備完整的garbage-collected ,來足以應付併發與溝通問題。(以目前所學,各處聽到GO的gb機制多少令人詬病XD) Go是為了多核心機器所設計的語言。(沒錯,這點非常重要!) What is the status of the project? Go 是個開源的poject,有Google撐腰,version 1 是個長期支援的版本。 version 2 改天指日可待! What’s the origin of the mascot? (吉祥物,略) What is the history of the project? (歷史,略) Why are you creating a new language? 這裡說目前主要的程式語言,若達到簡單好上手(直譯式、弱型別)的,那麼就不能滿足安全又快速的條件(我想這是以事先編譯的角度來看)。 Go 想要達到簡單、安全又快速,可以處理併發、多核心的機器。 GO語言目標:在 單一一台機器上,可以快速與有效的執行龐大的程式 。 What are Go’s ancestors? Go 主要血統是C語言,但參雜很多語言的概念,還有新的。 What are the guiding principles in the design? (部份不太懂) 捨棄繼承,type就是純粹的type,而不用聲明type和type的關係(講繼承) 保持概念和原則的純粹,method...