Go語言基礎結構體用法及示例詳解
概述
結構體是由一系列具有相同類型或不同類型的數據構成的數據集合
語法
定義結構體【標識自定義結構體的名稱,在同一個包內不能重復】
type 結構名 struct { 字段1: 字段1的值, 字段2: 字段2的值, ...... }
例子
//學生 type Student struct { Name string //姓名 Age int //年齡 Sex bool //性別 true:男 false:女 }
結構體定義的三種形式
第一種【基本的實例化】
var stu Student
第二種【指針類型的結構體】
var stu *Student = new(Student)
第三種【取結構體的地址實例化,通過&的操作】
var stu *Student = &Student{}
初始化結構體
鍵值對初始化結構體
鍵值之間以:分隔;鍵值對之間以,分隔
變量名 := 結構體類型名{
字段1: 字段1的值,
字段2: 字段2的值,
……
}
例子
stu3 := Student{ Name: "李四", Age: 18}
值列表填充結構體
沒有字段,按著序列,必須全部填充
變量名 := 結構體類型名{
字段1的值,
字段2的值,
……
}
stu4 := Student{ "王五", 18, true, }
匿名結構體
定義結構體時同時賦值
變量名 := struct{
字段1: 字段類型1,
字段2: 字段類型2,
……
}{
// 字段值初始化
字段1: 字段1的值,
字段2: 字段2的值,
……
}
stu5 := struct { Name string Age int }{ Name: "王五", Age: 18, }
訪問結構體成員
賦值、訪問都使用”.”點這個符號
結構體.字段
var stu Student stu.Name="張三" //賦值 stu.Age=18 stu.Sex=true fmt.Println(stu.Age) //訪問
結構體作為函數參數
func 函數名([結構體變量、結構體指針變量]){}
func printStudent(stu Student) {} func printStudent(stu *Student) {}
結構體指針
使用結構體指針訪問結構體成員,使用 “.” 操作符。
var 變量名 *結構名
var stu1 *Student = new(Student) stu1.Name = "李四" stu1.Age = 20 stu1.Sex = false
添加結構體方法
給結構體添加方法,在func和方法名之間加一個括號,加入該結構體的指針引用【也可以是值引用】
func ([結構體名]) 方法名([參數列表])[返回值列表]{}
例子
var stu Student stu.Name = "張三" stu.Age = 18 stu.Sex = false //調用 stu.sayHi() //添加結構體方法 func (stu Student) sayHi() { fmt.Println(stu.Name, "Hi") }
總結
golang是非面向對象語言,也可以說go語言中的結構體類似java中的類,但是很明顯缺少繼承多態等等OO的特性
指針變量通過.訪問結構體成員,如果是C或者C++一定要通過*訪問,這是Go對它的一個優化
示例
package main import "fmt" //定義結構體【標識自定義結構體的名稱,在同一個包內不能重復】 type Student struct { Name string Age int Sex bool } func main() { //struct定義的三種形式 var stu Student stu.Name = "張三" stu.Age = 18 stu.Sex = false fmt.Println(stu) var stu1 *Student = new(Student) stu1.Name = "李四" stu1.Age = 20 stu1.Sex = false fmt.Println(stu1) var stu2 *Student = &Student{} stu2.Name = "王五" stu2.Age = 55 stu2.Sex = true fmt.Println(stu2) //初始化結構體 stu3 := Student{ Name: "李四", Age: 18} fmt.Println(stu3) stu4 := Student{ "王五", 18, true, } fmt.Println(stu4) //匿名結構體 stu5 := struct { Name string Age int }{ Name: "王五", Age: 18, } fmt.Println(stu5) // printStudent(stu) printStudent(stu1) stu.sayHi() } //添加結構體方法 func (stu Student) sayHi() { fmt.Println(stu.Name, "Hi") } // func printStudent(stu Student) { // fmt.Println(stu.Name, stu.Age, stu.Sex) // } func printStudent(stu *Student) { fmt.Println(stu.Name, stu.Age, stu.Sex) }
以上就是Go語言基礎結構體用法及示例詳解的詳細內容,更多關於Go語言結構體的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Go 語言選擇器實例教程
- Golang 使用Map實現去重與set的功能操作
- Go語言中interface語法與使用詳解
- golang中按照結構體的某個字段排序實例代碼
- 詳解Golang語言中的interface