go的type关键字

在 Go 语言中,type 关键字用于定义自定义数据类型(类型别名、结构体、接口等),以及获取某个变量的类型信息。type 关键字有多种用法,下面将详细解释这些用法:

1. 自定义数据类型
使用 type 关键字可以定义自定义的数据类型,包括类型别名、结构体、接口等。例如:

// 定义类型别名
type MyInt int// 定义结构体
type Person struct {Name stringAge  int
}// 定义接口
type Shape interface {Area() float64
}

2. 获取变量的类型信息
使用 type 关键字可以获取一个变量的类型信息。在 Go 语言中,reflect 包提供了更详细的反射机制,可以用于获取变量的类型、值等更多信息。以下是一个简单的示例:

package mainimport ("fmt""reflect"
)func main() {num := 42str := "Hello"// 使用 type 获取变量的类型信息fmt.Println("Type of num:", reflect.TypeOf(num))fmt.Println("Type of str:", reflect.TypeOf(str))
}

3. 类型断言
type 关键字还可以与类型断言一起使用,用于判断一个接口类型变量是否实现了特定的接口。例如:

package mainimport ("fmt"
)type Shape interface {Area() float64
}type Circle struct {Radius float64
}func (c Circle) Area() float64 {return 3.14 * c.Radius * c.Radius
}func main() {var s Shapecircle := Circle{Radius: 2.5}s = circle// 类型断言判断是否实现了特定接口if _, ok := s.(Shape); ok {fmt.Println("s implements Shape interface")} else {fmt.Println("s doesn't implement Shape interface")}
}

在上面的示例中,使用 s.(Shape) 进行类型断言,判断变量 s 是否实现了 Shape 接口。

4. 类型判断与类型选择
type 关键字还可以与 switch 语句一起使用,进行类型判断和类型选择。这在处理接口类型时非常有用。以下是一个简单示例:

package mainimport ("fmt"
)type Shape interface {Area() float64
}type Circle struct {Radius float64
}type Rectangle struct {Width  float64Height float64
}func (c Circle) Area() float64 {return 3.14 * c.Radius * c.Radius
}func (r Rectangle) Area() float64 {return r.Width * r.Height
}func main() {shapes := []Shape{Circle{Radius: 2.5},Rectangle{Width: 3, Height: 4},Circle{Radius: 4},}for _, shape := range shapes {switch s := shape.(type) {case Circle:fmt.Printf("Circle: Area = %.2f\n", s.Area())case Rectangle:fmt.Printf("Rectangle: Area = %.2f\n", s.Area())default:fmt.Println("Unknown shape")}}
}

在上面的示例中,通过 shape.(type) 进行类型选择,判断具体是哪种类型的形状,并分别调用其 Area() 方法。

5. 类型零值
type 关键字还可以用于定义类型的零值。在 Go 语言中,自定义类型的零值是该类型的初始值。例如:

package mainimport ("fmt"
)type Point struct {X intY int
}func main() {var p Point // Point 的零值 {0, 0}fmt.Println("Point:", p)
}

在上述示例中,var p Point 创建了一个 Point 类型的变量,其初始值为 {0, 0}。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/30280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——假设

通用方法/没有特点 方法关系 199-2013-1-41——方法关系——方法有效或方法可行 新近一项研究发现,海水颜色能够让飓风改变方向,也就是说,如果海水变色,飓风的移动路径也会变向。这也就意味着科学家可以根据海水的“脸色”判断…

Win10关闭自动更新的方法和影响(Windows modules installer worker cpu占用过高)

目录 问题描述: Windows modules installer worker是什么? Win10关闭自动更新的方法: Win10关闭自动更新的影响: 问题描述: 有时我们在使用电脑的过程中会突然出现电脑运行过慢,发热,风扇噪…

C++ string模拟实现(部分接口)

C string模拟实现 string模拟实现(部分接口) C的string类是一个类模板,用于表示和操作任何字符类型的字符串。 string类内部使用字符数组来存储字符,但是所有的内存管理,分配和空终止都由string类自己处理&#xff0c…

node.js

什么是Node.js Node.js 是一个免费的、开源的、跨平台的 JavaScript 运行时环境,使开发者可以搭建服务器端的JavaScript应用程序 概念: 使用Node.js编写后端程序 // 支持前端工程化 ​ 后端程序:提供接口和数据 ,网页资源 ​ 前端工程化:对代码压缩&…

成员变量和局部变量的区别

局部变量成员变量 1、定义的位置不一样 在方法的内部,方法申明上(形参)。 声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 在方法的外部,直接写在类当中 (类中方法外的变量) 2、作用范…

《孤注一掷》现实版:29万打水漂,华为程序员也躲不过的诈骗!!!

明天周五,约吗? 不管怎样,反正播妞已经订好了《孤注一掷》的电影票。不为别的,《孤注一掷》太敢拍了!!! 美女荷官在线发牌,高知程序员在线养“猪”,诈骗头目“虔诚”拜佛…

UGUI组件EventTrigger用法

一.Unity编辑器中EventTrigger组件用法 1.添加事件类型 2.绑定gameObject指定组件的方法 3.方法执行逻辑 public class NewBehaviourScript : MonoBehaviour {public void PointerDown(){Debug.Log("Trigger PointerDown");} } 4.按下鼠标,绑定方法成功…

杰发科技(合肥)2021笔试题

笔试时间:2020.10.17 ,10:30-12:00。 岗位:Linux 驱动工程师。 题型:选择题8道,填空题10道,编程题4道。 杰发科技主要做汽车电子,由北京四维图新控股,对汽车电子感兴趣的有机会可以应聘试试。 选择题 1、128,4 #include<stdio.h> unsigned int getstrsiz…

深度思考mysql面经

推荐 1 索引下推 Mysql性能优化&#xff1a;什么是索引下推&#xff1f; 1.1 定义 索引下推&#xff08;Index Condition Pushdown&#xff0c;简称 ICP&#xff09;是一种数据库优化技术。在传统的数据库查询中&#xff0c;数据库首先使用索引检索来找到符合索引条件的行&…

集成测试最全详解,看完必须懂了

目录 什么是集成测试 测试关注的重点 集成测试的三个级别 集成测试的模式 集成测试策略 自顶向下集成&#xff08;Top-Down Integration&#xff09; 三明治集成&#xff08;Sandwich Integration&#xff09; 基干集成&#xff08;Backbone Integration&#xff09; …

解决Windows:Call to undefined function exif_imagetype()

很明显,是php安装时没有打开某些扩展,以致不能执行exif_imagetype()这个方法,因此需要打开。 网上很多人说需要打开下面这两个扩展: extension=php_exif.dll extension=php_mbstring.dll 但只说对了一半,我一开始也按照网上文章说的打开这两个扩展,但是还是同样错误。…

23.8.8 杭电暑期多校7部分题解

1008 - H.HEX-A-GONE Trails 题目大意 有两个玩家和一棵树&#xff0c;初始状态玩家一和玩家二分别在两个点 x , y x,\space y x, y&#xff0c;每次操作可以走一个与当前点有连边并且双方都没走到过的点&#xff0c;问最后是谁赢 解题思路 因为不能走走过的点&#xff0c…

[Vulnhub] matrix-breakout-2-morpheus

目录 <1> 信息收集 <2> getshell <3> Privilege Escalation&#xff08;提权&#xff09; <1> 信息收集 nmap -sP 192.168.236.0/24 扫描一下靶机ip 靶机ip: 192.168.236.154 nmap -A -p 1-65535 192.168.236.154 扫描一下靶机开放哪些服务 开放…

PyQt学习笔记-Windows系统版本兼容问题踩坑记录

1 Pyinstaller打包的exe在Win10上可以使用&#xff0c;在Win7上缺提示找不到dll。 错误信息&#xff1a; Traceback (most recent call last): File "main.py", line 4, in <module> ImportError: DLL load failed while importing QtWidgets: 找不到指定的…

2023全新UI好看的社区源码下载/反编译版

2023全新UI好看的社区源码下载/反编译版 这次分享一个RuleAPP二开美化版&#xff08;尊重每个作者版权&#xff09;&#xff0c;无加密可反编译版本放压缩包了&#xff0c;自己弄吧&#xff01;&#xff01;&#xff01; RuleAPP本身就是一款免费开源强大的社区&#xff0c;基…

海外应用商店优化实用指南之元数据的迭代更新

随着每天都有新应用程序加入App Store和Google Play商店&#xff0c;许多应用程序都会针对与我们相同的关键词&#xff0c;虽然我们的元数据保持不变&#xff0c;但竞争对手的应用会重新编入索引&#xff0c;最终导致我们的关键词排名随着时间的推移稳步下降。 1、迭代的重要性…

C语言——九九乘法表

//九九乘法表 //用程序做一个九九乘法表 #include<stdio.h> int main() {int i,j,result;printf("\n");for(i1;i<10;i){for(j1;j<i;j){resulti*j;printf(" %d*%d%-d",i,j,result);}printf(" \n");}}

React Router@3.x 升级到 @6.x 的实战

一、概述 目前公司产品有关 react 的工具版本普遍较低,其中react router版本为 3.x(是的,没有看错,3.x 的版本,4年前的版本)。而最新的 react router 已经到了 6.x 版本。 为了能够跟上路由的脚步,也为了使用 router 相关的 hooks 函数,一次必不可少的升级由此到来!由于…

获取当前线程中的请求属性的静态方法

RequestContextHolder.getRequestAttributes() 是 Spring 框架中用于获取当前线程中的请求属性的静态方法。它通常在 Web 应用中使用&#xff0c;用于访问当前请求的上下文信息。在 Spring 的 Web 应用中&#xff0c;每个请求都会有一个对应的请求上下文&#xff0c;其中包含了…

【数据库】P0 创建数据库环境 MySQL + DataGrip

创建数据库环境 下载安装 MySQL下载安装 DataGrip 下载安装 MySQL Windows版本_MySQL 下载地址&#xff1a; https://dev.mysql.com/downloads/mysql/ 下载后依照默认顺序安装即可&#xff0c;本博文将讲述简约安装步骤&#xff1b; 如需详细安装步骤可见&#xff1a;https:/…