GO语言基础教程14——结构体-结构体定义与实例化

简介: Go语言中通过struct来实现面向对象

GO语言基础教程14——结构体-结构体定义与实例化


GO语言基础教程14——结构体-结构体定义与实例化


Go语言中通过struct来实现面向对象


结构体定义


使用typestruct关键字来定义结构体,具体代码格式如下:

type 类型名 struct {
    字段名 字段类型
    字段名 字段类型
}

例如:

type person struct {
    name string
    age int
    city string
}

同样类型的字段也可以写在一行。

type person1 struct {
  name, city string
  age        int
}


结构体实例化


只有当结构体实例化时,才会真正地分配内存。也就是必须实例化后才能使用结构体的字段。结构体本身也是一种类型,我们可以像声明内置类型一样使用var关键字声明结构体类型。

var 结构体实例 结构体类型

基本实例化

type person struct {
  name string
  city string
  age  int
}
func main() {
  var p person
  p.name = "likuis"
  p.city = "福建"
  p.age = 18
        var p1 person
        p1 = person{
            name:"likuis",
            age:18,
            city:"福建",
        }
  fmt.Printf("p=%v\n", p)  //p={likuis 福建 18}
        fmt.Printf("p1=%v\n", p1)  //p1={likuis 福建 18}
}

我们通过.来访问结构体的字段(成员变量),例如p1.namep1.age等。


匿名结构体


在定义一些临时数据结构等场景下还可以使用匿名结构体。

var p2 = new(person)
fmt.Printf("%T\n", p2)     //*main.person
package main
import (
    "fmt"
)
func main() {
    var user struct{Name string; Age int}
    user.Name = "likuis"
    user.Age = 18
    fmt.Printf("%#v\n", user)
}


创建指针类型结构体


我们还可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址。

var p2 = new(person)
fmt.Printf("%T\n", p2)     //*main.person


取结构体的地址实例化


使用&对结构体进行取地址操作相当于对该结构体类型进行了一次new实例化操作。

p3 := &person{}
fmt.Printf("%T\n", p3)     //*main.person


结构体初始化


没有初始化的结构体,其成员变量都是对应其类型的零值。


使用键值对初始化

p := person{
  name: "likuis",
  city: "福建",
  age:  18,
}

当某些字段没有初始值的时候,该字段可以不写。此时,没有指定初始值的字段的值就是该字段类型的零值。


使用值的列表初始化


初始化结构体的时候可以简写,也就是初始化的时候不写键,直接写值:

p := person{
  "likuis",
  "福建",
  18,
}


结构体内存布局


结构体占用一块连续的内存,(在 Go 中恰到好处的内存对齐)

相关文章
|
15天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
58 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
103 71
|
1月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
107 67
|
10天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
46 12
|
13天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
21 0
|
27天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
42 7
|
1月前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
106 62
|
1月前
|
存储 Go
go语言中映射
go语言中映射
39 11
下一篇
开通oss服务