(二)GoLang小记 —— 变量的定义与初始化
2016-10-16 22:05
274 查看
GoLang定义变量的方式多种多样,主流的包含以下几种方式:
普通变量:
1、 不指定变量类型的构造函数定义(其实就是强制类型转换)
2、不指定关键词的推导定义(作用域不同,且无法在全局区定义)
3、 指定关键词的推导定义(作用域不同,可以在全局区定义)
指针变量定义:
指针变量定义在C家族中的定义与初始化分2种:
1、在C中,推荐的方法是这样的:
2、在C++中,推荐的方法是这样的:
而在GoLang中,的指针定义方法是这样的:
这句话可能有点难理解!没事,我们先来看一个示例:
new方法的原型与上述C++的new有点类似,它返回一个type类型为”空“的指针!
然后,我们使用make生成了一个数组并初始化后,就有了一个内存空间。再将p指向这个空间之后,指针的初始化与赋值工作也就结束了。
有些同学可能要问道:这个"空"为什么要打引号呢?
1、 因为这个空是相对而言的,不同类型对空的定义是不一样的;
2、 这个"空"代表未被初始化;
例如:
NOTE :
当你在定义全局变量时,有可以会出现以下错误 :
" non-declaration statement outside function body "
这是因为定义全局变量不能省略"var"关键字,而这个在文章开头就提到过....
普通变量:
1、 不指定变量类型的构造函数定义(其实就是强制类型转换)
/* 直接用某个类型的"构造函数"进行赋值,这种赋值方式在C++中比较常见 构造函数打上引号是因为:"在GoLang中实际是没有构造函数的,但是把它理解成构造函数便于大家理解" */ var val = uint64(1) val := uint64(1)
2、不指定关键词的推导定义(作用域不同,且无法在全局区定义)
/*关键字也不写!完全交给编译器判断*/ str := "admin"
3、 指定关键词的推导定义(作用域不同,可以在全局区定义)
/*只指定关键字的初始化*/ var str := "admin"
指针变量定义:
指针变量定义在C家族中的定义与初始化分2种:
1、在C中,推荐的方法是这样的:
/*C 中从heap中分配一块能存储T类型的空间的内存,然后初始化这块内存空间*/ T *t = (T*)malloc(sizeof(T)) memset(t, 0, sizeof(T))
2、在C++中,推荐的方法是这样的:
/*C++ 中使用T类型的构造函数进行初始化*/ T *t = new T | new T()
而在GoLang中,的指针定义方法是这样的:
/* new用来分配内存的内建函数,但是与C家族不同的是:”它并不初始化内存,只是将其置零。" */ p := new([]int) *p = make([]int, 1024)
这句话可能有点难理解!没事,我们先来看一个示例:
package main import . "fmt" func main() { Println(new([]int)) } /* 结果输出: &[] */
new方法的原型与上述C++的new有点类似,它返回一个type类型为”空“的指针!
然后,我们使用make生成了一个数组并初始化后,就有了一个内存空间。再将p指向这个空间之后,指针的初始化与赋值工作也就结束了。
有些同学可能要问道:这个"空"为什么要打引号呢?
1、 因为这个空是相对而言的,不同类型对空的定义是不一样的;
2、 这个"空"代表未被初始化;
例如:
/*bool 类型的"空"是False*/ b := new(bool) Println(*b) /*int 类型的"空"是0*/ i := new(int) Println(*i) /*string 类型的'空'是 '' —— 一个空的字符串 */ s := new(string) Println(*s)
NOTE :
当你在定义全局变量时,有可以会出现以下错误 :
" non-declaration statement outside function body "
这是因为定义全局变量不能省略"var"关键字,而这个在文章开头就提到过....
相关文章推荐
- 定义变/常量和变量的初始化
- 类的常成员变量和引用类型的成员的定义和初始化相关知识点
- C++变量 声明、初始化、定义
- 第一题 定义分数(Fraction)类: 1、成员变量:分子、分母 2、方法: (1)自定义初始化方法(初始分子和分母) (2)分子的赋值、取值方法 (3)分母的赋值取值方法 (4)打印分数信息
- 关于变量定义时初始化的必要性
- hive变量调用 hive和shell hdfs命令交互调用 hiverc预定义初始化
- 变量初始化规则以及声明和定义
- 变量的定义,初始化和声明
- 通过常量表达式初始化的const变量定义在头文件中
- Java中定义实例变量时指定初始化值顺序
- 变量初始化规则以及声明和定义
- 定义结构体的时候,里面的变量可以同时初始化吗?
- 一个变量在定义时,没有初始化是有多可怕啊
- 3. 定义一个分数类(Fraction) 实例变量:分子,分母 方法:初始化方法(2个参数),便利构造器,约分,打印,加,减,乘,除。
- keril中不能定义全局变量时初始化的原因
- 类数组变量定义与初始化
- 定义变量时一定要初始化
- 定义时指定初始值、静态初始化块为类变量指定初始值
- 2015.12.18 property定义属性变量 init初始化自定义 class的部分运用
- (转载)你好,C++(7)第三部分 C++世界众生相 3.2.1 变量的定义与初始化