摘要:來我們一起感受下的風騷式的代碼風格。魔鬼式變量聲明數組的聲明就是數組,它的定義方式如下在中,表示數組的長度,表示存儲元素的類型。在開發中不定長度表示的數組全部都是。它有點類似于語言的類型。和命名將的和方法命名方案做了進一步發展。
最近想搞搞后臺開發,話說注意力就轉移到了公司用的golang。用Go做微服務比較方便,或許是因為golang強悍的語法吧,看到go的語法,自己已被深深的吸引。
來我們一起感受下Go的風騷式的代碼風格。
1、魔鬼式變量聲明 2、數組的聲明array就是數組,它的定義方式如下:
var arr [n]type
在[n]type中,n表示數組的長度,type表示存儲元素的類型。對數組的操作和其它語言類似,都是通過[]來進行 讀取或賦值:
var arr [10]int // 聲明了一個int類型的數組 arr[0] = 42 // 數組下標是從0開始的 arr[1] = 13 // 賦值操作 fmt.Printf("The first element is %d ", arr[0]) // 獲取數據,返回42 fmt.Printf("The last element is %d ", arr[9]) //返回未賦值的最后一個元素,默認返回0
由于長度也是數組類型的一部分,因此[3]int與[4]int是不同的類型,數組也就不能改變長度。數組之間的賦值是 值的賦值,即當把一個數組作為參數傳入函數的時候,傳入的其實是該數組的副本,而不是它的指針。如果要使用指 針,那么就需要用到后面介紹的slice類型了。
數組可以使用另一種:=來聲明
a := [3]int{1, 2, 3} // 聲明了一個長度為3的int數組 b := [10]int{1, 2, 3} // 聲明了一個長度為10的int數組,其中前三個元素初始化為1、2、3,其它默認為0 c := [...]int{4, 5, 6} // 可以省略長度而采用`...`的方式,Go會自動根據元素個數來計算長度3、 go語言強大的slice操作
golang 中的 slice 非常強大,讓數組操作非常方便高效。在開發中不定長度表示的數組全部都是 slice 。但是很多同學對 slice 的模糊認識,造成認為golang中的數組是引用類型,結果就是在實際開發中碰到很多坑,以至于出現一些莫名奇妙的問題,數組中的數據丟失了
slice 的數據結構,它很簡單,一個指向真實 array 地址的指針 ptr ,slice 的長度 len 和容量 cap 。
其中 len 和 cap 就是我們在調用 len(slice) 和 cap(slice) 返回的值。
我們來按照 slice 的數據結構定義來解析出 ptr, len, cap
// 按照上圖定義的數據結構
type Slice struct { ptr unsafe.Pointer // Array pointer len int // slice length cap int // slice capacity
示例代碼
4、map的聲明注意由于go語言是一個強類型的語言,因此hashmap也是有類型的,具體體現在key和value都必須指定類型,比如聲明一個key為string,value也是string的map,
需要這樣做
go語言中的枚舉
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語言的學習和啪啪" for i, ch := range str { fmt.Println(i, ch) //ch的類型為rune unicode編碼 } //輸出為:28907 (Unicode編碼時,兩個字節代表一個字符) n := len(str) for i := 0; i < n; i++ { ch := str[i] // 依據下標取字符串中的字符,類型為byte fmt.Println(i, ch) //輸出為utf-8編碼,一個漢字字符占三個字節 } array := []rune(str) n = len(array) for i := 0; i < n; i++ { ch := array[i] // 依據下標取字符串中的字符,類型為byte fmt.Println(i, ch) //unicode 編碼轉十進制輸出 //golang中字符類型的實際數據類型為uint32,以for循環遍歷的方式輸出結果都是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 我按時 的發ad fg票 是否 adfg 發 發生a f發 的sj df" sps := strings.Split(str2," ") sps = strings.Fields(str2) var isContact = strings.Contains(str2,"你們") fmt.Println(sps) fmt.Println(isContact) }6、 golang中的結構體和繼承 7、 golang中的接口 8、 golang中的空interface
類似于java中的object,空interface(interface{})不包含任何的method,正因為如此,所有的類型都實現了空interface。空interface對于
描述起不到任何的作用(因為它不包含任何的method),但是空interface在我們需要存儲任意類型的數值的時候相當有用,因為它可以存儲任意類型的數值。它有點類似于C語言的void*類型。
一個函數把interface{}作為參數,那么他可以接受任意類型的值作為參數,如果一個函數返回interface{},那么也
就可以返回任意類型的值。是不是很有用啊!
structs與interfaces不能具有相同的API,因為interfaces無法定義字段。這個問題并算很大,因為可以在接口中定義getter和setter方法,雖然這有點混亂。 eg:
10、Public和Private命名Golang將Python的public和private方法命名方案做了進一步發展。當我最初發現以大寫字母開頭的函數、結構體是public,而小寫開頭的則是private的時候, 感覺不可思議,但我很享受這種語法。
type PublicStructName struct {} //public 外部能調用 type privateStructName struct {} // 私有 結構體,僅內部函數能調用最后
今天就先到這里,golang語法很多,這里只是其中的冰山一角。如果大家想學習golang,我這里推薦:https://github.com/Unknwon/th...
閱讀更多
31道Android面試題 ,牢固你的基礎!
做后臺是選擇Java 、Go ,還是 PHP?
AndroidUtils:Android開發不得不收藏的Utils
美團面試題:Java-線程池 ThreadPool 專題詳解
相信自己,沒有做不到的,只有想不到的在這里獲得的不僅僅是技術!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98224.html
摘要:來我們一起感受下的風騷式的代碼風格。魔鬼式變量聲明數組的聲明就是數組,它的定義方式如下在中,表示數組的長度,表示存儲元素的類型。在開發中不定長度表示的數組全部都是。它有點類似于語言的類型。和命名將的和方法命名方案做了進一步發展。 最近想搞搞后臺開發,話說注意力就轉移到了公司用的golang。用Go做微服務比較方便,或許是因為golang強悍的語法吧,看到go的語法,自己已被深深的吸引。...
某熊的技術之路指北 ? 當我們站在技術之路的原點,未來可能充滿了迷茫,也存在著很多不同的可能;我們可能成為 Web/(大)前端/終端工程師、服務端架構工程師、測試/運維/安全工程師等質量保障、可用性保障相關的工程師、大數據/云計算/虛擬化工程師、算法工程師、產品經理等等某個或者某幾個角色。某熊的技術之路系列文章/書籍/視頻/代碼即是筆者蹣跚行進于這條路上的點滴印記,包含了筆者作為程序員的技術視野、...
摘要:網站功能結構規劃和基礎服務安裝為了快速的構建一個網站在這里我們采用飛哥的組件和的框架來做網站實戰首先我們需要做出一些基礎的規劃萬丈高樓平地起我們先來給他打下地基做一下簡單的模塊和基本的網站要素規劃一網站名字快新聞顧名思義就是要做到盡量簡短一 網站功能結構規劃和基礎服務安裝 為了快速的構建一個go web網站, 在這里, 我們采用 飛哥(fizzday) 的 gorose orm 組件和...
閱讀 1257·2021-10-11 10:57
閱讀 2044·2021-09-02 15:15
閱讀 1607·2019-08-30 15:56
閱讀 1194·2019-08-30 15:55
閱讀 1156·2019-08-30 15:44
閱讀 977·2019-08-29 12:20
閱讀 1320·2019-08-29 11:12
閱讀 1065·2019-08-28 18:29