<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java 轉(zhuǎn) Go 之初體驗 !

          共 2117字,需瀏覽 5分鐘

           ·

          2022-04-18 03:54

          點擊關(guān)注公眾號,Java干貨及時送達(dá)??

          來源:blog.csdn.net/tiantang_zy/

          article/details/105048817

          面試了一個單位 說可能需要java轉(zhuǎn)go語言 所以在此開始學(xué)習(xí)一下 如果面試通過了就繼續(xù)學(xué) 沒面試過 那么就這一篇了 加油!!!

          一、萬能之Hello World 開啟go的大門

          直接上代碼

          package?main?//表明包

          import?"fmt"?//導(dǎo)入包?fmt?控制輸入輸出?感覺和java的System.out和Scanner有點像

          func?main()?{
          ????fmt.Println("Hello Go world。");?//進(jìn)入這個世界了
          }

          輸出結(jié)果:

          是不是感覺還可以。

          二、Go語言環(huán)境安裝

          安裝包下載地址為:https://golang.org/dl/。

          如果打不開可以使用這個地址:https://golang.google.cn/dl/。

          我安裝的是windows版的 雙擊安裝選擇目錄 全程輕松隨意 比想象中簡單

          配置系統(tǒng)變量,然后就可以開始玩了

          三、基礎(chǔ)語法

          • 行分割符:不需要像java一眼每句之后都加一個;表明結(jié)束 每一行都是單獨的一句 如果非要把幾行語句寫在一起 就需要加分號了
          • 注釋 : //單行注釋
            /*
            aaa
            bbb
            */
          • 標(biāo)識符 標(biāo)識符用來命名變量、類型等程序?qū)嶓w。一個標(biāo)識符實際上就是一個或是多個字母(AZ和az)數(shù)字(0~9)、下劃線_組成的序列,但是第一個字符必須是字母或下劃線而不能是數(shù)字。
          • 字符串連接 直接用+號即可連接 這點倒是和java挺像的 但是java里直接用加號連接的性能不是很好 不知道go語言中是否有相類似的編譯流程
          • 關(guān)鍵字
          • 預(yù)定義標(biāo)識符

          四、數(shù)據(jù)類型


          數(shù)據(jù)類型詳細(xì)的可以看這個:https://www.runoob.com/go/go-data-types.html
          首先一點,給我印象比較深的就是 對數(shù)字類型添加了很多的包裝,在不同的應(yīng)用范圍內(nèi)使用不同的數(shù)據(jù)類型 例如

          • int8 有符號 8 位整型 (-128 到 127)
          • int16 有符號 16 位整型 (-32768 到 32767)
          • int32 有符號 32 位整型 (-2147483648 到 2147483647)
          • int64 有符號 64 位整型 (-9223372036854775808 到 9223372036854775807)
            這個給人感覺就是對使用著感覺 有了更高的要求 像java就是int Integer BigInteger這幾種包裝好的用就行了
            當(dāng)然這樣要求的更細(xì)致 感覺編譯的時候 就越容易控制 如果方方面面都這么細(xì)致的話 運行速度上就可以提高不少的

          五、聲明變量

          1. var identifier type 例:var a int;
          2. var identifier1,identifier2 type 例:var a,b string;
          3. 指定變量類型,如果沒有初始化,則變量默認(rèn)為零值
            數(shù)值類型(包括complex64/128)為 0
            布爾類型為 false
            字符串為 “”(空字符串)
            以下幾種類型為 nil:
            var a *int
            var a []int
            var a map[string] int
            var a chan int
            var a func(string) int
            var a error // error 是接口
          4. 根據(jù)值自行判定變量類型 例:var d = true (這點就有點像js了)
          5. 省略 var, 注意 := 左側(cè)如果沒有聲明新的變量,就產(chǎn)生編譯錯誤,格式:v\_name := value 例:f := “Runoob”
          6. 多變量聲明
          //類型相同多個變量,?非全局變量
          var?vname1,?vname2,?vname3?type
          vname1,?vname2,?vname3?=?v1,?v2,?v3

          //?和?python?很像,不需要顯示聲明類型,自動推斷
          var?vname1,?vname2,?vname3?=?v1,?v2,?v3?

          //?出現(xiàn)在?:=?左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過的,否則會導(dǎo)致編譯錯誤
          vname1,?vname2,?vname3?:=?v1,?v2,?v3?


          //?這種因式分解關(guān)鍵字的寫法一般用于聲明全局變量
          var?(
          ????vname1?v_type1
          ????vname2?v_type2
          )

          六、常量

          const 定義常量關(guān)鍵字 目前感覺和final static 類似
          定義了之后就不能改了 如果代碼里面改了的話 會報 cannot assign to LENGTH 錯誤

          下來就發(fā)現(xiàn)一個神奇懂東西 iota
          iota,特殊常量,可以認(rèn)為是一個可以被編譯器修改的常量。

          iota 在 const關(guān)鍵字出現(xiàn)時將被重置為 0(const 內(nèi)部的第一行之前),const 中每新增一行常量聲明將使 iota 計數(shù)一次(iota 可理解為 const 語句塊中的行索引)。

          枚舉自增計數(shù)器 感覺是這么個意思

          運算符





          &這個就是只有兩個1的時候才是1其余都是0
          |這個是只有兩個0的時候才是0其余都是1和與剛好相反
          ^這個簡單粗暴兩個相同的數(shù)字是0不同的時候是1



          這個<<=后面的幾個都還有點驚艷到我了 厲害厲害


          這兩個優(yōu)點沒太看懂 敲個代碼試一下

          package?main

          import?"fmt"

          func?main(){
          ?var?a?string?=?"abc"
          ?var?ptr?*string?=?&a
          ?fmt.Printf("第?1?行?-?a?變量類型為?=?%T\n",?a?);
          ?fmt.Printf("第?2?行?-?ptr??變量類型為?=?%T\n",?ptr?);
          ?fmt.Println(*ptr)
          ?fmt.Println(ptr)
          }


          加*輸出的是內(nèi)容 不加輸出的就是地址 這個指針的概念 java里是沒有的


          這一part 感覺除了指針的概念 其余的感覺都差不多
          詳細(xì)例子:https://www.runoob.com/go/go-constants.html

          七、條件語句


          這個select語句真的是看的我欲生欲死
          以下描述了 select 語句的語法:

          每個 case 都必須是一個通信
          所有 channel 表達(dá)式都會被求值
          所有被發(fā)送的表達(dá)式都會被求值
          如果任意某個通信可以進(jìn)行,它就執(zhí)行,其他被忽略。
          如果有多個 case 都可以運行,Select 會隨機(jī)公平地選出一個執(zhí)行。其他不會執(zhí)行。
          否則:
          如果有 default 子句,則執(zhí)行該語句。
          如果沒有 default 子句,select 將阻塞,直到某個通信可以運行;Go 不會重新對 channel 或值進(jìn)行求值。

          來來來 兩段代碼說明一下

          package?main

          import?(
          ????"fmt"
          )

          func?fibonacci(c,?quit?chan?int)?{
          ????x,?y?:=?1,?1
          ?
          ????for?{
          ????????select?{
          ????????case?c?<-?x:
          ??????fmt.Printf("x?:?%d,?y?:?%d\n",?x,?y)
          ????????????x,?y?=?y,?x+y
          ????????case?<-quit:
          ????????????fmt.Println("quit")
          ????????????return
          ????????}
          ????}
          }

          func?main()?{
          ????c?:=?make(chan?int)
          ????quit?:=?make(chan?int)

          ????go?func()?{
          ????????for?i?:=?0;?i?6;?i++?{
          ??????fmt.Printf("開始搞事?i?=?%d\n",?i)
          ????????????fmt.Println(<-c)
          ????????}
          ????????quit?<-?0
          ????}()

          ????fibonacci(c,?quit)
          }

          輸出結(jié)果為:

          第二段代碼:

          package?main

          import?(
          ????"fmt"
          ????"time"
          )

          func?Chann(ch?chan?int,?stopCh?chan?bool)?{
          ????for?j?:=?0;?j?10;?j++?{
          ????????ch?<-?j
          ????????time.Sleep(time.Second)
          ????}
          ????stopCh?<-?true
          }

          func?main()?{

          ????ch?:=?make(chan?int)
          ????c?:=?0
          ????stopCh?:=?make(chan?bool)

          ????go?Chann(ch,?stopCh)

          ????for?{
          ????????select?{
          ????????case?c?=?<-ch:
          ????????????fmt.Println("Recvice",?c)
          ????????????fmt.Println("channel")
          ????????case?s?:=?<-ch:
          ????????????fmt.Println("Receivessss",?s)
          ????????case?_?=?<-stopCh:
          ????????????goto?end
          ????????}
          ????}
          end:
          }

          輸出結(jié)果為:

          這兩個例子分別說明了下面兩點
          如果任意某個通信可以進(jìn)行,它就執(zhí)行,其他被忽略。
          如果有多個 case 都可以運行,Select 會隨機(jī)公平地選出一個執(zhí)行。其他不會執(zhí)行。

          但是有個疑問 為啥第一個例子里在執(zhí)行偶數(shù)次的時候 xy會交換兩次 在下一次調(diào)用的時候又不會進(jìn)行交換?內(nèi)部是怎么實現(xiàn)的???真想打個斷點調(diào)試一下 這個問題如果我往后會做go的話 我一定會回來的!!!!

          今天就學(xué)到這里了 希望我胡漢三還會回來

          學(xué)習(xí)自:
          https://www.runoob.com/go
          https://www.cnblogs.com/yang-2018/p/11133047.html

          1.?SpringBoot 項目鑒權(quán)的 4 種方式

          2.?新手必須知道的 Kubernetes 架構(gòu) !

          3.?SpringBoot 關(guān)于日期時間格式化處理方式總結(jié)

          4.?Redis 官方可視化工具,功能真心強(qiáng)大!

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點“在看”,關(guān)注公眾號并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          PS:因公眾號平臺更改了推送規(guī)則,如果不想錯過內(nèi)容,記得讀完點一下在看,加個星標(biāo),這樣每次新文章推送才會第一時間出現(xiàn)在你的訂閱列表里。

          “在看”支持小哈呀,謝謝啦??

          瀏覽 95
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看国产成人AV一天堂 | 狠狠操网 | 高清一区二区 | 久久真人视频 | 天天草天天干天天射 |