当前位置: 首页 > news >正文

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

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

type NewString stringtype OldString = string

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

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

在这里插入图片描述

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

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

在这里插入图片描述

在该类下添加上述add666方法显然使不合适的,因为该包下全是类型定义,再添加方法显得很冗余;另外这个方法只是一次性需求不是通用性方法也不能添加再该包下。

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

package maintype NewString stringfunc main() {var a NewStringprintln(a.add666("xiaoxu"))
}func (self NewString) add666(str string) string {return str + "666"
}

NewString string是完全一样的类型。

通过类型定义将类型和类型的方法可以分开,特定类型的方法分隔开来,不用将非通用性的方法全写在一个包下。

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

在这里插入图片描述

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

相关文章:

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

type关键字再定义类型和类型别名有很大的区别,前者是新定义一个数据类型,后者是对类型的重命名。 type NewString stringtype OldString stringtype NewString string声明了一个NewString类型,和string具有完全一致的数据结构,确…...

Neural Network学习笔记2

torch.nn: Containers: 神经网络骨架 Convolution Layers 卷积层 Pooling Layers 池化层 Normalization Layers 正则化层 Non-linear Activations (weighted sum, nonlinearity) 非线性激活 Convolution Layers Conv2d torch.nn.Conv2d(in_channels, out_channels, ke…...

用@Value注解为bean的属性赋值

1.Value注解 Value注解的源码,如下所示 Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface Value {String value(); }从Value注解的源码中…...

拨云见日:深入理解 HTML 解析器与有限状态机

文章目录 参考描述状态机状态机有限状态机与无限状态机有限状态机与自动售货机无限状态机与计算器 HTML 解析器HTML 解析器HTML 与有限状态机 HTML 解析器的常见状态初始状态DOCTYPE 状态注释状态标签状态开始标签状态属性状态属性名状态属性值状态 结束标签状态自闭和标签状态…...

Java线程池及其实现原理

线程池概述 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机…...

进程替换函数组介绍exec*

目录 前述 execl execlp execle execv execvp execvpe 前述 介绍后缀的意义: l (list):表示参数采用列表。 v(vector):参数同数组表示。 p(path):自…...

欧科云链OKLink:2023年4月安全事件盘点

一、基本信息 2023年4月安全事件共造约6000万美金的损失,与上个月相比,损失金额有所降落,但安全事件数量依旧不减。其中,Yearn Finance因参数配置错误,导致了1000多万美金的损失。同时,有一些已经出现过的…...

KubeVirt备份与还原方案【翻译】

KubeVirt备份与还原方案【翻译】 ref:https://github.com/kubevirt/kubevirt/blob/main/docs/backup-restore-integration.md 备份 为所有必需的k8s资源构建依赖关系图冻结应用程序pvc数据快照解冻应用程序将所有必需的k8s资源定义拷贝到一个共享的存储位置(可选…...

使用PyQt5设计一款简单的计算器

目录 一、环境配置: 二、代码实现 三、主程序 四、总结 本文使用PyQt5设计一款简单的计算器,可以通过界面交互实现加减乘除的功能,希望能够给初学者一些帮助。主要涉及的知识点有类的定义与初始化、类的成员函数、pyqt5的信号与槽函数等。…...

Htop使用说明

目录 引言 什么是htop htop安装 htop界面介绍 htop功能介绍 引言 我们使用服务器的时候常常需要关注下自己的程序资源占用情况,htop就是一种互动式的进程查查看器,整齐用下来感觉比top的逼格高,造作可视化都更方便些,我觉得还…...

PostgreSQL Linux安装

安装依赖: sudo yum -y install readline-devel zlib-devel 安装Postgres: ssh hadoophadoop001 #下载Postgres wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz tar -zxvf postgresql-14.2.tar.gz -C /data #编译前准备 /dat…...

亚商投资顾问 早餐FM/0509车辆电动化

01/亚商投资顾问 早间导读 1.上交所拟于5月11日举办“发现央企投资价值,促进央企估值回归”交流会 2.监管部门十方面举措加强房地产经纪行业管理 3.广东:推动城市公共服务及货运配送车辆电动化替代 4.昆山两楼盘因大幅降价被暂停网签:降幅…...

AI绘画天花板——Midjourney注册使用保姆级教程(5月5日验证有效)

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,备注:aigc,拉你进群。 现在市面上AI绘图大概有三大阵营:Midjourney、Stable Diffusion,还有一个就是OpenAI实…...

学习笔记(2)项目结构描述 - manifest.json和pages.json

目录 1,manifest.json2,pages.json2.1,pages2.2,globalStyle2.3,tabBar 1,manifest.json 官方详情 uni-app 的 appid 由 DCloud 云端分配,主要用于 DCloud 相关的云服务,请勿自行修…...

vector、deque、list相关知识点

vector erase返回迭代器指向删除元素后的元素insert返回迭代器指插入的元素reserve只给容器底层开指定大小内存空间,并不添加新元素 deque 底层数据结构 动态开辟的二维数组,一维数组从2开始,以2倍方式扩容,每次扩容和&#x…...

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …...

设计模式——适配器模式(类适配器、对象适配器)

是什么? 我们平时的有线耳机接口分为USB的和Type-C的接口,但是手机的耳机插口却只有一个,像华为的耳机插口现在基本都是Type-c的,那如果我们现在只有USB接口的耳机怎么办呢,这个时候就需要使用到一个转换器&#xff0c…...

iOS开发多target

场景 背景:设想一下有一个场景,一个业务分为多种身份,他们大部分功能是相同的,但是也有自己的差异性。这种情况,想要构建出不同身份的APP。你会怎么做??? 当然,你可以拷贝一份代码出来,给项目重新命名。这样做的好处是,他们互相不会冲突,不用去关心是否有逻辑的冲…...

100种思维模型之每日评估思维模型-58

曾子曰:吾日三省吾省,为人谋而不忠乎?与朋友交不信乎?传不习乎? 曾国藩,坚持每日写复盘日记,最后他用自己的实践经历向我们证明:一个智商很平庸、出身很普通且有着各种毛病的人&…...

libreoffice api

libreOffice API是用于访问libreOffice的编程接口。可以使用libreOffice API创建、打开、修改和打印libreOffice文档。 LibreOffice API支持Basic、Java、C/C、Javascript、Python语言。 这是通过一种称为通用网络对象 (Universal Network Objects, UNO) 的技术实现的&#xff…...

Linux进程,存储,软件,日志004

目录一、进程管理二、磁盘与存储管理三、软件包管理四、系统日志管理一、进程管理1.1 进程概念与状态进程定义:进程是正在执行的程序实例,包含程序代码、数据和系统资源。进程状态转换:● 运行(RUNNING):进程正在CPU上执行● 就绪…...

告别Trello!这款开源看板工具让你的团队协作更高效

1. 为什么你需要一个Trello替代品? 如果你正在使用Trello管理团队项目,可能已经发现了一些痛点。Trello确实简单易用,但随着团队规模扩大或项目复杂度增加,免费版的限制就会显现出来。比如最多只能创建10个看板,每个看…...

手写 Vue3 自定义指令:防抖、点击外部、权限控制

在 Vue3 开发中,指令(Directive)是一个非常实用的特性,它允许我们在 DOM 元素上添加自定义行为,封装可复用的逻辑。Vue3 内置了 v-model、v-show、v-bind 等常用指令,但在实际开发中,我们经常会…...

别再只会用Burp改后缀了!5种Web文件上传绕过技巧原理深度拆解(.htaccess/MIME/00截断)

Web文件上传绕过技术:从原理到实战的深度解析 在CTF竞赛和实际渗透测试中,文件上传漏洞一直是高频出现的攻击面。许多开发者仅仅依赖简单的后缀名过滤或前端验证,却忽视了底层解析机制的复杂性。本文将深入剖析五种主流绕过技术的核心原理&am…...

用MQTT协议玩转OneNet物联网:STM32F103+ESP8266实现温湿度监控(附心跳包优化技巧)

STM32F103与ESP8266的物联网实战:MQTT协议深度优化与温湿度监控系统设计 1. 资源受限环境下的物联网通信架构设计 在嵌入式物联网设备开发中,资源优化始终是核心挑战。STM32F103C8T6作为经典的Cortex-M3内核微控制器,仅有64KB Flash和20KB RA…...

逆向实战:用Smali语法修改APK逻辑,实现一个简单的功能破解(附工具与源码)

逆向工程实战:用Smali语法解锁APK功能的全流程指南 在Android逆向工程领域,掌握Smali语法就像获得了一把打开APK内部逻辑的万能钥匙。不同于那些停留在理论层面的教程,本文将带你深入一个真实的逆向场景——如何通过修改Smali代码来解锁某个演…...

别再只调包了!用Sentence-Transformers从零训练你的专属Embedding模型(附完整代码)

从零构建领域专属Embedding模型:超越调包侠的实战指南 当你第一次调用model.encode("你的文本")就能获得一个语义向量时,是否好奇过这个黑箱背后的魔法?在电商推荐、智能客服等垂直场景中,通用Embedding模型的表现往往差…...

开源吐槽大会:从抱怨到贡献的进化之路

开源项目吐槽大会:技术文章大纲技术背景与吐槽文化开源社区的协作模式与挑战 吐槽文化的价值:促进改进与社区互动 典型案例:知名项目的争议与改进常见吐槽点分析代码质量与可维护性问题 文档缺失或过时 社区响应速度与维护者态度 版本迭代与兼…...

解决跨平台资源下载难题:res-downloader高效资源获取工具全解析

解决跨平台资源下载难题:res-downloader高效资源获取工具全解析 【免费下载链接】res-downloader 资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gi…...

不用第三方工具!用Altium Designer 24原生功能实现Allegro到PADS的PCB文件转换

解锁Altium Designer 24原生转换能力:Allegro到PADS的PCB文件高效迁移指南 在硬件开发领域,跨EDA平台协作已成为常态。当设计团队使用不同工具链时,文件格式转换往往成为效率瓶颈。传统方案依赖第三方转换工具,不仅增加成本&#…...