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) }