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) }
寫法一:python
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) }