結構體型別的字面量由關鍵字type、型別名稱、關鍵字struct,以及由花括號包裹的若干字段宣告組成。type person
struct
person鍵值對的順序與其型別中的字段宣告完全相同的話,我們還可以統一省略掉所有欄位的名稱
person
結構體型別的值字面量時可以只對它的部分字段賦值,甚至不對它的任何字段賦值。這時,未被顯式賦值的字段的值則為其型別的零值。
上述情況下,欄位的名稱是不能被省略的。
匿名結構體編寫乙個結構體值的字面量時不需要先擬好其型別。這樣的結構體字面量被稱為匿名結構體。
與匿名函式類似,我們在編寫匿名結構體的時候需要先寫明其型別特徵(包含若干字段宣告),再寫出它的值初始化部分。
p := struct
匿名結構體最大的用處就是在內部臨時建立乙個結構以封裝資料,而不必正式為其宣告相關規則。
而在涉及到對外的場景中,我強烈建議使用正式的結構體型別。
結構體型別可以擁有若干方法(注意,匿名結構體是不可能擁有方法的)所謂方法,其實就是一種特殊的函式。它可以依附於某個自定義型別。
方法的特殊在於它的宣告包含了乙個接收者宣告。
這裡的接收者指代它所依附的那個型別。名為grow的方法的宣告:
func (person *person) grow()
p := person
p.grow()
最後,結構體型別屬於值型別。它的零值並不是nil,而是其中欄位的值均為相應型別的零值的值。
結構體型別person的零值若用字面量來表示的話則為person{}。
package mainimport (
"fmt")
type persion
struct
type student
struct
func main() , 1, 100, "
201 room
", "xx"
} fmt.println(xiaoming)
//可直接使用匿名物件的型別
fmt.println(xiaoming.int
)
//自動推導
xiaofang := student, 1, 100, "
401 room
", "xx"
} fmt.println(xiaofang)
//指定成員初始化
s3 := student}
fmt.println(s3)
s4 := student
fmt.println(s4)
}
type student structfunc main() }
fmt.println(xiaoming.name)
//方式2
varxiaofang student
xiaofang.persion = new
(persion)
xiaofang.persion.name = "
xiaofang
"fmt.println(xiaofang.persion.name)
}
//帶有接收者的方法叫成員函式
func (p persion) printname()
//指標接收者
func (p *persion) setname(str string
) func main()
p.printname()
(&p).setname("
xiaof")
p.printname()
}
Go 結構體,結構體指標和方法
結構體 講乙個或多個變數組合到一起形成新的型別,這個型別就是結構體,結構體是值型別 定義結構體和賦值 learn go main.go package main import fmt type people struct func main fmt.printf p peo 0x110040f0 賦...
go 修改結構體方法 go結構體方法
golang中的方法是作用在特定型別的變數上,因此自定義型別,都可以有方法,而不僅僅是struct。定義格式 func var struct name funcname var0,var1.return type package main import fmt type test struct na...
go 結構體指標方法與結構體方法的區別
package main import fmt type person struct func v person modifyname name string func main xiaoming.modifyname 小李 fmt.println xiaoming.name 輸出結果如下 c us...