Go语言中的程序实体包括:
Go语言是静态类型的编程语言,需要在声明变量和常量的时候,指定它们的类型或给予足够的信息,让Go语言能够推导出它们的类型。
变量的合法类型:
常量的合法类型:
// 变量声明方式的不同方式
var name string
var name="string" // 类型推断 【编程语言在编译期自动解释表达式类型的能力】
// 表达式类型是对表达式求值后得到结果的类型
// 类型推断只能用于变量或常量的初始化
name := "string" // 短变量声明 【只能在函数体内部使用】,也属于类型推断
类型推断在编译期执行,对程序的运行效率没有影响。
不显式地指定变量或常量的类型,使得它可以被赋予任何类型的值,变量的类型在初始化的时候,由程序动态确定。
Go是静态类型语言,所以一点初始化变量是确定了类型,之后就不能再改变。
使用短变量声明,可以对统一代码块中的变量进行重声明。
代码块的含义:
变量重声明的前提:
使用短变量声明时可不用判断在意被赋值的多个变量中是否包含旧变量。
作用域:
一个程序实体的作用域总是会被限制在某个代码块中,而这个作用域最大的用处,就是对程序实体的访问权限的控制。
不会查找代码导入的其他包,除非代码包导入语句如下
import . XXX
,这表示让XXX包中公开的程序实体被视为当前源码文件中的实体。
不同代码块中的可重名变量与变量重声明中的变量的区别: | 差异 | 变量重声明 | 可重名变量 | | -------- | -------------------------- | -------------------------- | | 代码块 | 统一代码块 | 不同代码块 | | 数量 | 只有一个变量 | 多个变量 | | 变量类型 | 类型不可变,与初始化时相同 | 类型任意 | | 变量屏蔽 | 无 | 代码块嵌套,则出现变量屏蔽 |
x.(T)
,x代表要判断类型的值T(x)
,x源值,x的类型是源类型,T目标类型在Go语言中Interface{}
代表空接口,任何类型都是它的实现类型。Interface(x),将x转换为空接口的值。
的含义,空代码块或者空数据类型。
value,ok := interface{}(container).([]string) //value:类型转换后的值,ok:断言是否成功
// value,ok := interface{}(<变量>).(<变量类型>)
// interface{}(<变量>),将变量的值转换为空接口的值
// .(<变量类型>),判断前者类型是否为变量类型
类型转换规则注意事项:
T(x)
中,x可以使变量,代表值的字面量,结果只有一个值的表达式关键字type声明自定义的各种类型,这些类型必须在Go语言基本类型和高级类型之内。
type MyString = string
// MyString是string的别名类型,只是名称有差别,只要用于代码重构
type Mystring2 string // 对类型在定义
// Mystring2是一个新的类型
// 此处string成为潜在类型