Go基础-程序实体补充

一些关于判断变量类型与类型转换、不同类型之间的比较

一、如何判断变量类型

断言

下面是例子代码:

import (
    "fmt"
)
func main() {
    var name = "icode"
    value, ok := interface{}(name).(string)
    fmt.Println(value)
    fmt.Println(ok)
}

注意:类型断言的时候我们必须先转换为接口类型

  • 在Go语言中interace{} 代表空接口,任何类型都是它的实现类型

  • 一对不包含任何东西的花括号,除了可以代表空的代码块之外,还可以用于表示不包含任何内容的数据结构(或者说数据类型)

  • 如:struct{},它就代表了不包含任何字段和方法的、空的结构体类型

  • 空接口interface{}则代表了不包含任何方法定义的、空接口类型

  • 字面量:用来表示数据类型本身的若干个字符

二、关于string类型和各种切片类型的互转

  • 一个值从string类型向[]byte类型转换时代表UTF-8编码的字符串被拆分成独立的字节

  • 一个值从string类型向[]rune类型转换的时候代表着字符串会被拆分成一个个Unicode字符

三、别名类型VS 潜在类型

我们可以通过下面方式声明:

type MyString = string

这样MyString 就是string类型的别名类型

在Go内建的基本类型中就存在两个别名类型:byte是uint8的别名类型,而rune是int32的别名类型

而下面这种声明方式:

type MyString string

这里MyString和string就不是一种类型了,这种方式叫做对类型的再定义

我们可以把string是MyString的潜在类型

潜在类型的含义:某个类型在本质上是哪个类型,或者是哪个类型的集合。

如果两个值的潜在类型相同,却属于不同的类型,它们之间是可以做类型转换的。但是它们的值不能进行判断等或比较,它们变量之间不能赋值

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务