5

Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇

 2 years ago
source link: https://blog.51cto.com/cnca/5561833
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

学习前的铺垫

如果一门语言是动态语言,那数据类型不是很重要,但当待学习的语言是静态语言时,数据类型的重要性就凸显出来了,而且必须作为必备只是进行学习。

在 Go 语言中,数据类型主要用于声明变量和函数返回值的类型,在声明时是为了把数据所需的内存规定出来,这样可以充分利用内存。

因为有其它语言的基础,所以直接学习 Go 中的各类型即可。

Go 数字类型

数字类型分为三种,即整型,浮点型和其它数字类型,其中整型又分为:

  • uint8:无符号 8 位;
  • uint16:无符号 16 位;
  • uint32:无符号 32 位;
  • uint64:无符号 64 位;
  • int8:有符号;
  • int16:有符号;
  • int32:有符号;
  • int64:有符号。

浮点类型,包含两种,分别是 float32float64,还有 complex64complex128

其它数字类型说明如下:

  • byte:与无符号 int,即 int8 类似;
  • rune:无符号 int32 类似;
  • uint:32 位或者 64 位;
  • int:与 unit 类似;
  • uintptr:无符号整数。

以上都是数字类型,除此之外还有更多内容,都将在后文重点学习。

Go 中变量的声明,在上一篇博客中我们已经涉及,这次我们展开说说。

首先,可以一次申请多个变量:

var bianliang,bianlaing type

参考下述测试代码:

package main

import "fmt"

func main() {
	var a string = "梦想橡皮擦"
	fmt.Println(a)

	var b, c int = 1, 2
	fmt.Println(b, c)
}

在声明变量的时候如果没有给初始值,系统自动赋零值,例如 int 类型为 0,float 类型为 0.0 ……(上篇博客已经学习,可以回顾一下)

目前你仅学习了数字类型,所有数字类型的零值,都是 0。

Go 中的变量声明也可以省略变量类型,即下述代码也可正常运行。

package main

import "fmt"

func main() {

	var a, b = 1, 2
	fmt.Println(a, b)
}

系统自动推断变量类型。

变量声明简化写法

使用 var 声明变量时,还可以简写,例如:

name := "梦想橡皮擦"

该写法叫做推导声明写法,编译器会根据右值类型推断左值类型,而且需要注意,使用 := 需要左值变量必须在之前没有没定义过,否则就会报错,测试代码如下:

Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇_数据类型

在 Go 如果声明了一个变量,但是未使用,同样会报错,例如下述代码。

package main

import "fmt"

func main() {

	b := 3
	fmt.Println("不使用 b")
}

错误信息是 7:2: b declared but not used,这点非常有趣,在其它语言是没有类似的验证的,但这保证了无用变量的声明和空间的浪费。

并行/同时赋值

在 Go 中,可以同时对多个变量赋值,测试代码如下所示。

package main

import "fmt"

func main() {

	a, b, c := 3, 2, 1
	fmt.Println(a, b, c)
}

相应的如果希望交换两个变量值,也可以像 Python 一样,直接进行交换。

a,b = b,a

这里先认识一个特殊的符号,_ 空白标识符,该变量可以用于抛弃值,例如下述代码。

_,b = 1,2

其中 1 会被抛弃,其中 _ 实际是一个只写变量,不可读,该变量也被叫做匿名变量,它不占内存空间,也不会分配内存,匿名变量可以多次声明,即下述代码:

_, b := 1, 2
_, a := 1, 2

常量就是不可被修改的变量,Go 常量支持的数据类型有布尔型,数字型,字符串型,定义语法格式是:

const bianliang [type] = value

其中 type 被声明叫做显式定义,无 type 表示隐式声明。

多个相同类型的声明可以简写成一行。

const name,my_str = "橡皮擦","一个普通的字符串"

Go 中有一个特殊常量 iota,是一个可以被编译器修改的常量。

iota 在 const 关键字出现时被充值为 0,const 中每新增一行常量声明,iota 增加一次计数,所以将 iota 当成 const 语句块的行索引也可以。

Go 运算符

运算符知识点在任何语言都中非常类似,一元的有:+-*/%++--,在 Python 中不见的自增和自减操作符又重新出现了。

上述操作符一般叫做算数运算符,除此之外还有关系运算符,即大于小于等内容。

逻辑操作符也是三个,分别是 逻辑与 &&,逻辑或 ||,逻辑非 !

位运算符可以先略过,后续用到在考虑复习一下。

在接下来就是赋值运算符,即与 = 号相关的运算符,也是通用知识点,直接掌握了。

重点要说明的是下述两个特殊运算符,这里与 C 语言同源,即 & 取地符,* 指针变量标记。

func main() {

	_, b := 1, 2
	// _, a := 1, 2
	fmt.Println("变量 b 的地址是", &b)
}

声明一个 int 类型的指针变量,使用代码如下所示。

_, b := 1, 2
var ptr *int
// 赋值
ptr = &b

今天的最后一个知识点是运算符的优先级,如果你有其它语言基础,这部分自动忽略即可。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK