Go语言中的特殊数据类型:自定义类型Type definition

2024-05-24 01:36

本文主要是介绍Go语言中的特殊数据类型:自定义类型Type definition,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 自定义类型是什么?
  • 2 自定义类型如何定义?
  • 3 自定义类型与其它数据类型是否可比较?
  • 4 自定义类型和类型别名的区别是什么?
  • 5 自定义类型的应用场景有哪些?
    • 5.1 绑定方法
    • 5.2 实现接口
    • 5.3 增加安全性
    • 5.4 增加代码可读性
  • 6 知识总结
  • 7 学习交流

1 自定义类型是什么?

在Go语言中,自定义类型是一种全新的数据类型,可以使用关键字type各种数据类型定义为自定义类型


2 自定义类型如何定义?

自定义类型的定义支持单个类型定义批量类型定义
语法结构:type 自定义类型名称 各种数据类型

  • 单个类型定义,也支持使用结构体struct{}
type num int
type str string
type success bool// 支持结构体struct{}
type Person struct{}

  • 批量类型定义
// 批量类型定义
type (num1 intnum2 int8num3 int16
)

3 自定义类型与其它数据类型是否可比较?

答案:,因为自定义类型是全新的数据类型,是不支持直接进行比较的。
若需要比较,我们采用类型转换的方法转换为其一样的数据类型,再进行比较。


  • 自定义类型不支持跟其他类型直接比较,代码示例如下:
// 给int新定义了类型:code
type code int  func TestDataTypeAlias(t *testing.T) {  var success code = 200  var success1 int = 200  // 报错: invalid operation: success != success1 (mismatched types code and int)    if success != success1 {  fmt.Println("因为%s和%s的数据类型不同,不能直接进行比较,需先转换成同一类型!")  } else {  fmt.Println("相同")  }  
}

4 自定义类型和类型别名的区别是什么?

  • 自定义类型:创建的是一个全新的类型,所以不可与原类型相互赋值和比较
  • 类型别名:是给现有类型创建一个新的名称,跟原数据类型是一样的,可以与原类型相互赋值和比较。Go语言中的特殊数据类型:类型别名Type Alias

// int定义新类型  
type code int  // int取别名  
type age = intfunc TestDataTypeAlias2(t *testing.T) {  var success int = 200  var success1 age = 200  var success2 code = 200  fmt.Printf("%v\n", success == success1) //因为类型取的是别名,其数据类型还是int,没有变化  fmt.Printf("%T\n", success)  fmt.Printf("%T\n", success1)  fmt.Printf("%T\n", success2)  fmt.Printf("%v\n", success == success2) //因为类型不同,所以不能比较,所以返回编译错误  
}

5 自定义类型的应用场景有哪些?

5.1 绑定方法

type Celsius float64 // 自定义类型Celsius绑定了方法String
func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) 
}

5.2 实现接口

自定义类型实现接口,使得类型更加灵活和模块化。

type Person struct{name string
}// 自定义类型:Person
func (p Person)GetName()string{return p.name
}

5.3 增加安全性

自定义类型可以防止不同数据类型之间的混淆

type GoodId int
type Code int
type Age int

5.4 增加代码可读性

自定义类型增加了代码的可读性,方便维护。
明确的自定义类型名称可以让代码更具有描述性,便于开发者理解。

// 自定义用户ID
type UserID int // 形参id的数据类型为自定义类型UserID,直到传入的形参ID为用户ID,增加代码可读性
func getUserByID(id UserID) User { // 实现代码 
}

6 知识总结

学习自定义类型后,我们了解到:
自定义类型其实是创建了一个全新的数据类型不可以与其他数据类型直接进行比较,需进行类型转换。
自定义类型采用type关键字进行定义,可以像其他数据类型一样进行操作。
如何区分自定义类型与类别别名
自定义类型的实际应用场景帮助我们更好地掌握了这一概念,提升代码的安全性、可读性和功能扩展性

7 学习交流

为了方便大家一起学习一起进步,我创建了一个学习交流的平台
感兴趣的朋友们可以加我微信:LH913582934,备注:CSDN

这篇关于Go语言中的特殊数据类型:自定义类型Type definition的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997001

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo