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

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

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

收录于:157天前

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

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的别名,赋予新的意义。

. . .

相关推荐

额外说明

JS键盘键值

每次写“JS监测某个键的动作”的功能时总要百度下它的键值,写的次数多了就觉得挺麻烦的,这里弄个汇总,汇总一下常用键盘结构各个键的键值。 序号 键值 对应于键盘键 说明     功能键   1 27 Esc 退出键 2 8 BackSpace 退格键 3

额外说明

STM32CubeIDE调用不同的ld文件

不同配置调用不同的LD文件。 App配置选择“STM32L071RBTX_FLASH_App.ld” Debug、Release配置选择“STM32L071RBTX_FLASH_All.ld”

额外说明

Java快速开发框架_若依——Ruoyi-SpringCloud版本-5.启动前端

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

shiro-springboot-基础工程创建

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

day44_springboot2

01-SpringBoot高级-今日内容 SpringBoot自定配置 SpringBoot事件监听 SpringBoot流程分析 SpringBoot监控 SpringBoot部署 02-SpringBoot自动配置-Condition-1 Condi

额外说明

【c语言】 指针 字符串赋值

前言: 通过指针的方式,实现字符串的赋值并输出 Code: #include<stdio.h> int main(){ char *c; c="This is a string"; printf("%s", c); } 结果: ps: 1、这

额外说明

Spark基础学习笔记31:Kafka分布式消息系统

文章目录 零、本讲学习目标 一、Kafka概述 (一)什么是Kafka (二)Kafka中的基本概念 1、消息(Message) 2、服务器节点(Broker) 3、主题(Topic) 4、分区(Partition) 5、生产者(Producer) 6、

额外说明

Java案例:基于TCP的简单聊天程序

文章目录 一、如何实现TCP通信 二、编写C/S架构聊天程序 (一)编写服务器端程序 - Server.java (二)编写客户端程序 - Client.java (三)测试服务器端与客户端能否通信 (四)程序优化思路 - 服务器端采用多线程 一、如何实

额外说明

C++ XML解析 使用Mini-XML

C++ XML解析 使用Mini-XML  先下载Mini-XML, http://www.minixml.org/ 编译安装: ./configure --prefix=/foo  make make install 然后复制 安装目录的lib中 li

额外说明

随心推正价起号,实操随心推投放策略

标题:《解密“随心所欲推”广告策略:有效实践与优化技巧》 文章: 导读:如今,营销领域“随心所欲推”的广告策略越来越受到企业和广告从业者的关注。本文将深入探讨“随心所欲推”广告策略的有效实用方法和优化技巧,帮助您在广告上取得更好的效果。无论这是您第一次尝

ads via 小工具