34
golang基础--strcut结构体
source link: https://studygolang.com/articles/13616?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
-
结构体struct类似python语言中的类class,结构体类的元素可以是一个变量,或者函数或者其它的类型,好比python的属性和方法。
// struct结构体,类似python语言中的class类 package main import "fmt" type person struct { //定义一个strcut Name string Age int } func main() { a := person{} //赋值给一个变量a fmt.Println(a) a.Name = "faily" //为结构体赋值 a.Age = 28 fmt.Println(a) } /*输出结果 { 0} //空结构体时,int元素为0 {faily 28} */
-
简单的方式进行结构体的初始化
package main import "fmt" type person struct { //定义一个strcut Name string Age int } func main() { a := person{ //也可以这样初始化一个结构体 Name: "msy", Age: 27, } fmt.Println(a) }
-
struct也是一个
值类型
,也就是说传递的时候,拷贝的是值,正常途径无法改变结构内的值,需通过指针
的方式进行修改package main import "fmt" type person struct { //定义一个strcut Name string Age int } func main() { a := person{ //初始化结构体 Name: "msy", Age: 27, } fmt.Println("1", a) A(a) fmt.Println("3", a) B(&a) //指针引用 fmt.Println("4", a) } func A(per person) { // 参数引用person--结构体 per.Age = 13 //初始化person属性的值 fmt.Println("2", per) } func B(per *person){ //传递指针 per.Age =13 fmt.Println("2",per) } /*输出 初始化: 1 {msy 27} 修改A: 2 {msy 13} 修改失败: 3'{msy 27} 修改B: 2 {msy 13} 修改成功: 3"{msy 13} */
-
推荐结构体初始化时,使用结构体指针,修改的时候更加方便
package main import "fmt" type person struct { //定义一个strcut Name string Age int } func main() { a := &person{ //初始化结构体,建议使用结构的指针 Name: "msy", Age: 27, } a.Name = "MYF" //这种方式就可以直接修改结构体 fmt.Println("1", a) A(a) //此时就可以直接修改结构体 B(a) fmt.Println("3", a) } func A(per *person) { //传递指针 per.Age = 13 //初始化person属性的值 fmt.Println("2", per) } func B(per *person) { //传递指针 per.Age = 100 fmt.Println("2", per) } /*输出 1 &{MYF 27} 2 &{MYF 13} 2 &{MYF 100} 3 &{MYF 100} */
-
匿名结构:没有名字的结构
package main import "fmt" func main() { a := &struct { //指向结构体指针 Name string Age int }{ //直接初始化 Name: "moshaoying", Age: 27, } fmt。Println(a) } /*输出 &{moshaoying 27} */
-
嵌套匿名结构体,初始化方式
package main import "fmt" type person struct { //嵌套匿名结构 Name string Age int Content struct { Phone int Addr string } } func main() { a := person{Name: "moshaoying", Age: 22} a.Content.Phone = 13636269334 //嵌套匿名结构体初始化方式 a.Content.Addr = "shanxi,xian" fmt.Println(a) } /*输出 {moshaoying 22 {13636269334 shanxi,xian}} */
-
结构体比较: 命名是结构体的一部分,所以只有当结构体命名相同时才可以进行比较
package main import "fmt" type person struct { //嵌套匿名结构 Name string Age int } type person1 struct { Name string Age int } func main() { a := person{Name: "moshaoying", Age: 22} b := person1{Name: "moshaoying", Age: 22} c := person{Name: "moshaoying", Age: 22} d : = person{Name: "moshaoying", Age: 21} fmt.Println(a == b) fmt.Println(a == c) fmt.Println(a == d) } /*输出报错 a=b invalid operation: a == b (mismatched types person and person1) a=c true a=d false */
-
结构体没有python类的继承,但是结构体也会有类似的功能,结构体嵌套,达到继承其它结构体的属性
package main import "fmt" type human struct { Sex int } type person struct { //结构体继承(嵌套) human Name string Age int } func main() { a := person{Name: "failymao", Age: 22, human: human{Sex: 250}} //第一种方式,注意原理 fmt.Println(a) //第二种方式 a.Name = "allen" a.Age = 29 a.Sex = 222 fmt.Println(a) } /*输出报错 第一种方式: {{250} failymao 22} 第二种方式: {{222} allen 29} */
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK