专业做app下载网站,国外平面设计欣赏网站,wordpress 百度ping,seo搜索引擎优化简历结构体
结构体定义 在之前学过的数据类型中#xff0c;数组与切片#xff0c;只能存储同一类型的变量。若要存储多个类型的变量#xff0c;就需要用到结构体#xff0c;它是将多个任意类型的变量组合在一起的聚合数据类型。 每个变量都成为该结构体的成员变量。 可以理…结构体
结构体定义 在之前学过的数据类型中数组与切片只能存储同一类型的变量。若要存储多个类型的变量就需要用到结构体它是将多个任意类型的变量组合在一起的聚合数据类型。 每个变量都成为该结构体的成员变量。 可以理解为 Go语言 的结构体struct和其他语言的class有相等的地位但是Go语言放弃大量面向对象的特性所有的Go语言类型除了指针类型外都可以有自己的方法,提高了可扩展性。在 Go 语言中没有没有 class 类的概念只有 struct 结构体的概念因此也没有继承。 结构体的声明
type 结构体名 struct {属性名 属性类型属性名 属性类型
}eg
type Student struct{name stringage intgender stringdeskmate *Studentroomate *Student
}注意事项
最后一个字段和右括号不在同一行时要加引号在同一行时不加引号
//正确写法zhangsan : Student{name:小明,age:18,gender: male,}/* 或者zhangsan : Student{name:小明,age:18,gender: male}*//* 错误写法zhangsan : Student{name:小明,age:18,gender: male}*/字段名初始化时要么全写要去全不写不能有的写有的不写
/* 指定字段名的初始化正确形式zhangsan : Student{name:小明,age:18,gender: male,} *///未指定字段名的初始化正确形式zhangsan : Student{小明,18,male,nil,nil,}初始化结构体并不一定所有字段都赋值未被赋值的字段会自动赋值为其类型的零字段。 但是只有通过指定字段名才可进行部分赋值不指定字段名会报错。 eg:错误的写法
zhangsan : Student{小明,18,male,}绑定方法
Golang中我们无法在结构体内定义方法需要使用组合函数的方式来定义结构体方法。 eg: type Student struct{name stringage intgender stringdeskmate *Studentroomate *Student
}//定义和结构体有关的方法
func (stu Student) StudentPrint(){fmt.Printf(名字%s\n,stu.name)fmt.Printf(年龄%d\n,stu.age)fmt.Printf(性别%s\n,stu.gender)
}
func main() {zhangsan : Student{小明,18,male,nil,nil,}/*名字小明年龄18性别male */zhangsan.StudentPrint()
}方法的参数传递方式
那我们如何进行选择呢以下几种情况应当直接使用指针做为方法的接收者。 你需要在方法内部改变结构体内容的时候 出于性能的问题当结构体过大的时候 (因为指针大小相对于传值调用方式要求将参数的一份拷贝传递给函数花费的开销较小。) 有些情况下以值或指针做为接收者都可以但是考虑到代码一致性建议都使用指针做为接收者。
不管你使用哪种方法定义方法指针实例对象、值实例对象都可以直接调用而没有什么约束。这一点Go语言做得非常好。
当想在方法内改变实例的属性的时候必须使用指针作为方法的接收者
func (stu *Student) changeage(){stu.age 1
}结构体的嵌套 由于Golang中无继承的实现所以结构体的嵌套可以代替实现继承。 使用方法:将嵌套的结构体作为一个匿名字段 type Student struct{name stringage intgender stringdeskmate *Studentroomate *Student//匿名字段school
}
type school struct{schoolarea stringschoolmj string
}
func main() {new_un : school{东南大学,10000,}zhangsan : Student{小明,18,male,nil,nil,new_un,}fmt.Println(zhangsan.school)
}方法权限
在 Go 语言中函数名的首字母大小写非常重要它被来实现控制对方法的访问权限。 当方法的首字母为大写时这个方法对于所有包都是Public其他包可以随意调用 当方法的首字母为小写时这个方法是Private其他包是无法访问的。
结构体初始化 func main() {//1.直接赋值实例化zhangsan : Student{小明,18,male,nil,nil,}//2.使用new实例化ls : new(Student)ls.name lisi//3.使用var实例化var ww Student;ww.name 王五fmt.Println(zhangsan.name)fmt.Println(ls.name)fmt.Println(ww.name)/* 小明lisi王五 */
}结构体的构造函数
Golang语言的结构体没有构造函数我们可以自己实现。 例如下方的代码就实现了一个person的构造函数。 因为struct是值类型如果结构体比较复杂的话值拷贝性能开销会比较大所以该构造函数返回的是结构体指针类型。 func gz(name string,age int, gender string) *Student{return Student{name: name,age: age,gender: gender,}
}func main() {zhangsan : gz(zahngsan,19,男)
}