小工具      在线工具  汉语词典  css  js  c++  java

Go type关键字定义新类型和类型别名的区别

Go,golang,开发语言,后端 额外说明

收录于:102天前

类型关键字重定义和类型别名之间有很大的区别。前者是新定义一个数据类型,后者是重命名该类型。

type NewString string

type OldString = string

type NewString string声明了一个NewString类型,和string具有完全一致的数据结构,确实两种类型。这样有什么好处是使新的类型可以扩充和延展。

在Go语言中,只能在同一个包下定义方法,不能为其他包中的类型定义方法,如下:

在这里插入图片描述

需要通过类型定义来在新的包中对类型进行扩展。例如如果需要对所有的string类型做更改,比如加一个666后缀。如果不用新类型就需要在每个string类型后面+"666"的操作,还有一种方法是在string包下添加一个方法,如下:

在这里插入图片描述
不能定义其他包中类型的方法,这使切换到string包下,看以看到官方都是用到这种定义方式:

在这里插入图片描述

在这个类下添加上面的add666方法显然是不合适的,因为包里充满了类型定义,添加方法是多余的;另外,该方法只是一次性要求,不是通用方法,不能添加到此包中。

type关键字的类型定义就可以完美解决该问题,首先类型定义和原类型完全一致,其次在任意包下新定义类型,就可以为其扩展方法。于是之前无法完成的任务就可以使用下面方法完成:

package main

type NewString string

func main() {
    
	var a NewString
	println(a.add666("xiaoxu"))
}

func (self NewString) add666(str string) string {
    
	return str + "666"
}

NewString string是完全一样的类型。

类型和类型方法可以通过类型定义来分隔,并且可以分隔特定类型的方法。无需将所有非通用方法编写在一个包中。

type OldString = string为类型起一个别名,其主要作用有简化书写,赋予实际意义。例如在go语言中任意类型为空接口,但是空接口inteface{}写起来比较复杂使用any代替简化书写。

在这里插入图片描述

在内置的类型中使用byte作为unit8的别名,赋予新的意义。

. . .

相关推荐

额外说明

JAVA集合05_Collection.toMap()应用,三个重载方法,解决重复键问题

文章目录 ①. Collectors.toMap介绍 ②. Collectors.toMap有三个重载方法 ③. 收集一下属性和对象本身 ④. 常见的java.lang.IllegalStateException: Duplicate key问题处理 ①

额外说明

Vue —— 进阶 vue-router 路由(零)(路由的概念、基本使用)

Vue2.x 系列文章目录 内容 参考链接 Vue2.x - 基础 Vue2.x - 基础 Vue2.x - 进阶 Vue2.x - 进阶脚手架 Vue2.x - 高级 Vuex Vuex概念、工作原理、环境搭建、基本使用、getters Vue2.x

额外说明

12.tornado操作之使用Bootstrap美化项目(Bootstrap的使用及font- awesome插件的使用)+ 静态文件的处理

目录: 使用 Bootstrap 前端框架 1.引言: (1)Bootstrap 是什么? (2)为什么要用 Bootstrap? (3)怎么使用 (4)关于本项目使用Bootstrap: 2.真枪实战——本项目中使用Bootstrap: (1)预先配置

额外说明

【C++11】C++多线程之条件变量,异步启动任务(1)

文章目录 前言 一、condition_varible 1、condition_varible的使用 2、condition_varible一个问题及解决 作业 二、异步任务async,future 1、async的使用 2、future的使用 1、fu

额外说明

mysql金额小写转大写

create function to_china_num(MONEY decimal(14, 2)) returns varchar(150) BEGIN declare RV_MONEY0 VARCHAR(20); declare RV_MONEY

额外说明

SeaFormer实战:使用SeaFormer实现图像分类任务(二)

文章目录 训练部分 导入项目使用的库 设置随机因子 设置全局参数 图像预处理与增强 读取数据 设置Loss 设置模型 设置优化器和学习率调整算法 设置混合精度,DP多卡,EMA 定义训练和验证函数 训练函数 验证函数 调用训练和验证方法 运行以及结果查看

额外说明

剑指offer 66. 机器人的运动范围

描述 地上有一个rows行和cols列的方格。坐标从 [0,0] 到 [rows-1,cols-1]。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于threshold的格子。 例

额外说明

面试官:可以谈谈乐观锁和悲观锁吗

什么是悲观锁和乐观锁 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。它们的使用是非常广泛的,不局限于某种编程语言或数据库。乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各

额外说明

CSS:页面美化和布局控制

目录 CSS概念 好处 CSS的使用:CSS与html结合方式 内联样式 内部样式 外部样式 CSS语法 选择器:筛选具有相似特征的元素 基础选择器 扩展选择器 属性 案例:注册页面 CSS概念 CSS全称 Cascading Style Sheets

额外说明

【Jmeter】报错解决:ERROR: java.net.ConnectException: Connection timed out

目录 一、Linux 服务器端 二、Jmeter 客户端 三、运行 Jmeter perfMon 插件报错 (1)报错详情

ads via 小工具