Go语言入门之变量、常量、指针以及数据类型

Go语言入门之变量、常量、指针以及数据类型

1.变量的声明和定义

var 变量名 变量类型

// 声明单变量
var age int    // 定义int类型的年龄,初始值为0

// 声明多变量
var a, b int = 1, 2

// 声明变量不写数据类型可以自动判断
var a, b = 123, "hello"

// 变量声明另一种方式(只能声明局部变量)
a, b := 123, "hello"   // 既声明又赋值,如果之前声明过再用这个则会报编译错误

// 交换相同类型变量的值
a, b = b, a

// 声明全局变量
var ( 
    a int
    b bool
)

// 假设有个numbers的函数返回了三个值,获取返回值的后两个
_,numb,strs := numbers() 
fmt.Println(numb,strs)

注意:

  • 除全局变量外的其他变量声明必须使用,否则会编译错误。
  • 当局部变量和全局变量名称相同时,会优先考虑局部变量

2.常量

变量定义后经过初始化便为常量,常量只有布尔,整型,浮点型,底层类型这些类型定义

Go语言常量特点

  • 支持无类型常量(定义常量时不指定类型)
  • 支持隐式类型转换
  • 可用于实现枚举

(1)常量的定义

Go语言引入const关键字来声明变量

const a int = 1   // 正常定义
canst b = 2       // 无类型常量 定义后会通过隐式转换转为初始值对应的类型int

(2)常量生成器(枚举)

iota   // 从0开始加1

例子:

// 显示奇数
const (
		a = 2*iota + 1
		b
		c
		d
		e
		f
	)
	fmt.Println(a, b, c, d, e, f)

// 输出:1 3 5 7 9 11

3.指针

指针是一个变量,其值是另一个变量的内存地址

必须要先声明一个指针,然后才能使用它来存储任何变量地址

var p *int   // var 指针名  指针类型  未初始化默认值为nil

指针的操作

  • &是取地址操作符
  • *是取值操作符
  • *数据类型是指针类型
    var ptr *int      // 定义指针,未初始化
	a := 10           // 定义整型10
	ptr = &a          // 将a赋值给ptr
	fmt.Println(ptr)  // 打印的是指针地址:0xc00000a0a8
	fmt.Println(*ptr) // 打印的是指针指向的地址值:10
	*ptr = 20
	fmt.Println(a) // 打印的是a的原地址值,已被指针修改,结果为:20

指针未初始化取值会报错

    // 声明指针 此时a为nil
	var a *int
    // 这会报错,原因是此时a的值是nil,系统访问不到nil的地址值,
    // 我们需要将指针重新指向一个变量,或者为指针重新开辟地址
	*a = 10

解决方案:

  • 1.用new在内存中申请一个地址
  • 2.重新赋予其其他变量的地址
var a *int    
// 初始化后的内存空间 其值为对应类型的零值
a = new(int)
*a = 10
fmt.Println(*a)   // 打印10

var ptr *int      // 定义指针,未初始化
b := 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值