(二)GoLang小记 —— 变量的定义与初始化

前端之家收集整理的这篇文章主要介绍了(二)GoLang小记 —— 变量的定义与初始化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

GoLang定义变量的方式多种多样,主流的包含以下几种方式

普通变量

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,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"关键字,而这个在文章开头就提到过....

猜你在找的Go相关文章