变量与常量
变量声明 ,初始化与赋值
单个变量声明和赋值
1)变量的声明格式:var <变量名称>【变量类型】
2)变量的赋值格式:<变量名称> =< 值 ,表达式,函数等>
3)声明和赋值同时进行:var <变量名称>【变量类型】=<值,表达式,函数等>
4)分明声明格式:
var(
i int
j float 32
name string
)
a.同一行声明多个变量和赋值:var a,b,c int=1,2,3 或者a,b :=1,2
b.全局变量的声明必须使用var 关键词,局部变量则可以省略,比如a.里面a,b :=1,2只能用到函数内
c,特殊变量下划线“_” 这里的_就是个垃圾桶,把值扔进了垃圾桶后,程序中再不用这个值相当于php里的unset
变量的类型转换
1)GO中不存在隐式转换,类型转换必须是显式的(必须要有目标类型)
2)类型转换只能发生在两种兼容类型之间(int和bool之间是没法转换的)
3)类型转换格式:<变量名称>[:]=<目标类型>(<需要转换的变量>)
变量可见性规则
1)大写字母开头的变量是可导出的,也就是其他包可以读取的,是公用变量
2)小写字母开头的就是不可导出的,是私有变量
test.go
package wangwawaimport "fmt"var Name string = "wawa"; //变量名首字母大写,可被其他包引用func init() {fmt.Println("this is wangwawa test")}func Test() {}
varTest.go
//程序所属包 *必须package main//导入依赖包import ("fmt""reflect""unsafe""awesomeProject/wangwawa")var a intvar b int = 12345;var (c intd int = 1234e string)var i,g,h int=4,5,6var w,v,m =4,5.2,6 //类型可不写,不写就默认电脑位数类型//main函数func main(){fmt.Println(wangwawa.Name)ww,www,wwww := 4,5.2,6 //这种写法只能在函数内var k,_,kk = 3,4.4,4 //_代表放弃,垃圾桶var (f string)var n int =3nn := float32(n)fmt.Println(nn)fmt.Println(reflect.TypeOf(nn))fmt.Println(unsafe.Sizeof(nn))fmt.Println(a) //int默认值为0a = 123;fmt.Println(a)fmt.Println(b)fmt.Println(c)fmt.Println(d)fmt.Println(e) //string默认值为空fmt.Println(f)fmt.Println(i)fmt.Println(h)fmt.Println(g)fmt.Println(w)fmt.Println(reflect.TypeOf(w))fmt.Println(v)fmt.Println(reflect.TypeOf(v))fmt.Println(m)fmt.Println(ww)fmt.Println(www)fmt.Println(wwww)fmt.Println(k)fmt.Println(kk)}
运行结果:
this is wangwawa test
wawa
3
float32
4
0
123
12345
0
1234
4
6
5
4
int
5.2
float64
6
4
5.2
6
3
4
常量,常量声明和iota的使用
1)常量定义形式和常量类型范围
a.常量定义形式上可分为显式和隐式
显式:const identifier [type] = value
隐式:const identifier = value (通常叫无类型常量)
b.常量可以使用内置表达式定义,例如:len(),unsafe.Sizeof()等
c.常量范围目前只支持布尔型、数字型(整数,浮点和复数)和字符串型
constTest.go
//程序所属包 *必须package mainimport ("fmt""reflect")const name string = "wawa";const w_name = "wawa";const (title = "test"dog string = "dog")const names,code = "wawa",0const aname = len(dog)//表达式 这里的函数只能是内置函数,其他自定义的会报错//第二个()是返回类型func ic(g string)(string) {return "11"}//main函数func main(){fmt.Println(ic(w_name))fmt.Println(name)fmt.Println(w_name)fmt.Println(title)fmt.Println(dog)fmt.Println(names)fmt.Println(reflect.TypeOf(names))fmt.Println(code)fmt.Println(reflect.TypeOf(code))fmt.Println(aname)}
运行结果:
11
wawa
wawa
test
dog
wawa
string
0
int
3
2)特别常量iota的使用
a. iota在const关建字出现时将被重置为0
b. const中每新增一行常量声明将使iota计算一次
c.iota常见使用法:
1.跳值使用法
2.插队使用法
3.表达式隐式使用法
4.单行使用法
iota不可以用于函数内
iotaTest.go
//程序所属包 *必须package main//导入依赖包import ("fmt")const a = iotaconst (d = iota //0b = iota //1_ //垃圾桶,跳过2_ //垃圾桶,跳过3c = iota //4e = 3.14 //中间把5插一个进来成3.14f = iota //6g = iota * 2 //7 7*2h //省略 iota写法,自动引用最上面非空表达式 8*2i //省略 iota写法,自动引用最上面非空表达式 9*2j = iota //10k,l = iota+1, iota+3 //12 14m,n //13 15 m引用的k,n引用的是lo = iota //13)//main函数func main(){fmt.Println(a)fmt.Println(d)fmt.Println(b)fmt.Println(c)fmt.Println(e)fmt.Println(f)fmt.Println(g)fmt.Println(h)fmt.Println(i)fmt.Println(j)fmt.Println(k)fmt.Println(l)fmt.Println(m)fmt.Println(n)fmt.Println(o)}
运行结果:
0
0
1
4
3.14
6
14
16
18
10
12
14
13
15
13
如果觉得《Go 语言数据类型》对你有帮助,请点赞、收藏,并留下你的观点哦!