Go语言变量类型相关
三种声明方式
在Go语言中有下面这三种声明方式
var a int = 3;
var b = 3;
c := 3;
注意变量短声明:=只可以在一个代码块中进行使用, 同时使用:=进行声明的变量, 是可以进行重名的, 但是重名的变量需要类型相同。
var err error
n, err := io.WriteString(os.Stdout, "Hello, everyone")
代码块就是用来限制变量的作用域的, 同时还可以做一种数据结构。
类型断言表达式
value, ok := interface{}(container).([]string)
首先这个表达式叫做类型断言表达式, 作用就是用来一个变量的类型的, 它的格式为:x.(T), 其中x代表需要判断类型的值, 而这个值当下的类型必须是接口类型, 所以, 当这里的container变量类型不是任何接口类型的时候, 我们需要将它转化成某个接口类型的值.
这个表达式会产生两个值, 第一个值是value, 表示成功转化后的值, 第二个值表示类型是否转化成功
可以进行测试一下
package main
import "fmt"
func main() {
var a int = 34
value, ok := interface{}(a).(int)
if ok == true {
fmt.Println(value)
}
}
类型断言的使用场景:
- 判断指针是否为空
- 判断一个变量类型
- 配合switch语句进行使用
别名类型和潜在类型
在Go语言中可以使用type关键字来自定义各种类型,这些类型必须在Go语言基本类型和高级类型的范畴之类,在它们当中, 有一个叫做别名类型的东西, 从别名类型这个名字上我们就可以看出, 它和源类型的区别就在于它们的名字上。
别名类型
type MyString1 = string
潜在类型
但是是下面这种声明方式就变得不一样了, 下面这种声明方式是声明了一种新的类型
type MyString2 string
这种方式也叫做类型的在定义, 我们也将string称之为MyString2的潜在类型, 潜在类型的含义是
某个类型在本质上是哪个类型。
潜在类型相同的类型是可以进行相互转化的, 因此, MyString2类型的值与string类型的值
可以使用类型转化表达式进行互转。
但是对于下面这种情况又是不可以转的:
var a []string
var b []MyString2
浙公网安备 33010602011771号