• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            戰(zhàn)魂小筑

            討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開源項(xiàng)目:https://github.com/davyxu

               :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評(píng)論 :: 0 Trackbacks

            append, map, len不是關(guān)鍵字

            他們其實(shí)還是類庫(kù)功能, 都在buildin包里的, 系統(tǒng)默認(rèn)給你做了個(gè)

            1. import(
            2. . "buildin"
            3. )

            將buildin的包內(nèi)容都映射到全局而已, 其實(shí)你也可以用自己的包這么做

            打印的另一種寫法

            想跟腳本一樣調(diào)試打印數(shù)據(jù)么?

            1. println("hello world")

            無需包含任何包, 因?yàn)樗赽uildin包里

            iota不是黑科技

            這是在buildin包里的定義

            1. // iota is a predeclared identifier representing the untyped integer ordinal
            2. // number of the current const specification in a (usually parenthesized)
            3. // const declaration. It is zero-indexed.
            4. const iota = 0 // Untyped int.

            其實(shí)go是有泛型概念的

            想想map和數(shù)組的定義 
            只是泛型沒有開放給用戶用而已(只許XX放火,不許XX點(diǎn)燈)

            map是支持多個(gè)key的, 而且很方便

            還在為多個(gè)key轉(zhuǎn)id的復(fù)雜算法而頭疼么?

            1. type myKey struct{
            2. number int
            3. str string
            4. }
            5. func main(){
            6. t := map[ myKey] int {
            7. myKey{ 2, "world"}: 1,
            8. }
            9. fmt.Println(t[myKey{2, "world"}])
            10. }
            11. 輸出: 1

            枚舉是可以轉(zhuǎn)成string的

            默認(rèn)定義一個(gè)枚舉

            1. type MyConst int
            2. const (
            3. MyConst_A MyConst = iota
            4. MyConst_B MyConst = iota
            5. )
            6. func main(){
            7. fmt.Println(MyConst_A)
            8. }

            輸出: 0 
            如果我們想自動(dòng)化輸出MyConst_A字符串時(shí) 
            就需要使用golang的一個(gè)工具鏈:golang.org/x/tools/cmd/stringer 
            將其下載, 編譯成可執(zhí)行工具后, 對(duì)代碼進(jìn)行生成 
            生成的代碼會(huì)多出一個(gè)xx_string.go 
            里面就是枚舉的String()string 函數(shù)

            臨時(shí)轉(zhuǎn)換一個(gè)接口并調(diào)用的方法

            1. type love struct{
            2. }
            3. func (self*love)foo(){
            4. fmt.Println("love")
            5. }
            6. func main(){
            7. var chaos interface{} = new(love)
            8. chaos.(interface{
            9. foo()
            10. }).foo()
            11. }

            Golang的receiver實(shí)際上就是this的變種實(shí)現(xiàn)

            1. func( self*MyStruct) foo( p int ){
            2. }

            寫不慣receiver的寫法? 如果這樣改下呢?

            1. func foo( self *MyStruct, p int ){
            2. }

            所以為什么說Golang還是一個(gè)C語言嘛

            關(guān)于內(nèi)存分配…

            • new 傳入Type類型, 返回*Type類型
            • make 可以在分配數(shù)組時(shí)設(shè)置預(yù)分配大小, new不可以
            • make 能分配數(shù)組,map, 但不能分配結(jié)構(gòu)體和原始類型
            • new 能分配數(shù)組, map, 結(jié)構(gòu)體和原始類型等的所有類型
            • &Type等效于new
            • 切片不需要分配內(nèi)存(make,new), 直接聲明就可以了…

            Golang的反射無法通過一個(gè)類型名, 創(chuàng)建其實(shí)例

            C#有Assembly概念, 可以在一個(gè)Assembly里搜索, 創(chuàng)建實(shí)例

            Golang是靜態(tài)類型語言, 如果需要, 只能注冊(cè)你需要?jiǎng)?chuàng)建的結(jié)構(gòu)體, 然后將注冊(cè)好的map用于創(chuàng)建

            Golang可以替換Python來進(jìn)行復(fù)雜的工具流程處理

            如果你需要跨平臺(tái)的工具流程處理, 對(duì)Python不熟悉, 可以使用

            1. go run yourcode.go 參數(shù)1 參數(shù)2

            方式來進(jìn)行工具處理 
            覺得慢, 可以編譯成可執(zhí)行文件

            這樣做的好處: 如果有些類庫(kù)本身就是go寫的, Python想使用是很麻煩的, 而Golang來寫則輕而易舉

            例子: 通過go的protobuf庫(kù), 對(duì)一些文件進(jìn)行處理

            Golang可以自動(dòng)持有方法的接收者實(shí)例

            1. type myType struct{
            2. }
            3. func (self*myType) foo( p int){
            4. fmt.Println("hello", p )
            5. }
            6. func main(){
            7. var callback func( int )
            8. ins := new(myType)
            9. callback = ins.foo
            10. callback( 100 )
            11. }

            做過lua的C++代碼綁定的童鞋都清楚: lua只支持外部靜態(tài)或者全局函數(shù)調(diào)用 
            如果要進(jìn)行C++類成員函數(shù)調(diào)用時(shí), 要自己處理this和成員函數(shù) 
            這種技巧因?yàn)樵缙鹁幾g器的虛表不同平臺(tái)實(shí)現(xiàn)細(xì)節(jié)不統(tǒng)一需要專門處理 
            后面跨平臺(tái)虛表統(tǒng)一后, 類成員函數(shù)的調(diào)用寫法也是很惡心復(fù)雜的 
            但是Golang的小白式用法, 直接吊打C++, 甚至C#復(fù)雜的delegate

            LiteIDE篇: 多開秘籍

            • 找到 菜單->查看->選項(xiàng)->通用->存儲(chǔ)->存儲(chǔ)設(shè)置到本地ini文件

            • 關(guān)閉LiteIDE

            • 復(fù)制LiteIDE整個(gè)目錄, 命名文件夾為你的工程名

            • 每個(gè)工程所在的LiteIDE的配置將是獨(dú)立的, 不會(huì)互相干擾

            LiteIDE篇: 測(cè)試程序也是可以調(diào)試的

            別以為程序一定要是main開始的才可以調(diào)試

            Golang的測(cè)試程序雖然都是一個(gè)個(gè)Test開頭的函數(shù),但執(zhí)行g(shù)o test時(shí), 還是有main入口

            在LiteIDE中, 可以在 調(diào)試->開始調(diào)試測(cè)試程序里進(jìn)行測(cè)試程序調(diào)試

            LiteIDE篇: 在Windows上可以輸出linux可執(zhí)行文件

            go的工具鏈默認(rèn)支持交叉編譯 
            在LiteIDE中, 可以通過切換輸出平臺(tái), 輸出不同平臺(tái)的可執(zhí)行文件

            posted on 2016-11-02 11:09 戰(zhàn)魂小筑 閱讀(22842) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 工具使用及設(shè)計(jì)Golang

            評(píng)論

            # re: Go語言的冷知識(shí) 2016-11-22 16:10 思月行云
            很實(shí)用,點(diǎn)贊 ^ ^  回復(fù)  更多評(píng)論
              

            亚洲国产精品久久久久婷婷老年| 久久九九免费高清视频| 中文无码久久精品| 国内精品久久久久影院一蜜桃| 国产精品久久久久…| 色欲综合久久躁天天躁| 国产精品99久久99久久久| 久久精品国产精品亚洲毛片| 中文字幕无码免费久久| 国产V综合V亚洲欧美久久| 久久国产成人亚洲精品影院| 久久久国产精品网站| 漂亮人妻被黑人久久精品| 无码人妻久久一区二区三区蜜桃| 99久久精品国产综合一区| 国内精品伊人久久久久妇| 国内精品久久久久久久97牛牛| 国产精品午夜久久| 国产成人精品久久一区二区三区| 久久播电影网| 国产精品久久久久久吹潮| 日韩电影久久久被窝网| 久久er热视频在这里精品| 久久99精品久久久久久动态图| 久久中文字幕无码专区| 久久久久久久91精品免费观看| 久久99国产一区二区三区| 麻豆亚洲AV永久无码精品久久 | 欧美激情精品久久久久久久| 久久午夜羞羞影院免费观看| 久久久久亚洲AV无码去区首| 国产精品毛片久久久久久久| 久久精品欧美日韩精品| 久久精品国产亚洲av麻豆蜜芽| 久久精品国产99国产精品导航| 久久国产精品无码网站| 国产精品丝袜久久久久久不卡 | 伊人久久大香线蕉综合影院首页| 久久97久久97精品免视看秋霞| 亚洲国产精品久久久久久| 2020最新久久久视精品爱|