iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Go中interface{}的注意事项是什么
  • 441
分享到

Go中interface{}的注意事项是什么

2023-07-05 10:07:51 441人浏览 八月长安
摘要

这篇文章主要介绍“Go中interface{}的注意事项是什么”,在日常操作中,相信很多人在Go中interface{}的注意事项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go中interface{

这篇文章主要介绍“Go中interface{}的注意事项是什么”,在日常操作中,相信很多人在Go中interface{}的注意事项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go中interface{}的注意事项是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

interface{} 注意断言

正常的使用断言,写一个简单的 断言 demo

type Animal interface{}func main() {    var a Animal = "xiaomotong"    v, ok := a.(string)    if !ok{        fmt.Println("type error")    }    fmt.Println("v == ",v)}

断言注意写成 2 个返回值的,一个是具体的值,一个是 bool,判断断言是否成功,若成功则说明断言正确,且 v 会被赋值为实际变量的值

切忌没头脑的强转

func main() {    var a Animal = "xiaomotong"    v := a.(int)    fmt.Println("v == ",v)}

上述这种写法,若不判断是否断言成功,直接强转,程序是会 panic 的 ,执行上述程序后效果如下:

>go run main.go
panic: interface conversion: main.Animal is string, not int

goroutine 1 [running]:
main.main()
        D:/mycode/my_new_first/interface_test/main.go:13 +0x4c
exit status 2

程序崩掉,那就是线上问题了 xdm ,这里需要注意

当然我们也可以这样写

type Animal interface{}func main() {    var a Animal = "xiaomotong"    switch a.(type) {    case string:        fmt.Println("a type is string")    case int:        fmt.Println("a type is int")    }}

通过 switch 的方式来判断 接口的数据类型,根据不同的数据类型来做不同的事情,进行分类处理

用于反射的注意点

golang 里面有反射这个概念,简单来说,咱们可以通过反射包来实现获取接口真实的类型,和真实的数据

举个小例子:

通过反射来获取 Animal 接口的数据类型,和具体的数据值

type Animal interface{}func main() {    var a Animal = "xiaomotong"    v := reflect.ValueOf(a)    fmt.Printf("v type == ", v.Type(), " v == ", v.String())}

执行上述代码后效果如下:

> go run main.go
v type == %!(EXTRA *reflect.rtype=string, string= v == , string=xiaomotong)

没毛病正常获取,但是如果我们这样写的话是不是也可以正确执行呢?

type Animal interface{}func main() {    var a Animal = "xiaomotong"    v := reflect.ValueOf(a)    fmt.Printf("v type == ", v.Type(), " v == ", v.Int())}

看这个例子也就和上面的例子相差在输出的时候,一个是v.String() ,一个是v.Int() ,可是结果却相差很大

go run main.go
v type == %!(EXTRA *reflect.rtype=string, string= v == , string=xiaomotong)
D:\mycode\my_new_first\interface_test>go run main.go
panic: reflect: call of reflect.Value.Int on string Value

goroutine 1 [running]:
reflect.Value.Int(...)
        C:/Program Files/Go/src/reflect/value.go:999
main.main()
        D:/mycode/my_new_first/interface_test/main.go:26 +0x2bd
exit status 2

执行上述代码,go 程序给我们报了 panic 错误,这里需要注意 ,程序崩溃的原因是,我们将一个 string 类型的值反射成一个 Int 类型的值,直接在 反射包里面就给我们报了 panic。

到此,关于“Go中interface{}的注意事项是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Go中interface{}的注意事项是什么

本文链接: https://www.lsjlt.com/news/351100.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go中interface{}的注意事项是什么
    这篇文章主要介绍“Go中interface{}的注意事项是什么”,在日常操作中,相信很多人在Go中interface{}的注意事项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go中interface{...
    99+
    2023-07-05
  • Golang中interface{}的注意事项是什么
    这篇“Golang中interface{}的注意事项是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang中int...
    99+
    2023-07-05
  • 详解Golang中interface{}的注意事项
    目录interface {} 可以用于模拟多态interface{} 需要注意空和非空的情况iface结构体,非空eface结构体interface {} 可以用于模拟多态 xdm ...
    99+
    2023-03-08
    Golang interface{}注意实现 Golang interface{} Golang interface Go interface
  • 这些关于Go中interface{}的注意事项你都了解吗
    目录interface{} 注意断言用于反射的注意点我们一起来回顾一下上一次说到的 interface{} 可以用来做多态接口类型分为空接口类型和非空接口类型,他们的底层数...
    99+
    2023-03-08
    Go interface{}注意事项 Go interface{} Go interface
  • TypeScript中type和interface的区别及注意事项
    目录前言概念typeinterface异同点不同点相同点补充:Ts中type和interface定义类型扩展类型的方法总结前言 在 TS 中,type 和 interface相似,都...
    99+
    2022-11-13
    ts type interface ts type interface区别 ts type关键字
  • Java中Collections.emptyList()的注意事项是什么
    小编给大家分享一下Java中Collections.emptyList()的注意事项是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!偶然发现有小伙伴错误地使用...
    99+
    2023-06-14
  • .height()的注意事项是什么
    这篇文章将为大家详细讲解有关.height()的注意事项是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   .height()   描述: 获取匹配元素集合中的...
    99+
    2024-04-02
  • Go中函数的使用方法与注意事项是什么
    今天小编给大家分享一下Go中函数的使用方法与注意事项是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。细节汇总函数的形参列...
    99+
    2023-07-04
  • 使用.removeProp的注意事项是什么
    本篇内容主要讲解“使用.removeProp的注意事项是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用.removeProp的注意事项是什么”吧!  ...
    99+
    2024-04-02
  • 使用.prop的注意事项是什么
    这篇文章主要介绍“使用.prop的注意事项是什么”,在日常操作中,相信很多人在使用.prop的注意事项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”使用.prop的注意...
    99+
    2024-04-02
  • 连接Oracle注意事项是什么
    本篇内容介绍了“连接Oracle注意事项是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!连接Oracle 的设计可以作为ADO进行替代,...
    99+
    2023-06-17
  • ajaxSuccess使用注意事项是什么
    本文小编为大家详细介绍“ajaxSuccess使用注意事项是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“ajaxSuccess使用注意事项是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2024-04-02
  • python切片中内存的注意事项是什么
    这篇文章主要介绍了python切片中内存的注意事项是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。由于 Python 列表的切片会在内存中创建新对象,因此需要注意的另一个...
    99+
    2023-06-20
  • JavaScript中ajaxError()有什么注意事项
    小编给大家分享一下JavaScript中ajaxError()有什么注意事项,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   无论哪一个Ajax请求被完成,所有ajaxError处理器...
    99+
    2024-04-02
  • return语句使用的注意事项是什么
    本篇内容主要讲解“return语句使用的注意事项是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“return语句使用的注意事项是什么”吧!   ...
    99+
    2024-04-02
  • 使用Oracle Nologging+Append注意事项是什么
    本篇内容介绍了“使用Oracle Nologging+Append注意事项是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细...
    99+
    2024-04-02
  • Try..Catch的注意事项有什么
    这篇文章主要介绍“Try..Catch的注意事项有什么”,在日常操作中,相信很多人在Try..Catch的注意事项有什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Try....
    99+
    2024-04-02
  • mysql安全设置注意事项是什么
    这篇文章主要为大家展示了“mysql安全设置注意事项是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql安全设置注意事项是什么”这篇文章吧。  1.如...
    99+
    2024-04-02
  • SQL编程中的子查询及注意事项是什么
    今天就跟大家聊聊有关SQL编程中的子查询及注意事项是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。当一个查询是另一个查询的条件时,称之为子查询。...
    99+
    2024-04-02
  • React中style的使用方法及注意事项是什么
    这篇“React中style的使用方法及注意事项是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“React中style的...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作