Go type assertions

简介: Go type assertions

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

格式:x.(T)

含义:断言 x 不是 nil 并且存储的是 T 类型的值

用途:

  1. 检查 x 是否为 nil
  2. 检查 x 能否转换为类型 T
  3. 转换 x 为类型 T

返回值:

t := x.(T),返回一个类型为 T 的值,如果 xnil,产生 panic

t, ok := x.(T) ,如果 xnil 或者不是 T 类型,ok 的值为 false,否则 ok 的值为 true 并且 t 是一个类型为 T 的值。

使用方式:

v, ok = x.(T)
v, ok := x.(T)
var v, ok = x.(T)
var v, ok T1 = x.(T)

实际用途

  1. 判断 interface{} 的类型
  2. 转换 interface{} 为具体的类型
package main
import "fmt"
type Student struct {
  Name string
}
func test(i interface{}) interface{} {
  return i
}
func main() {
  var i interface{}
  student := Student{Name: "golang"}
  i = test(student)
  //fmt.Println(i.Name)  // i.Name undefined (type interface {} is interface with no methods)
  fmt.Println(i.(Student).Name) // 我们知道具体类型
  // 如果不知道具体类型,可以按照下面的方式判断
    // ok 为 true 说明 i 是 Student 类型,否则不是 Student 类型
  if j, ok := i.(Student); ok {
    fmt.Println(j.Name)
  }
    // 下面的 ok 为 false
    var ii interface{}
    ii = test(ii)
    if v, ok := ii.(Student); ok {
        fmt.Println(v.Name)
    } else {
        fmt.Println("ii is not Student")
    }
}

输出

golang
golang
ii is not Student


目录
相关文章
../../..xxx.go:46:18: aa.Bbb undefined (type *"xx/xxx/xx".Ccc has no field or method Bbb)
../../..xxx.go:46:18: aa.Bbb undefined (type *"xx/xxx/xx".Ccc has no field or method Bbb)
|
11月前
|
Go
Go语言type关键字终于被玩明白了 类型别名的秘密都在这里
Go语言type关键字终于被玩明白了 类型别名的秘密都在这里
97 0
|
11月前
|
Cloud Native 编译器 Go
100天精通Golang(基础入门篇)——第22天:深入探讨Go中的‘type‘关键字
100天精通Golang(基础入门篇)——第22天:深入探讨Go中的‘type‘关键字
63 0
|
JSON Go 数据格式
三分钟学 Go 语言——条件语句+switch和type switch
三分钟学 Go 语言——条件语句+switch和type switch
三分钟学 Go 语言——条件语句+switch和type switch
|
自然语言处理 Java 编译器
Go REFLECT Library | 01 - 反射的类型 Type
Go REFLECT Library | 01 - 反射的类型 Type
Go REFLECT Library | 01 - 反射的类型 Type
|
Go 索引
Go REFLECT Library | 02 - 反射的类型 Type
Go REFLECT Library | 02 - 反射的类型 Type
|
Go Windows
go的Type switch是一个switch语句么?
相信这样的语句在go中大家见的很多 switch t := arg.(type) { default: fmt.Printf("unexpected type %T\n", t) // %T prints whatever type t has case bool: fmt.
880 0
|
1天前
|
程序员 Go PHP
为什么大部分的 PHP 程序员转不了 Go 语言?
【9月更文挑战第8天】大部分 PHP 程序员难以转向 Go 语言,主要因为:一、编程习惯与思维方式差异,如语法风格和编程范式;二、学习成本高,需掌握新知识体系且面临项目压力;三、职业发展考量,现有技能价值及市场需求不确定性。学习新语言虽有挑战,但对拓宽职业道路至关重要。
22 10
|
2天前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
20 10
|
1天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。