20210104声明、定义、初始化,赋值,实例化与类与对象、实现等这些词的含义(golang)(1) - ziyouzy/2021blog GitHub Wiki

这里开始只探讨golang

如果使用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的声明

然后是声明加定义了数据类型为I的变量i

而最后一个是声明了一个别名newI,他是接口I的别名,同时他没有进行定义,仅仅是做了名称的声明

内部原理是声明不需要分配内存,而定义则先需要

也就是这些操作里,只有var i =I发生了分配内存的事件

type newI<声明> = I<定义>

type一般只负责声明操作

而var则更像是处理所

var s1 S
s2 :=&S{a:1,b:2,}

分别代表了S类型变量的声明->定义->编译器默认赋值这一气呵成操作、以及S类型变量的声明->定义->程序员自定义赋值

定义数据类型使用type关键词,定义变量则使用var关键词

⚠️ **GitHub.com Fallback** ⚠️