成都网站建设设计

将想法与焦点和您一起共享

go语言静态成员变量 golang静态变量

Go语言变量的作用域

2021-10-22

成都服务器托管,创新互联提供包括服务器租用、达州托管服务器、带宽租用、云主机、机柜租用、主机租用托管、CDN网站加速、域名注册等业务的一体化完整服务。电话咨询:028-86922220

每一个变量(常量、类型或函数)在程序中都有一定的作用范围。称之为作用域。

Go语言在编译时会检查每一个变量是否使用过,未使用过的变量就会编译错误。

根据变量定义位置的不同,可以分为以下三个类型:

在函数体内被声明的变量称之为局部变量,作用在函数体内,函数的参数和返回值变量都属于局部变量。局部变量不会一直存在,在函数被调用时存在,函数调用结束后变量就会被销毁,即生命周期。

例子:其中a、b均为局部变量,只会在main函数内有效

在函数体外被声明的变量称之为全局变量,作用于所有源文件。不包含这个全局变量的源文件需要使用"import"关键字引入全局变量所在的源文件之后才能使用这个全局变量。

全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写。

例如:global为全局在main2和main函数中都能使用

函数名后面的小括号里定义的变量, 用于接受来自调用函数的参数。用于接收调用该函数时传入的参数。

例如:下面的例子中,第十七行a、b为sum函数定义的形参,用于传入main函数中的AF、BF

windows10怎么配置go语言环境变量

首先从网上下载go语言的编译器,我在发布这篇经验的时候go语言编译器的版本已经更新到了1.4版。根据你的系统平台下载相应的版本后,如果是压缩文件,先解压后双击运行,不是压缩文件,直接双击运行就可以了,运行后出现下面的界面,在下面界面上单击“Next”。

跟所有的软件安装包一样,go语言编译安装是也需要接受许可协议,在图中红圈的位置单击选择框,同意许可协议,单击“Next”。

在这一步你要改变go的安装目录,默认是安装在C盘下,C盘下文件文件太多会影响系统性能,单击红圈所示的“change”按钮会弹出安装目录选择对话框。

在这个对话框中你选择你要安装go编译器的目录,选择后会在红圈所示的位置会显示你所选择的目录,如果不是你预期的目录,青重新选择,然后单击“OK”按钮,对话框会回到第三步的对话框,但是目录以及变成了你刚才选择的目录,这个对话框中单击“Next”按钮。

这一步开始安装go编译器了,单击“Install”按钮,系统会自动安装go编译器到你刚才选择的目录中。

如果不出意外,安装程序开始copy文件,并以进度条的方式显示当前的角度,一般5分钟左右就安装完了。

党出现下面的界面的时候,表明go编译器已经安装完成了。单击“Finish”按钮结束安装。

安装完后要配置一些环境变量,首先要把go安装目录下的bin目录放到Path环境变量中。

接着创建一个GOPATH环境变量,这个变量很重要,我自己写的代码要放到这个变量中配置的目录中,go编译器才会找到并编译

继续在创建一个GOROOT变量,配合go编译器安装的目录。

完成步骤后,打开命令行go verison 回车,如果配置没有错会出现go编译器的版本信息,如下图中红圈所示。

go语言中全局变量和局部变量的区别

局部变量

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。

以下实例中 main() 函数使用了局部变量 a, b, c:

package main

import "fmt"

func main() {

/* 声明局部变量 */

var a, b, c int

/* 初始化参数 */

a = 10

b = 20

c = a + b

fmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c)

}

以上实例执行输出结果为:

结果: a = 10, b = 20 and c = 30

全局变量

在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用。

全局变量可以在任何函数中使用,以下实例演示了如何使用全局变量:

package main

import "fmt"

/* 声明全局变量 */

var g int

func main() {

/* 声明局部变量 */

var a, b int

/* 初始化参数 */

a = 10

b = 20

g = a + b

fmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)

}

以上实例执行输出结果为:

结果: a = 10, b = 20 and g = 30

Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑。实例如下:

package main

import "fmt"

/* 声明全局变量 */

var g int = 20

func main() {

/* 声明局部变量 */

var g int = 10

fmt.Printf ("结果: g = %d\n", g)

}

以上实例执行输出结果为:

结果: g = 10

Go语言的特点

类型 在变量名后边

也可不显式声明类型, 类型推断, 但是是静态语言, name一开始放字符串就不能再赋值数字

方法,属性 分开 方法名首字母大写就是就是外部可调的

面向对象设计的一个重要原则:“优先使用组合而不是继承”

Dog 也是Animal , 要复用Animal 的属性和方法,

只需要在结构体 type 里面写 Animal

入口也是main, 用用试试

多态, 有这个方法就是这个接口的实现, 具体的类 不需要知道自己实现了什么接口,

使用: 在一个函数调用之前加上关键字go 就启动了一个goroutine

创建一个goroutine,它会被加入到一个全局的运行队列当中,

调度器 会把他们分配给某个 逻辑处理器 的队列,

一个逻辑处理器 绑定到一个 操作系统线程 ,在上面运行goroutine,

如果goroutine需要读写文件, 阻塞 ,就脱离逻辑处理器 直接 goroutine - 系统线程 绑定

编译成同名.exe 来执行, 不通过虚拟机, 直接是机器码, 和C 一样, 所以非常快

但是也有自动垃圾回收,每个exe文件当中已经包含了一个类似于虚拟机的runtime,进行goroutine的调度

默认是静态链接的,那个exe会把运行时所需要的所有东西都加进去,这样就可以把exe复制到任何地方去运行了, 因此 生成的 .exe 文件非常大

Golang 的静态编译

Go 语言和 C 语言的一个很大的区别是, Go 语言只静态编译,做个测试:

一方面是 Go 语言编译后的可执行文件大小比 C 语言的大很多,

另一方面是 C 语言的可执行文件需要依赖 glibc 动态库,

用 ldd 命令可以看出来:

或者直接删除 glibc 动态库, C 可执行程序报错,而 Go 的还能运行:

这时候只有内部命令可以运行,外部命令,包括 ln 甚至最常用的 ls 命令也不能运行了:

设置好 LD_PRELOAD 环境变量之后, ln 命令可以运行,但是 sudo 仍然不能运行

只能靠 root 用户来重新创建软连接了:

所以用 sudo 来 rm 文件要小心,还是用 root 比较好。如果没有预先留一个打开的 root 终端,登录都登不进去。


当前标题:go语言静态成员变量 golang静态变量
网站链接:http://chengdu.cdxwcx.cn/article/hhodpc.html