定義:是一種聚合的資料型別,是由零個或多個任意型別的值聚合成的實體。
成員:每個值稱為結構體的成員。
範例:
用結構體的經典案例處理公司的員工訊息,每個員工資訊包含一個唯一的員工編號、員工的名字、家庭住址、出生日期、工作、薪資、上級領導等等。所有的這些資訊都需要綁定到一個實體中,可以作為一個整體單元被複製,作為函數的參數或回傳值,或是被儲存到數組中,等等。
定義結構體:
type Employee struct { ID int Name string Address string DoB time.Time Position string Salary int ManagerID int }
定義變數:
var dilbert Employee
存取成員:
dilbert.Salary -= 5000
取成員位址:
position := &dilbert.Position *position = "Senior " + *position
點運算子與指向結構體的指標:
var employeeOfTheMonth *Employee = &dilbert employeeOfTheMonth.Position += " (proactive team player)"
成員定義順序:
通常一行對應一個結構體成員,成員的名字在前類型在後,不過如果相鄰的成員類型如果相同的話可以被合併到一行,就像下面的Name和Address成員那樣
type Employee struct { ID int Name, Address string DoB time.Time Position string Salary int ManagerID int }
成員命名規則:
如果結構體成員名字是以大寫字母開頭的,那麼該成員就是導出的;這是Go語言導出規則決定的。一個結構體可能同時包含匯出和未匯出的成員。
匯出意義:在其他套件中可進行讀寫。
一個命名為S的結構體類型將不能再包含S類型的成員:因為一個聚合的值不能包含它本身。 (這個限制同樣適應於陣列。)但是S類型的結構體可以包含*S指標類型的成員,這可以讓我們建立遞歸的資料結構,例如鍊錶和樹結構等。
type tree struct { value int left, right *tree }
結構體面值:
可以指定每個成員的值。
type Point struct{ X, Y int } p := Point{1, 2}
上面的是第一種寫法,要求以結構體成員定義的順序為每個結構體成員指定一個面值。也可以:
anim := gif.GIF{LoopCount: nframes}
以成員名字和對應的值來初始化,可以包含部分或全部的成員;在這種形式的結構體面值寫法中,如果成員被忽略的話將預設用零值。因為,提供了成員的名字,所有成員出現的順序並不重要。
注意:兩種不同形式的寫法不能混合使用。
結構體嵌入與匿名成員:
type Point struct { X, Y int } type Circle struct { Center Point Radius int } type Wheel struct { Circle Circle Spokes int }
存取每個成員:
var w Wheel w.Circle.Center.X = 8 w.Circle.Center.Y = 8 w.Circle.Radius = 5 w.Spokes = 20
在次簡化結構體定義:
type Circle struct { Point Radius int } type Wheel struct { Circle Spokes int }
得意於匿名嵌入的特性,我們可以直接存取葉子屬性而不需要給出完整的路徑:
var w Wheel w.X = 8 // equivalent to w.Circle.Point.X = 8 w.Y = 8 // equivalent to w.Circle.Point.Y = 8 w.Radius = 5 // equivalent to w.Circle.Radius = 5 w.Spokes = 20
結構體字面值必須遵循形狀類型聲明時的結構,所以只能用下面的兩種語法,它們彼此是等價的:
w = Wheel{Circle{Point{8, 8}, 5}, 20} w = Wheel{ Circle: Circle{ Point: Point{X: 8, Y: 8}, Radius: 5, }, Spokes: 20, // NOTE: trailing comma necessary here (and at Radius) }
結構體tag:
在結構體宣告中,Year和Color成員後面的字串面值是結構體成員Tag
type Movie struct { Title string Year int `json:"released"` Color bool `json:"color,omitempty"` Actors []string } var movies = []Movie{ {Title: "Casablanca", Year: 1942, Color: false, Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}}, {Title: "Cool Hand Luke", Year: 1967, Color: true, Actors: []string{"Paul Newman"}}, {Title: "Bullitt", Year: 1968, Color: true, Actors: []string{"Steve McQueen", "Jacqueline Bisset"}}, // ... }
這樣的資料結構特別適合JSON格式,在兩種之間相互轉換也很容易。將一個Go語言中類似movies的結構體slice轉為JSON的過程叫編組(marshaling)。編組透過呼叫json.Marshal函數完成:
data, err := json.Marshal(movies) if err != nil { log.Fatalf("JSON marshaling failed: %s", err) } fmt.Printf("%s\n", data)
Marshal函數回饋一個編碼後的位元組slice,包含很長的字串,並且沒有空白縮排;我們將它折行以便於顯示:
[{"Title":"Casablanca","released":1942,"Actors":["Humphrey Bogart","Ingr id Bergman"]},{"Title":"Cool Hand Luke","released":1967,"color":true,"Ac tors":["Paul Newman"]},{"Title":"Bullitt","released":1968,"color":true," Actors":["Steve McQueen","Jacqueline Bisset"]}]
其中Year名字的成員在編碼後變成了released,還有Color成員編碼後變成了小寫字母開頭的color。這是因為構體成員Tag所導致的。一個構體成員Tag是和在編譯階段關聯到該成員的元資訊字串:
Year int `json:"released"` Color bool `json:"color,omitempty"`
結構體的成員Tag可以是任意的字串面值,但通常是一系列用空格分隔的key :"value"鍵值對序列;因為值中含義雙引號字符,因此成員Tag一般用原生字串面值的形式書寫。
更多go語言知識請關注go語言教學專欄。
以上是go語言結構體詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang在实际应用中表现出色,以简洁、高效和并发性著称。1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Go語言的核心特性包括垃圾回收、靜態鏈接和並發支持。 1.Go語言的並發模型通過goroutine和channel實現高效並發編程。 2.接口和多態性通過實現接口方法,使得不同類型可以統一處理。 3.基本用法展示了函數定義和調用的高效性。 4.高級用法中,切片提供了動態調整大小的強大功能。 5.常見錯誤如競態條件可以通過gotest-race檢測並解決。 6.性能優化通過sync.Pool重用對象,減少垃圾回收壓力。

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

關於SQL查詢結果排序的疑惑學習SQL的過程中,常常會遇到一些令人困惑的問題。最近,筆者在閱讀《MICK-SQL基礎�...

golang ...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1
強大的PHP整合開發環境