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

相关文章

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

C# dynamic类型使用详解

《C#dynamic类型使用详解》C#中的dynamic类型允许在运行时确定对象的类型和成员,跳过编译时类型检查,适用于处理未知类型的对象或与动态语言互操作,dynamic支持动态成员解析、添加和删... 目录简介dynamic 的定义dynamic 的使用动态类型赋值访问成员动态方法调用dynamic 的

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]