Go语言基础结构体用法及示例详解
程序员文章站
2022-03-06 11:42:56
目录概述语法结构体定义的三种形式第一种【基本的实例化】第二种【指针类型的结构体】第三种【取结构体的地址实例化,通过&的操作】初始化结构体键值对初始化结构体值列表填充结构体匿名结构体访问结构体成...
概述
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合
语法
定义结构体【标识自定义结构体的名称,在同一个包内不能重复】
type 结构名 struct { 字段1: 字段1的值, 字段2: 字段2的值, ...... }
例子
//学生 type student struct { name string //姓名 age int //年龄 sex bool //性别 true:男 false:女 }
结构体定义的三种形式
第一种【基本的实例化】
var stu student
第二种【指针类型的结构体】
var stu *student = new(student)
第三种【取结构体的地址实例化,通过&的操作】
var stu *student = &student{}
初始化结构体
键值对初始化结构体
键值之间以:分隔;键值对之间以,分隔
变量名 := 结构体类型名{
字段1: 字段1的值,
字段2: 字段2的值,
......
}
例子
stu3 := student{ name: "李四", age: 18}
值列表填充结构体
没有字段,按着序列,必须全部填充
变量名 := 结构体类型名{
字段1的值,
字段2的值,
......
}
stu4 := student{ "王五", 18, true, }
匿名结构体
定义结构体时同时赋值
变量名 := struct{
字段1: 字段类型1,
字段2: 字段类型2,
......
}{
// 字段值初始化
字段1: 字段1的值,
字段2: 字段2的值,
......
}
stu5 := struct { name string age int }{ name: "王五", age: 18, }
访问结构体成员
赋值、访问都使用"."点这个符号
结构体.字段
var stu student stu.name="张三" //赋值 stu.age=18 stu.sex=true fmt.println(stu.age) //访问
结构体作为函数参数
func 函数名([结构体变量、结构体指针变量]){}
func printstudent(stu student) {} func printstudent(stu *student) {}
结构体指针
使用结构体指针访问结构体成员,使用 “.” 操作符。
var 变量名 *结构名
var stu1 *student = new(student) stu1.name = "李四" stu1.age = 20 stu1.sex = false
添加结构体方法
给结构体添加方法,在func和方法名之间加一个括号,加入该结构体的指针引用【也可以是值引用】
func ([结构体名]) 方法名([参数列表])[返回值列表]{}
例子
var stu student stu.name = "张三" stu.age = 18 stu.sex = false //调用 stu.sayhi() //添加结构体方法 func (stu student) sayhi() { fmt.println(stu.name, "hi") }
总结
golang是非面向对象语言,也可以说go语言中的结构体类似java中的类,但是很明显缺少继承多态等等oo的特性
指针变量通过.访问结构体成员,如果是c或者c++一定要通过*访问,这是go对它的一个优化
示例
package main import "fmt" //定义结构体【标识自定义结构体的名称,在同一个包内不能重复】 type student struct { name string age int sex bool } func main() { //struct定义的三种形式 var stu student stu.name = "张三" stu.age = 18 stu.sex = false fmt.println(stu) var stu1 *student = new(student) stu1.name = "李四" stu1.age = 20 stu1.sex = false fmt.println(stu1) var stu2 *student = &student{} stu2.name = "王五" stu2.age = 55 stu2.sex = true fmt.println(stu2) //初始化结构体 stu3 := student{ name: "李四", age: 18} fmt.println(stu3) stu4 := student{ "王五", 18, true, } fmt.println(stu4) //匿名结构体 stu5 := struct { name string age int }{ name: "王五", age: 18, } fmt.println(stu5) // printstudent(stu) printstudent(stu1) stu.sayhi() } //添加结构体方法 func (stu student) sayhi() { fmt.println(stu.name, "hi") } // func printstudent(stu student) { // fmt.println(stu.name, stu.age, stu.sex) // } func printstudent(stu *student) { fmt.println(stu.name, stu.age, stu.sex) }
以上就是go语言基础结构体用法及示例详解的详细内容,更多关于go语言结构体的资料请关注其它相关文章!