go语言的类型别名与类型定义

2023-12-10 05:20

本文主要是介绍go语言的类型别名与类型定义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

类型别名(Type Alias)

类型别名是Go 1.9版本添加的新功能主要用于解决代码升级,迁移中存在的类型兼容性问题

type MyAlias = SomeType
package mainimport "fmt"// 类型别名:将int取一个别名为MyInt
type MyInt = intfunc main() {var num1 MyInt = 5var num2 int = 10// MyInt类型和int类型是相同的类型,可以相互赋值而无需转换num1 = num2num2 = num1fmt.Println(num1, num2)         // 10 10fmt.Printf("num1: %T \n", num1) // num1: intfmt.Printf("num2: %T \n", num2) // num1: int
}

在这个例子中,MyIntint的别名,两者是同一个类型,因此他们可以互相赋值,不需要进行任何类型转换.MyInt类型只会在代码中存在,编译完成时,不会有MyInt类型

类型定义(Type Definition)

type NewType SomeType
package mainimport "fmt"// 类型定义: 创建一个全新类型,名为Feet,底层类型为float64
type Feet float64func main() {var distanceFeet Feet = 5.2var distanceFloat float64 = 10.5// 以下赋值会导致编译错误,因为类型定义创建了全新类型,需要显示转换//distanceFloat = distanceFeet Cannot use 'distanceFeet' (type Feet) as the type float64//distanceFeet = distanceFloat Cannot use 'distanceFloat' (type float64) as the type Feetfmt.Printf("distanceFeet: %T \n", distanceFeet)   // distanceFeet: main.Feetfmt.Printf("distanceFloat: %T \n", distanceFloat) // distanceFloat: float64
}

在这个例子中,Feetfloat64的全新类型,尽管底层类型相同,但它们在类型系统中被视为不同类型.因此,不能直接进行赋值,需要进行显示类型转换.Feet类型不止是在代码中存在,在编译阶段仍然存在

应用场景

  • 类型别名: 可以在需要将相同类型的不同命名用途区分开的情况下使用,例如将 type Email =stringtype Username = string区分开来
  • 类型定义: 可以用于需要严格类型控制的情况下,确保即使底层类型相同,也需要显示类型转换的场景,比如单位不同但底层类型相同的情况.

这篇关于go语言的类型别名与类型定义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO