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学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

go rate 原生标准限速库的使用

《gorate原生标准限速库的使用》本文主要介绍了Go标准库golang.org/x/time/rate实现限流,采用令牌桶算法控制请求速率,提供Allow/Reserve/Wait方法,具有一定... 目录介绍安装API介绍rate.NewLimiter:创建限流器limiter.Allow():请求是否

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用