如果使用var或:=声明、定义、初始化往往是一气呵成的,最后的初始化其实是定义时会自动实现一次隐式默认值赋值操作
如 var i<声明> int<定义> =3<赋值>
如果是type往往是用来声明一个自定义的非简单类型,注意,只是声明,一般不存在定义的操作
如 type S struct{int a; string str; int b}
对“数据类型”的声明,和去声明某种“数据类型”的变量是两回事:
和上面所举例子对应的操作:声明加定义一个数据类型为S的变量:var newS S/news :=S{}
而声明某种“数据类型”的变量都是声明、定义、初始化往往是一气呵成的(怎么车咕噜话来回说了)
无论是简单数据类型还是非简单数据类型,使用过程中都需要先完成声明和定义这两个操作
type S struct{
a int
b int
}
type I struct{
test()
}
type newS S
var i=I
type newI =I
前三个操作是声明,分别进行了S结构类的声明、I接口的声明、基于S的新结构类newS的声明
而最后一个是声明了一个别名newI,他是接口I的别名,同时他没有进行定义,仅仅是做了名称的声明
也就是这些操作里,只有var i =I发生了分配内存的事件
var s1 S
s2 :=&S{a:1,b:2,}
分别代表了S类型变量的声明->定义->编译器默认赋值这一气呵成操作、以及S类型变量的声明->定义->程序员自定义赋值
定义数据类型使用type关键词,定义变量则使用var关键词