当前位置:网站首页>【go语言入门笔记】13、 结构体(struct)
【go语言入门笔记】13、 结构体(struct)
2022-08-04 05:28:00 【不负卿@】
提示:Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。
Go语言的结构体与“类”都是复合结构体,但Go语言中结构体的内嵌配合接口比面向对象具有更高的扩展性和灵活性。
Go语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法。
结构体(struct) 是Go语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。
对象思维:结构体和结构体成员,来描述真实世界的实体和实体对应的各种属性。
结构体成员:由一系列的成员变量构成,这些成员变量也被称为“字段”。
字段有以下特性:
- 字段拥有自己的类型和值。
- 字段名必须唯一。
- 字段的类型也可以是结构体,甚至是字段所在结构体的类型。
1、 定义结构体
结构体的定义格式如下:
type 结构体变量名 struct{
字段1 字段1数据类型
字段2 字段2数据类型
}
例:
package main
import (
)
func main() {
type zhangsan struct{
name string
age int
addr,tel string //也可以写到一行
}
}
2、实例化结构体
2.1 基本的实例化形式
例:
package main
import (
"fmt"
)
func main() {
type user struct {
name string
age int
addr, tel string //也可以写到一行
}
var u user //实例化结构体到变量u
u.name = "张三" //给各个字段/成员变量赋值
u.age = 30
u.tel = "0931-6666666"
u.addr = "甘肃省兰州市"
fmt.Println(u)
}
运行结果:
2.2 new关键字实例化
语法: 实例化变量名 := new(结构体名)
通过该方法实例化后,实例属于指针类型结构体
例:
package main
import (
"fmt"
)
func main() {
type user struct {
name string
age int
addr, tel string //也可以写到一行
}
u := new(user)
u.name = "张三"
u.age = 30
u.tel = "0931-6666666"
u.addr = "甘肃省兰州市"
fmt.Println(u)
}
运行结果:
2.3 取结构体的地址实例化
例:
package main
import (
"fmt"
)
func main() {
type user struct {
name string
age *int
addr, tel string //也可以写到一行
}
nianling := 30
u := &user{
} //对结构体取地址实例化
u.name = "张三"
u.age = &nianling
u.tel = "0931-6666666"
u.addr = "甘肃省兰州市"
fmt.Println(u)
}
运行结果:
3、初始化匿名结构体
匿名结构体没有类型名称,无须通过type关键字定义就可以直接使用。
匿名结构体定义格式和初始化写法:
- 匿名结构体的初始化写法由结构体定义和键值对初始化两部分组成。
- 结构体定义时没有结构体类型名,只有字段和类型定义。
- 键值对初始化部分由可选的多个键值对组成。
例:
package main
import (
"fmt"
)
func main() {
var u struct {
name string
age int
}
u.age = 30
u.name = "张三"
fmt.Println(u)
}
边栏推荐
猜你喜欢
随机推荐
Set集合与Map集合
oracle的number与postgresql的numeric对比
自己学习爬虫写的基础小函数
flink-sql大量使用案例
跨域问题的解决
记录获取参赛选手信息过程
自动化运维工具Ansible(7)roles
Kubernetes基本入门-概念介绍(一)
Lombok的一些使用心得
对象存储-分布式文件系统-MinIO-2:服务端部署
ISCC2021——web部分
自动化运维工具Ansible(2)ad-hoc
WARNING: sql version 9.2, server version 11.0.Some psql features might not work.
npm install dependency error npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfonpm ERR! errno ENOTFOUND
Commons Collections1
SQl练习 2022/6/29
NFT市场以及如何打造一个NFT市场
剑指 Offer 2022/7/9
oracle临时表与pg临时表的区别
flink-sql所有语法详解