Go 语言数据类型

变量与常量

变量声明 ,初始化与赋值

单个变量声明和赋值

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 wangwawa

import "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 int

var b int = 12345;

var (
   c int
   d int = 1234
   e string
)
var i,g,h int=4,5,6
var 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 =3
   nn := float32(n)

   fmt.Println(nn)
   fmt.Println(reflect.TypeOf(nn))
   fmt.Println(unsafe.Sizeof(nn))
   fmt.Println(a) //int默认值为0
   a = 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 main

import (
   "fmt"
   "reflect"
)

const name string  = "wawa";

const w_name  = "wawa";

const (
   title = "test"
   dog string = "dog"
)

const names,code = "wawa",0
const 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 = iota
const (
   d = iota //0
   b  =  iota //1
   _ //垃圾桶,跳过2
   _ //垃圾桶,跳过3
   c  =  iota //4
   e  =  3.14 //中间把5插一个进来成3.14
   f  =  iota //6
   g  =  iota * 2 //7 7*2
   h //省略 iota写法,自动引用最上面非空表达式 8*2
   i //省略 iota写法,自动引用最上面非空表达式 9*2
   j = iota //10
   k,l = iota+1, iota+3 //12 14
   m,n //13  15  m引用的k,n引用的是l
   o = 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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值