【go语言基础】结构体struct

这篇具有很好参考价值的文章主要介绍了【go语言基础】结构体struct。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主要是敲代码,敲的过程中会慢慢体会。

1.概念

结构体是用户定义的类型,表示若干字段的集合,目的是将数据整合在一起。

简单的说,类似Java中的实体类。存储某个实体属性的集合。

2.结构体声明

注意:结构体名字,结构体属性名的首字母大写代表其余的包可以访问该结构体,类似Java中的public公有属性。

如果,结构体的名字首字母或者属性首字母是小写,其余的包不能访问该结构体,类似于Java中的private私有属性。

type 结构体名字 struct{
    属性名 数据类型
    属性名 数据类型
    ......
}

结构体的声明,相同类型的可以放到一行。

type Employee struct {
    firstName string
    lastName  string
    age       int
}

​
type Employee struct {
    firstName,lastName  string
    age                 int
}

3.结构体初始化

结构体初始化有多种方式。直接看代码吧,有注释。

// Employee 结构体
type Employee struct {
	firstname, lastname string
	age                 int
}

// 测试结构体
func testStruct() {
    // 方式一:把属性写出来,键值对
	emp1 := Employee{
		firstname: "Sam",
		lastname:  "Jam",
		age:       18,
	}
	fmt.Println("Employee 1 is ", emp1)
    
    // 方式二:不写属性名,但是要和结构体中的属性顺序一一对应,以及属性的数量是不能缺少的
	emp2 := Employee{
		"Sam",
		"Com",
		20,
	}
	fmt.Println("Employee 2 is ", emp2)
    
    // 方式三:匿名结构体,并且赋值
	emp3 := struct {
		name string
		age  int
	}{
		name: "Rose",
		age:  20,
	}
	fmt.Println("Employee 3 is ", emp3)
    
    // 空结构体
	var emp4 Employee
	fmt.Println("Employee 4 is ", emp4)
    
    // 获取结构体的某个属性直接是结构体初始化对象.属性名
	emp5 := Employee{
		firstname: "z",
		lastname:  "ee",
	}
	fmt.Println("Employee 5 is ", emp5)
	fmt.Println("获取实例的属性:", emp5.lastname)
    
	var emp6 Employee
	emp6.age = 22
	emp6.firstname = "xiao"
	fmt.Println("Employee 6 is ", emp6)
    
    // 结构体指针,也就是指向结构体的指针
	emp8 := &Employee{
		firstname: "name",
		lastname:  "xing",
		age:       22,
	}

    // 下面这两种方式都行,go内直接隐式解引用,直接调用。
	// 显式解引用
	fmt.Println("FirstName:", (*emp8).firstname)
	// 隐式解引用
	fmt.Println("lastName", emp8.age)
}

3.结构体的嵌套

结构体的嵌套就是在一个结构体中属性的数据类型,是另一个结构体。另一个结构体中的属性可以直接被访问到。

举例:

type Address struct {
	city, state string
}

type Student struct {
	name    string
	age     int
    
    // 以另一个结构体作为数据类型
	address Address
}

func TestUpStruct() {
	var police Police
	police.name = "China"
	police.Address = Address{
		city:  "中国",
		state: "四川",
	}
	// 提升字段,匿名结构体在另一个结构体中,叫提升字段,外部结构体可以直接访问内部结构体中的属性,和外部结构体中的属性一样的
	fmt.Println("Name:", police.name)
	fmt.Println("city:", police.city)
	fmt.Println("state:", police.state)
}

4.结构体指针

首先它是一个指针,是指向结构体的指针。初始化的时候,可以取结构体的地址。看代码。

func testStudent() {
    // 取结构体的地址进行初始化
	stuInfo1 := &Student{
		name: "zhangsan",
		age:  18,
		address: Address{
			city:  "nanjing",
			state: "江宁区",
		},
	}
	// 小细节问题:当初始化结构体为指针类型,输出结构体会带&符号
	// 如果使用初始化的变量获取属性,就没有&符号
	fmt.Println("stuInfo 1 is ", stuInfo1)
	fmt.Println("stuAge 1 is ", stuInfo1.age)

	var stuInfo2 Student
	stuInfo2.name = "lisi"
	stuInfo2.age = 22
	stuInfo2.address = Address{
		city:  "深圳",
		state: "南山区",
	}
	fmt.Println("stuInfo 2 is ", stuInfo2)
}

5.结构体的导入

指的是可以导入其他包中的结构体,但是结构体的名字首字母需要大写,结构体中的属性名也需要大写。

package structs

// Spec 电脑配置规格,结构体名首字母大写开头,说明其它的包可以的访问到,结构体中的属性也是一样的。
type Spec struct { // exported field
	Maker string // exported field
	Model string // unexported field
	Price int    // exported field
}
// 导出结构体和字段,结构体以大写字母开头的,go中其他的包也可以直接访问
func testOutStruct() {
	var spec structs.Spec
	spec.Maker = "联想"
	spec.Price = 10893
	spec.Model = "2222"
	fmt.Println("Spec:", spec)
}

6.结构体的相等

如果两个结构体对象中的属性以及属性的值是相等的,那么这两个结构体是相等的。

// 测试结构体是否相等,两个结构体对应的属性相等,那么这个结构体是相同的
func testCat() {
	cat1 := cat{
		name: "huahua",
		age:  2,
	}
	cat2 := cat{
		name: "huahua",
		age:  2,
	}
	if cat1 == cat2 {
		fmt.Println("cat1 == cat2")
	} else {
		fmt.Println("cat != cat2")
	}
}

注意:相等的比较不能是map,map是不能判断相等。看例子:

func testkeyVal() {
	k1 := keyVal{
		m: map[int]int{
			1: 2,
		},
	}
	k2 := keyVal{
		m: map[int]int{
			1: 2,
		},
	}
	fmt.Println("k1 :", k1, " k2 :", k2)
	/*if k1 == k2 {
		fmt.Println("k1 == k2")
	} else {
		fmt.Println("map 类型的结构体属性是不能够比较的")
	}*/
}

结构体需要掌握以下点:

1.结构体的定义

2.结构体的名字首字母大小写,属性名大小写

3.结构体的初始化,各种初始化方式

4.结构体指针

5.结构体嵌套

6.结构体的导入文章来源地址https://www.toymoban.com/news/detail-640336.html

到了这里,关于【go语言基础】结构体struct的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 100天精通Golang(基础入门篇)——第5天: Go语言中的数据类型学习

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月08日
    浏览(44)
  • 【Go 基础篇】Go语言结构体详解:打开自定义类型的大门

    嗨,Go语言学习者们!在编程的世界里,数据是核心,而结构体(Struct)是一种能够帮助我们更有组织地存储和操作数据的重要工具。在本篇博客中,我们将深入探讨Go语言中结构体的概念、定义、初始化、嵌套、方法以及与面向对象编程的关系,带你逐步领略结构体的魅力。

    2024年02月10日
    浏览(45)
  • 100天精通Golang(基础入门篇)——第15天:深入解析Go语言中函数的应用:从基础到进阶,助您精通函数编程!(进阶)

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月12日
    浏览(66)
  • 100天精通Golang(基础入门篇)——第12天:深入解析Go语言中的集合(Map)及常用函数应用

    🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批

    2024年02月12日
    浏览(47)
  • 【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

    在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。 除了这些基本信息之外,Go 还提供了 struct tags,它可以用来指定 struct 中每个字段的元信息。 在本文中,我们将探讨为什

    2024年02月15日
    浏览(74)
  • Go语言入门6(struct 结构体)

    ​结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员 type + 结构体名 + struct + {成员列表} ​⭐如果结构体成员名字是以大写字母开头的,那么该成员就是导出的。这是Go语言导出规则决 定的。一个结构体可能同时包含导出和

    2023年04月12日
    浏览(39)
  • Go语言结构体struct详解,Go空结构体的这些妙用你知道吗?

    本文详解了Go语言结构体的各个知识点,最后介绍了空结构体的3种妙用。希望对你有帮助。 结构体,是一种自定义的数据类型,由多个数据类型组合而成。用于描述一类事物相关属性 。 定义方式 : 结构体和结构体指针,两者的实例化有所区别 提供多种写法,灵活使用:

    2024年02月01日
    浏览(46)
  • 【go语言基础】go中的方法

    先思考一个问题,什么是方法,什么是函数? 方法是从属于某个结构体或者非结构体的。在func这个和方法名中间加了一个特殊的接收器类型,这个接收器可以是结构体类型的或者是非结构体类型的。从属的结构体获取该方法。 函数则没有这种从属关系。 小结: 大多

    2024年02月13日
    浏览(31)
  • 小白学Go基础01-Go 语言的介绍

    Go 语言对传统的面向对象开发进行了重新思考,并且提供了更高效的复用代码的手段。Go 语言还让用户能更高效地利用昂贵服务器上的所有核心,而且它编译大型项目的速度也很快。 Go 语言开发团队花了很长时间来解决当今软件开发人员面对的问题。开发人员在为项目选择语

    2024年02月10日
    浏览(39)
  • Go语言基础

    参考书籍《Go程序设计语言》 学习Go语言基础,并记录相关知识和代码。 创建helloworld.go 输出命令行参数 使用range简化 使用Join简化 版本二,文件与命令行 go 可以方便的创建服务器,并且有并发性。 Go并发获取多个URL 简单服务器 带有并发锁的计数服务器 显示相关协议与表单

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包