作為C語言家族的一員,go和c一樣也支持結構體。可以類比于java的一個POJO。
在上黨等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站設計、網站制作 網站設計制作定制網站,公司網站建設,企業網站建設,品牌網站設計,成都全網營銷,成都外貿網站建設,上黨網站建設費用合理。
在學習定義結構體之前,先學習下定義一個新類型。
新類型 T1 是基于 Go 原生類型 int 定義的新自定義類型,而新類型 T2 則是 基于剛剛定義的類型 T1,定義的新類型。
這里要引入一個底層類型的概念。
如果一個新類型是基于某個 Go 原生類型定義的, 那么我們就叫 Go 原生類型為新類型的底層類型
在上面的例子中,int就是T1的底層類型。
但是T1不是T2的底層類型,只有原生類型才可以作為底層類型,所以T2的底層類型還是int
底層類型是很重要的,因為對兩個變量進行顯式的類型轉換,只有底層類型相同的變量間才能相互轉換。底層類型是判斷兩個類型本質上是否相同的根本。
這種類型定義方式通常用在 項目的漸進式重構,還有對已有包的二次封裝方面
類型別名表示新類型和原類型完全等價,實際上就是同一種類型。只不過名字不同而已。
一般我們都是定義一個有名的結構體。
字段名的大小寫決定了字段是否包外可用。只有大寫的字段可以被包外引用。
還有一個點提一下
如果換行來寫
Age: 66,后面這個都好不能省略
還有一個點,觀察e3的賦值
new返回的是一個指針。然后指針可以直接點號賦值。這說明go默認進行了取值操作
e3.Age 等價于 (*e3).Age
如上定義了一個空的結構體Empty。打印了元素e的內存大小是0。
有什么用呢?
基于空結構體類型內存零開銷這樣的特性,我們在日常 Go 開發中會經常使用空 結構體類型元素,作為一種“事件”信息進行 Goroutine 之間的通信
這種以空結構體為元素類建立的 channel,是目前能實現的、內存占用最小的 Goroutine 間通信方式。
這種形式需要說的是幾個語法糖。
語法糖1:
對于結構體字段,可以省略字段名,只寫結構體名。默認字段名就是結構體名
這種方式稱為 嵌入字段
語法糖2:
如果是以嵌入字段形式寫的結構體
可以省略嵌入的Reader字段,而直接訪問ReaderName
此時book是一個各個屬性全是對應類型零值的一個實例。不是nil。這種情況在Go中稱為零值可用。不像java會導致npe
結構體定義時可以在字段后面追加標簽說明。
tag的格式為反單引號
tag的作用是可以使用[反射]來檢視字段的標簽信息。
具體的作用還要看使用的場景。
比如這里的tag是為了幫助 encoding/json 標準包在解析對象時可以利用的規則。比如omitempty表示該字段沒有值就不打印出來。
string是Go語言中的基礎數據類型。
聲明string變量非常簡單,常見的方式有以下兩種:
聲明一個空字符串后再賦值。
var s string。
s = "hello world"。
需要注意的是空字符只是長度為0,但不是nil。不存在值為nil的string。
使用簡短變量聲明:
s := "hello world" //直接初始化字符串。
雙引號與單引號。
字符串不僅可以使用雙引號賦值,也可以使用反單引號賦值,它們的區別是在于對特殊字符的處理。
假如我們希望string變量表示下面的字符串,它包括換行符和雙引號:
Hi。
this is "Steven"。
1。
2。
使用雙引號表示時,需要對特殊字符轉義,如下所示:
s:= "Hi, \nthis is \"Steven\"."。
1。
如果使用反單引號時,不需要對特殊符號轉義,如下所示:
s := Hi。
this is "Steven"。
需要注意的是,字符串拼接會觸發內存分配以及內存拷貝,單行語句拼接多個字符串只分配一次內存。比如上面的語句中,在拼接時,會先計算最終字符串的長度后再分配內存。
類型轉換:
項目中,數據經常需要在string和字節[]byte之間轉換。
for index,val := range a {
if val == '好' {
fmt.println(index,x)
}
}
對string做range得到的val是int32類型,直接用單引號比較就行
網站名稱:go語言不能用單引號 golang 單引號 雙引號
當前URL:http://vcdvsql.cn/article12/ddegsdc.html
成都網站建設公司_創新互聯,為您提供手機網站建設、關鍵詞優化、網站改版、動態網站、域名注冊、外貿建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯