GO-变量&常量&类型

GO的变量

go时静态语言,所以不支持在运行时改变变量的类型。
go变量的类型是由关键字var来表示的。

var i int = 1 //定义int型变量i

在定义go的变量时,可以不显示制定变量的类型,而有编译器来推断。

var i : = 1 //定义变量i,类型由编译器推断

go支持同时定义多个变量,同时对多个变量进行赋值。

//同时定义三个变量int型变量 x,y,z
var x,y,z int

//同时定义两个变量 a 和 b,他们的值都是使用的默认值
var (
a int
b float32
)

//同时对两个变量赋值
a, b := 1, 1.0

在对变量赋值时,先计算相关值,然后从左向右依次赋值。

data, i := [3]int{0, 1, 2}, 0 //定义data为int型数组,初始化为{0,1,2};定义int型值i,初始化为0
i, data[i] : = 2, 100 //将i的值设置为2,将data[0]设置为100,这里的i还是0。注意这里的i还没有赋值为2,所以不是data[2]=100

在go语言中,支持使用下划线(_)作为占位符,抛弃不需要的返回值。

func test() (int, string) {
	return 1, "a"
}

func main() {
	_, a = test()
}

在go语言中定义的局部变量为使用的话,在代码编译时会报错;但是全局变量不会。

var s string //此处不会
func main() {
	i := 0 //此处编译时会报错
}

常量

常量由关键值 const 指定。常量必须时编译时可以预期的数值、布尔值或字符串。

const i, j int = 0, 1

//定义常量组,注意此处是直接使用的=, 而不是 :=
const (
a = 1
b = "b"
)

在函数中,未使用的局部常量不会引发编译错误。

func main() {
	const a = 10 //此处不会引发编译错误
}

常量值还可以是 len、cap、unsafe.Sizeof 等编译期可确定结果的函数返回值。

const (
a = "abc"
b = len(a)
c   = unsafe.Sizeof(b)
)

枚举

go语言的枚举多由常量组组成。在go中 iota 定义常量组中从0开始开始,按行计数的自增枚举值。

const (
a iota // a = 0
b      // b = 1
c.     // c = 2
)

常量组的定义可以使用表达式,并自行向下复制。

const (
_  iota
KB  1<<(10 * iota)  //iota的值为1
MB                  //iota值为2,MB = 1 <<(10 * 2)
GB
)

在同一组常量中,可以定义多个iota,各自增长。

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

在常量组中,iota可以被打断,并显示恢复。

const (
  a = iota //a = 0
  b
  c = 'c'
  d = iota //d = 3,显示恢复了,并且b,c的行数被记录使用。
)

还可以通过自定义类型实现枚举

type Color int

const (
  RED Color = iota
  BLACK
  BLUE
)

func test(Color c) {}

func main() {
  c := BLACK
  test(c)
  
  test(1) // 编译器会自动做类型转换
  x := 1
  test(x) //编译器会报错,因为 x 为int 类型 
}

基本类型

类型长度默认值说明
bool1false
byte10uint8
rune40Unicode Code Point, int32
int, uin4 or 8032位 or 64位
int8, uin810-128~127, 0~255
int16, uint1620-32768 ~ 32767, 0 ~ 65535
int32, uint3240-21亿~ 21亿, 0 ~ 42亿
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
指针常量和常指针变量是C/C++中的两个不同的概念。指针常量是指指向常量的指针,即指针的指向是固定的,不能指向其他变量常量,但可以通过指针来修改指向的实体变量的值。常指针变量是指指针变量本身是常量,即指针的值(即指针的指向)是固定的,不能改变,但可以通过常指针变量来修改指向的实体变量的值。 举个例子来说明,假设我们有一个整型变量num,并声明一个指向整型常量的指针常量ptr和一个常指针变量constPtr: const int* ptr; // 指针常量,指向整型常量 int* const constPtr; // 常指针变量,指向整型变量 在上述代码中,ptr是一个指针常量,它指向一个整型常量。这意味着ptr的指向是固定的,不能指向其他变量常量,但可以通过ptr来修改指向的整型常量的值。 而constPtr是一个常指针变量,它指向一个整型变量。常指针变量的指向是固定的,不能改变,但可以通过constPtr来修改指向的整型变量的值。 所以,指针常量和常指针变量在指针的指向和修改能力上有所不同。指针常量的指向不可变,但可以修改指向的实体变量的值;常指针变量的指向可变,但指向的实体变量的值不可变。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++之指针常量常量指针和常指针常量](https://blog.csdn.net/weixin_43340455/article/details/124204230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [详解C语言中的常量指针和指针常量](https://download.csdn.net/download/weixin_38557980/13987495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [区别:指针常量、指针变量常量指针和常量指针常量](https://blog.csdn.net/CYJ2014go/article/details/78203404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值