一.結構體有名屬性
package main
import "fmt"
func main(){
type Sb struct {
name string //屬性名,資料型別
age int //如果兩個屬性資料型別一樣可以name,age int
}
//他有兩個屬性不一定要兩個屬性都進行賦值
//位置進行傳參{"you",11}
//但是位置傳參必須所有屬性都傳進去
sb1 :=Sb{name:"you",age:11} //屬性名:屬性值
fmt.Println(sb1) //{you 11}
fmt.Println(sb1.name) //you
}
二.結構體匿名屬性
package main
import "fmt"
func main(){
type Sb struct {
string //資料型別
int
}
sb1 :=Sb{string:"you"}
fmt.Println(sb1) //{you 0}
fmt.Println(sb1.string) //you
}
三.結構體方法
package main
import "fmt"
type Sb struct {
}
//注意點不定義在main函式內
func (sb Sb) Speak() { //func (結構體物件 結構體型別) 方法名(){}
fmt.Println("嗯")
}
func main(){
wq :=Sb{}
wq.Speak()
}
四.結構體嵌套
type Hobby struct {
name string
id int
}
type Person struct {
name string
Hobby //結構體名稱
}
func main(){
a := Person{name: "p1",Hobby:Hobby{name:"LOL",id:1}}
fmt.Println(a.Hobby.name) //如果名字有重名需要.結構體.屬性
fmt.Println(a.id)//如果沒有重名屬性名會提升
//fmt.Println(a.Hobby.id)你同樣也可以這樣獲取
}
/*
個人理解可以把它理解成python中的類的繼承,比如A繼承B
type B struct {int}
type A struct {B}
但是也有不同之處,他兩個類中的名字一樣可以共存,而python中不行
*/
五.結構體為方法的引數且修改結構體的屬性
package main
import "fmt"
type Person struct {
name string
}
func ChangeName(p *Person,NewName string){ //如果不是改變原來的類只傳值可以穿結構體物件
(*p.name) = NewName //也可以寫成p.name=NewName
}
func main(){
a := Person{name: "p1"}
ChangeName(&a,"ywy")
fmt.Println(a.name)
}
六.結構體為方法的引數不修改結構體的屬性
package main
import "fmt"
type Person struct {
name string
}
func ChangeName(p Person,NewName string){
p.name = NewName
}
func main(){
a := Person{name: "p1"}
ChangeName(a,"ywy")
fmt.Println(a.name)
}
七.結構體型別斷言
寫法一:
package main
import "fmt"
type Person struct {
name string
}
func Test(a interface{}){
_,err :=a.(*Person)
if !err{
fmt.Println("是Person")
}
}
func main(){
a := Person{name: "p1"}
Test(a)
}
寫法二:
package main
import (
"fmt"
)
type Person struct {
name string
}
func Test(a interface{}) {
switch a.(type) { //如果要獲取a的物件就AStruct :=a.(type)
case Person:
fmt.Println("是Person")
default:
fmt.Println("不是Person")
}
}
func main() {
a := Person{name: "p1"}
Test(a)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59772.html
標籤:Go
上一篇:Go - 環境安裝
