欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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语言结构体的资料请关注其它相关文章!