Go语言中使用结构体和指针

本文详细介绍了Go语言中的结构体,包括结构体的声明、创建、字段的访问和赋值,以及如何创建带有默认值的结构体。此外,还讨论了结构体的嵌套、比较以及公有和私有值的概念。最后,文章探讨了指针引用和值引用的区别,解释了如何通过指针修改结构体的原始值。
摘要由CSDN通过智能技术生成

1.结构体是什么

        结构体是一系列具有指定数据类型的数据字段,能够通过单个变量引用一系列相关的值。通过使用结构体,可在单个变量中存储众多类型不同的数据字段。

下列程序声明并创建一个简单的结构体

package main

import (
	"fmt"
)

type Movie struct {
	Name   string
	Rating float32
}

func main() {
	m := Movie{
		Name:   "Citizen Kane",
		Rating: 10,
	}
	fmt.Println(m.Name, m.Rating)
}

程序解读如下:

  • 关键字type指定一种新类型
  • 将新类型的名称指定为Movie
  • 类型名右边是数据类型,这里为结构体
  • 在大括号内,使用名称和类型指定了一系列数据字段
  • 在main函数中,使用简短变量赋值声明并初始化了变量m,给数据字段指定的值为相应的数据类型
  • 使用点表示法访问数据字段并将其打印到控制台

程序运行结果如下所示:

Citizen Kane 10

 2.创建结构体

        声明结构体后,就可通过多种方式创建它。假设你已经声名了一个结构体,那么就可直接声明这种类型的变量。

type Movie struct {
	Name string
	Rating float32
}

var m Movie

        这将创建一个结构体实例,并将各个数据字段设置为相应数据类型的零值。如果要调试或查看结构体的值,可使用fmt包将结构体的字段名和值打印出来。可使用占位符%+v并将其传入结构体。

fmt.Printf("%+v\n",m)

这将把字段名和值打印到终端。创建结构体时,如果没有初始化,则Go将把每个数据字段设置为相应数据类型的零值。

{Name:Rating:0}

以这种方式创建结构体实例后,可使用点表示法给其字段赋值。

var m Movie
m.Name = "Metropolis"
m.Rating = 0.99

        结构体数据字段的值是可变的,也就是说可以动态地修改它们。但是结构体被声明或者实例被创建,就不能再修改其字段的数据类型了,否则将引发编译错误。

        下面程序示例创建了一个结构体并将其赋给一个变量,然后再给这个结构体的数据字段赋值。

package main

import (
	"fmt"
)

type Movie struct {
	Name   string
	Rating float32
}

func main() {
	var m Movie
	fmt.Printf("%+v\n", m)
	m.Name = "Metropolis"
	m.Rating = 0.9918
	fmt.Printf("%+v\n", m)
}

 程序解读如下:

  • 关键字var声明变量m
  • 没有给字段赋值,因此它们默认为零值。对于字符串,零值为空字符串“ ”;对于float32,零值为0。
  • 将字段的值打印到终端
  • 使用点表示法给结构体的数据字段赋值
  • 再次将结构体打印到终端,以证明其数据字段的值发生了变化

程序运行结果如下:

{Name: Ratin
  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mindfulness code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值