国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

體驗go語言的風(fēng)騷式編程

浠ラ箍 / 3371人閱讀

摘要:來我們一起感受下的風(fēng)騷式的代碼風(fēng)格。魔鬼式變量聲明數(shù)組的聲明就是數(shù)組,它的定義方式如下在中,表示數(shù)組的長度,表示存儲元素的類型。在開發(fā)中不定長度表示的數(shù)組全部都是。它有點類似于語言的類型。和命名將的和方法命名方案做了進一步發(fā)展。

最近想搞搞后臺開發(fā),話說注意力就轉(zhuǎn)移到了公司用的golang。用Go做微服務(wù)比較方便,或許是因為golang強悍的語法吧,看到go的語法,自己已被深深的吸引。

來我們一起感受下Go的風(fēng)騷式的代碼風(fēng)格。

1、魔鬼式變量聲明

2、數(shù)組的聲明

array就是數(shù)組,它的定義方式如下:

var arr [n]type

在[n]type中,n表示數(shù)組的長度,type表示存儲元素的類型。對數(shù)組的操作和其它語言類似,都是通過[]來進行 讀取或賦值:

var arr [10]int  // 聲明了一個int類型的數(shù)組 
arr[0] = 42      // 數(shù)組下標(biāo)是從0開始的 
arr[1] = 13      // 賦值操作 
fmt.Printf("The first element is %d
", arr[0])  // 獲取數(shù)據(jù),返回42 
fmt.Printf("The last element is %d
", arr[9]) //返回未賦值的最后一個元素,默認(rèn)返回0 

由于長度也是數(shù)組類型的一部分,因此[3]int與[4]int是不同的類型,數(shù)組也就不能改變長度。數(shù)組之間的賦值是 值的賦值,即當(dāng)把一個數(shù)組作為參數(shù)傳入函數(shù)的時候,傳入的其實是該數(shù)組的副本,而不是它的指針。如果要使用指 針,那么就需要用到后面介紹的slice類型了。

數(shù)組可以使用另一種:=來聲明

a := [3]int{1, 2, 3} // 聲明了一個長度為3的int數(shù)組 
b := [10]int{1, 2, 3} // 聲明了一個長度為10的int數(shù)組,其中前三個元素初始化為1、2、3,其它默認(rèn)為0 
c := [...]int{4, 5, 6} // 可以省略長度而采用`...`的方式,Go會自動根據(jù)元素個數(shù)來計算長度
3、 go語言強大的slice操作

golang 中的 slice 非常強大,讓數(shù)組操作非常方便高效。在開發(fā)中不定長度表示的數(shù)組全部都是 slice 。但是很多同學(xué)對 slice 的模糊認(rèn)識,造成認(rèn)為golang中的數(shù)組是引用類型,結(jié)果就是在實際開發(fā)中碰到很多坑,以至于出現(xiàn)一些莫名奇妙的問題,數(shù)組中的數(shù)據(jù)丟失了
slice 的數(shù)據(jù)結(jié)構(gòu),它很簡單,一個指向真實 array 地址的指針 ptrslice 的長度 len 和容量 cap

其中 len 和 cap 就是我們在調(diào)用 len(slice) 和 cap(slice) 返回的值。

我們來按照 slice 的數(shù)據(jù)結(jié)構(gòu)定義來解析出 ptr, len, cap

// 按照上圖定義的數(shù)據(jù)結(jié)構(gòu)

type Slice struct {
    ptr   unsafe.Pointer        // Array pointer
    len   int               // slice length
    cap     int               // slice capacity

示例代碼

4、map的聲明

注意由于go語言是一個強類型的語言,因此hashmap也是有類型的,具體體現(xiàn)在key和value都必須指定類型,比如聲明一個key為string,value也是string的map,
需要這樣做

go語言中的枚舉

5、for循環(huán)的遍歷
func formapTest() {
    var arrayi= [...] int{1, 2, 3, 4, 5, 6, 7, 78, 9, 10}
    for index, c := range arrayi {
        fmt.Printf("array[%d] = %d", index, c)
    }

    str := "go語言的學(xué)習(xí)和啪啪"
    for i, ch := range str {
        fmt.Println(i, ch) //ch的類型為rune unicode編碼
    }
    //輸出為:28907  (Unicode編碼時,兩個字節(jié)代表一個字符)

    n := len(str)
    for i := 0; i < n; i++ {
        ch := str[i] // 依據(jù)下標(biāo)取字符串中的字符,類型為byte
        fmt.Println(i, ch)
        //輸出為utf-8編碼,一個漢字字符占三個字節(jié)
    }

    array := []rune(str)
    n = len(array)
    for i := 0; i < n; i++ {
        ch := array[i]     // 依據(jù)下標(biāo)取字符串中的字符,類型為byte
         fmt.Println(i, ch) //unicode 編碼轉(zhuǎn)十進制輸出
        //golang中字符類型的實際數(shù)據(jù)類型為uint32,以for循環(huán)遍歷的方式輸出結(jié)果都是Unicode編碼的
    }
    //var str string= "yyh,hello,卡卡論壇,好厲害哦"
    //fmt.Print(str)
    fmt.Print("
================================
")
    for i , ch :=  range str{
        //fmt.Printf("(%d, %c)",i,ch)
        fmt.Printf("(%d, %x)",i,ch)
    }

    fmt.Print(utf8.RuneCountInString(str))
    fmt.Print("================================
")
    bytes := [] byte(str)

    //for len(bytes) > 0 {
        r, size := utf8.DecodeRune(bytes)
        fmt.Printf("%c  %d",r,size)
    //}
    fmt.Println()
    fmt.Println()
    fmt.Println()
    for i,c := range bytes{

        r,_ :=utf8.DecodeRune(bytes)
        fmt.Printf("%d  %c %x 
",i,r,c)
    }
    for i ,ch := range []rune(str){
        fmt.Printf("%d: %c  ",i,ch)
    }

    str2 := "123 我按時 的發(fā)ad fg票 是否 adfg 發(fā) 發(fā)生a f發(fā) 的sj df"
    sps   := strings.Split(str2," ")
    sps = strings.Fields(str2)
    var isContact  =  strings.Contains(str2,"你們")
    fmt.Println(sps)
    fmt.Println(isContact)
}
6、 golang中的結(jié)構(gòu)體和繼承

7、 golang中的接口

8、 golang中的空interface

類似于java中的object,空interface(interface{})不包含任何的method,正因為如此,所有的類型都實現(xiàn)了空interface。空interface對于
描述起不到任何的作用(因為它不包含任何的method),但是空interface在我們需要存儲任意類型的數(shù)值的時候相當(dāng)有用,因為它可以存儲任意類型的數(shù)值。它有點類似于C語言的void*類型。

一個函數(shù)把interface{}作為參數(shù),那么他可以接受任意類型的值作為參數(shù),如果一個函數(shù)返回interface{},那么也
就可以返回任意類型的值。是不是很有用啊!

9、結(jié)構(gòu)體中可以定義字段,但接口不行

structs與interfaces不能具有相同的API,因為interfaces無法定義字段。這個問題并算很大,因為可以在接口中定義getter和setter方法,雖然這有點混亂。 eg:

10、Public和Private命名

Golang將Python的public和private方法命名方案做了進一步發(fā)展。當(dāng)我最初發(fā)現(xiàn)以大寫字母開頭的函數(shù)、結(jié)構(gòu)體是public,而小寫開頭的則是private的時候, 感覺不可思議,但我很享受這種語法。

type PublicStructName struct {} //public 外部能調(diào)用
type privateStructName struct {} // 私有 結(jié)構(gòu)體,僅內(nèi)部函數(shù)能調(diào)用
最后

今天就先到這里,golang語法很多,這里只是其中的冰山一角。如果大家想學(xué)習(xí)golang,我這里推薦:https://github.com/Unknwon/th...

閱讀更多

31道Android面試題 ,牢固你的基礎(chǔ)!

做后臺是選擇Java 、Go ,還是 PHP?

AndroidUtils:Android開發(fā)不得不收藏的Utils

美團面試題:Java-線程池 ThreadPool 專題詳解

相信自己,沒有做不到的,只有想不到的

在這里獲得的不僅僅是技術(shù)!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98224.html

相關(guān)文章

  • 體驗go語言風(fēng)騷編程

    摘要:來我們一起感受下的風(fēng)騷式的代碼風(fēng)格。魔鬼式變量聲明數(shù)組的聲明就是數(shù)組,它的定義方式如下在中,表示數(shù)組的長度,表示存儲元素的類型。在開發(fā)中不定長度表示的數(shù)組全部都是。它有點類似于語言的類型。和命名將的和方法命名方案做了進一步發(fā)展。 最近想搞搞后臺開發(fā),話說注意力就轉(zhuǎn)移到了公司用的golang。用Go做微服務(wù)比較方便,或許是因為golang強悍的語法吧,看到go的語法,自己已被深深的吸引。...

    taohonghui 評論0 收藏0
  • 某熊技術(shù)之路指北 ?

    某熊的技術(shù)之路指北 ? 當(dāng)我們站在技術(shù)之路的原點,未來可能充滿了迷茫,也存在著很多不同的可能;我們可能成為 Web/(大)前端/終端工程師、服務(wù)端架構(gòu)工程師、測試/運維/安全工程師等質(zhì)量保障、可用性保障相關(guān)的工程師、大數(shù)據(jù)/云計算/虛擬化工程師、算法工程師、產(chǎn)品經(jīng)理等等某個或者某幾個角色。某熊的技術(shù)之路系列文章/書籍/視頻/代碼即是筆者蹣跚行進于這條路上的點滴印記,包含了筆者作為程序員的技術(shù)視野、...

    shadowbook 評論0 收藏0
  • gorose orm+dotweb框架快速構(gòu)建go web網(wǎng)站實戰(zhàn)(一)

    摘要:網(wǎng)站功能結(jié)構(gòu)規(guī)劃和基礎(chǔ)服務(wù)安裝為了快速的構(gòu)建一個網(wǎng)站在這里我們采用飛哥的組件和的框架來做網(wǎng)站實戰(zhàn)首先我們需要做出一些基礎(chǔ)的規(guī)劃萬丈高樓平地起我們先來給他打下地基做一下簡單的模塊和基本的網(wǎng)站要素規(guī)劃一網(wǎng)站名字快新聞顧名思義就是要做到盡量簡短一 網(wǎng)站功能結(jié)構(gòu)規(guī)劃和基礎(chǔ)服務(wù)安裝 為了快速的構(gòu)建一個go web網(wǎng)站, 在這里, 我們采用 飛哥(fizzday) 的 gorose orm 組件和...

    nanchen2251 評論0 收藏0

發(fā)表評論

0條評論

浠ラ箍

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<