《Golang 入门系列五》golang的常量、变量、数组

IT--小哥 · · 5486 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言:本文主要介绍常量和变量的使用,以及关于变量的可见性规则、引用类型和值类型的区别。

 

一、常量

常量表达式的值在编译期计算,而不是在运行期。常量的值不可修改,这样可以防止在运行期被意外或恶意的修改。

1.1  常量的声明

常量的定义格式:

const identifier [type] = value

显式定义常量:

const a string = "Tom"

隐式定义常量:(这里用了类型推导)

const a = "Tom"

多个相同类型常量定义:

const first_name, last_name = "T", "om"

示例:

package main

import (
	"fmt"
)

const first_name, last_name = "T", "om"

func main() {
	fmt.Printf("My name is :%s%s",first_name,last_name)
}

运行结果:

My name is :Tom

1.2  常量表达式的继承

示例:

package main

import (
	"fmt"
)

const (
a = iota
b
c = iota
d
e
)

const (
f = iota
)

func main() {
	fmt.Printf("a = %d\nb = %d\nc = %d\nd = %d\ne = %d\nf = %d",a,b,c,d,e,f)
}

结果:

a = 0
b = 1
c = 2
d = 3
e = 4
f = 0

二、变量

变量是有明确类型的。编译器会检查函数调用中,变量类型的正确性。

2.1  变量的声明

变量声明的表达式:

var 变量名字 类型 = 表达式

常规变量声明:

var Name string
Name = "Tom"

变量的类型推导:

var Age = 27

变量的省略调用:

Sex := "男"

2.2  多变量的声明

示例:

package main

import "fmt"

var Name string

//多个变量的声明
var Job,Mail  = "DBA","1234568@qq.com"

var (
	Son_Name = "HB"
	Son_Age = 1
	Son_sex = "男"
)

func main() {
	Name = "Tom"
	var Age = 27
	Sex := "男"

	fmt.Printf("My name is %s;My age is %d;My sex is %v;My job is %v;My e-mail is %v\n",Name,Age,Sex,Job,Mail)
	fmt.Printf("My son name is %s;My son age is %d;My son sex is %v",Son_Name,Son_Age,Son_sex)
}

结果:

My name is Tom;My age is 27;My sex is 男;My job is DBA;My e-mail is 1234568@qq.com
My son name is HB;My son age is 1;My son sex is 男

2.3  变量的生命周期

变量的生命周期指的是在程序运行期间变量有效存在的时间间隔。

包变量(全局变量):对于包变量来说,它们的生命周期和整个程序的运行周期是一致的,一个全局变量可以声明后在整个程序中使用。

局部变量:在函数或块中声明的变量,它们只能由在函数或代码块中的语句使用。局部变量对于它们自己以外的函数是未知的。函数的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。

示例:

package main

import "fmt"

var Name = "Tom"


func main() {
	Name = "tom"
	fmt.Printf("My name is %s",Name)
}

结果:

My name is tom

在程序中,局部变量和全局变量的名称可以相同,但函数内部的局部变量的值将优先(也就是说局部变量会覆盖全局变量)。

三、数组

数组是一个具有相同数据类型的元素组成的固定长度的有序集合。同类型的两个数组([5]string和[10]string是两个完全不同的数组)支持"=="和"!="比较,但是不能比较大小。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。

一维数组的声明方式:

var variable_name [SIZE] variable_type

多维数组的声明方式:

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

示例:

package main

import "fmt"

func shuzu(x [5]int) {
	var i,j int
	for i = 0; i < 5; i++ {
		x[i] = x[i] +10
	}

	for j = 0; j < 5; j++ {
		fmt.Printf("数组传参:Element[%d] = %d\n", j, x[j] )
	}
}


func main() {
	//一维数组
	m := [5]int{3,4,5,6,7}
	n := [5]int{3,4,5,6,7}
	fmt.Printf("数组比较:m = n is %v\n\n",m == n)
	shuzu(m)

	var a [10]int
	var i,j int
	for i=0;i < 10 ; i++ {
		a[i] = i+10
	}

	for j = 0; j < 10; j++ {
		fmt.Printf("数组赋值:Element[%d] = %d\n", j, a[j] )
	}

	//一个三行四列的二维数组
	b := [3][4]int{{0, 1, 2, 3} , {1, 2, 3, 4} , {2, 3, 4, 5}}
	for i = 0; i < 3; i++ {
		for j = 0; j < 4; j++ {
			fmt.Printf("多维数组:b[%d][%d] = %d\n",i,j,b[i][j])
		}
	}
}

结果:

数组比较:m = n is true

数组传参:Element[0] = 13
数组传参:Element[1] = 14
数组传参:Element[2] = 15
数组传参:Element[3] = 16
数组传参:Element[4] = 17
数组赋值:Element[0] = 10
数组赋值:Element[1] = 11
数组赋值:Element[2] = 12
数组赋值:Element[3] = 13
数组赋值:Element[4] = 14
数组赋值:Element[5] = 15
数组赋值:Element[6] = 16
数组赋值:Element[7] = 17
数组赋值:Element[8] = 18
数组赋值:Element[9] = 19
多维数组:b[0][0] = 0
多维数组:b[0][1] = 1
多维数组:b[0][2] = 2
多维数组:b[0][3] = 3
多维数组:b[1][0] = 1
多维数组:b[1][1] = 2
多维数组:b[1][2] = 3
多维数组:b[1][3] = 4
多维数组:b[2][0] = 2
多维数组:b[2][1] = 3
多维数组:b[2][2] = 4
多维数组:b[2][3] = 5

为了方便大家交流,本人开通了微信公众号(关注看更多精彩)和QQ群,QQ群1(291519319)和QQ群2(659336691)。喜欢技术的一起来交流吧


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:IT--小哥

查看原文:《Golang 入门系列五》golang的常量、变量、数组

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5486 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传