此篇着重介绍,如何定义变量、常量、Go语言内置类型及Go语言程序设计中的一些技巧。
一、变量
1.1、定义全局变量——关键字声明【var+type】
/*
定义三个类型都是 type 的变量,
分别初始化为相应的值
*/
var vname1, vname2, vname3 type= v1, v2, v3
1.2、定义局部变量——简短声明【:=】
用“:= ”代替var 和 type,但它只能用在函数内部,在函数外部使用则会无法编译通过,所以一般还是用 var 定义全局变量。
/*
编译器会根据初始化的指自动推导出相应的类型
*/
vname1, vname2, vname3:=v1, v2, v3
1.3、特殊变量名——【_】
_(下划线)是个特殊变量名,任何赋予它的值都会被丢弃。
/*
将35赋予b,并同时丢弃34
*/
_,b= 34, 35
1.4、注意
对于已经声明但未使用的变量,Go语言会在编译阶段报错。
/*
变量 i 被声明了但是没被使用
*/
package main
func main(){
var i int
}
二、常量
Go语言中常量可定义为:
- 数值
- 布尔值
- 字符串
语法如下:
const constantname = value
//如果需要,也可以指明常量的类型
const pi float32 = 3.1415926
从第一印象来说,比C/C++的常量声明、定义简单很多,也很灵活,比如:
const pi = 3.1415926
const i = 1000
const MaxThread = 10
const prefix = “astaxie_”
可以得知,并不一定要指定类型,编译器会根据实际初始化的数据进行判断。
三、内置基础类型
3.1、Boolean
Go语言中布尔值的类型为 bool,值为 true/false,默认值 false。
//示例:
var isActive bool //全局变量声明
var enabled, disabled = true, false //忽略类型的声明
func test() {
var available bool //一般声明
valid := false //简短声明
available = true //赋值操作
}
3.2、数值类型
注意:
1、整型具体有:
- int8, int16, int32(别称 rune), int64
- uint8(别称 byte), uint16, uint32, uint64
这些类型之间是不允许相互赋值或操作的,否则会编译出错。哪怕是 int 与 int32,二者都是32位,但并不能互用。
2、复试的形式为:
RE+iMi
如:
var c complex 64 = 5+5i
fmt.Printf("Value is : %v", c)
3.3、字符串
类型是 string,
- 双引号定义
- 单引号定义
3.3.1、双引号定义
var frenchhello string //声明全局变量,var+type
var EmptyString = " " //简约声明
func test() {
no, yes, maybe := "no", "yes", "maybe" //简约声明,同时声明多个变量
frenchhello = "Bonjour" //赋值操作
}
3.3.2、单引号定义
单引号括起来的字符串为 Raw字符串,即字符串在代码中的形式就是打印时的形式,没有字符转义,换行也按原样输出。
m := ' hello
word '
3.3.3、用“+”连接两个字符串
和string类似,Go语言可以使用“+”来连接两个字符串:
s :="hello"
m :="world"
a :=s+m
fmt.Printf("%s\n", a)
3.3.4、修改字符串
在Go语言中,字符串类型是不可变的,如下代码在编译时会报错的:
var s string = "hello"
s[0] = 'c'
那么该如何修改呢?下面有两种方法:
法一:先转换类型,修改后再修改回原类型
s := "hello"
c := []byte(s) //将字符串 s 转换为 []byte 类型
c[0] = 'c'
s2 :=string(c)
fmt.Printf("%s\n", s2)
法二:进行切片
字符串虽然不能更改,但是可以进行切片操作。
s := "hello"
s = "c"+s[1:] //s[1:] 是"hello"的一个切片:"ello"
fmt.Printf("%s\n", s) //输出:"cello"
3.4、错误类型
- Go语言内置有一个 error 类型,专门用来处理错误信息。
- Go语言的 package 里面还专门有一个包 errors 来处理错误。
err := errors.New("emit macho dwarf: else header corrupted")
if err !=nil {
fmt.Print(err)
}
3.5、Go语言数据底层的存储
如图,即为Go语言数据格式的存储。