当前位置:网站首页>Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇
Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇
2022-07-30 12:11:00 【梦想橡皮擦】
学习前的铺垫
如果一门语言是动态语言,那数据类型不是很重要,但当待学习的语言是静态语言时,数据类型的重要性就凸显出来了,而且必须作为必备只是进行学习。
在 Go 语言中,数据类型主要用于声明变量和函数返回值的类型,在声明时是为了把数据所需的内存规定出来,这样可以充分利用内存。
因为有其它语言的基础,所以直接学习 Go 中的各类型即可。
Go 数字类型
数字类型分为三种,即整型,浮点型和其它数字类型,其中整型又分为:
- uint8:无符号 8 位;
- uint16:无符号 16 位;
- uint32:无符号 32 位;
- uint64:无符号 64 位;
- int8:有符号;
- int16:有符号;
- int32:有符号;
- int64:有符号。
浮点类型,包含两种,分别是 float32,float64,还有 complex64 和 complex128。
其它数字类型说明如下:
byte:与无符号 int,即int8类似;rune:无符号int32类似;uint:32 位或者 64 位;int:与unit类似;uintptr:无符号整数。
以上都是数字类型,除此之外还有更多内容,都将在后文重点学习。
Go 变量
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 如果声明了一个变量,但是未使用,同样会报错,例如下述代码。
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 常量
常量就是不可被修改的变量,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
今天的最后一个知识点是运算符的优先级,如果你有其它语言基础,这部分自动忽略即可。
边栏推荐
- 【Kaggle:UW-Madison GI Tract Image Segmentation】肠胃分割比赛:赛后复盘+数据再理解
- Apifox 生成接口文档 教程与操作步骤
- 结合实战,浅析GB/T28181(三)——实况点播
- 嵌入式环境下并发控制与线程安全
- 概率论的学习整理3: 概率的相关概念
- 反转链表-迭代反转法
- AlphaFold预测了几乎所有已知蛋白质!涵盖100万物种2.14亿结构,数据集开放免费用...
- Zhou Hongyi: Microsoft copied the 360 security model and became the largest security company in the United States
- 反转链表-递归反转法
- 【MySQL系列】-B+树索引和HASH索引有什么区别
猜你喜欢

MySQL【多表查询】

Kubernetes之本地存储

云原生应用的概念和云原生应用的 15 个特征

备战金九银十!2022面试必刷大厂架构面试真题汇总+阿里七面面经+架构师简历模板分享

概率论的学习整理3: 概率的相关概念

限时招募!淘宝无货源副业,800/天,不限经验,男女皆可,仅限前200名!

SCM engineers written questions induction summary
![[SCTF2019]Flag Shop](/img/26/20e21ec873f41f2633703216453a44.png)
[SCTF2019]Flag Shop

Concepts of cloud-native applications and 15 characteristics of cloud-native applications

数据湖(十八):Flink与Iceberg整合SQL API操作
随机推荐
IO/multiplexing (select/poll/epoll)
CMake library search function does not search LD_LIBRARY_PATH
数字量输入输出模块DAM-5088
Mysql索引结构
unity对象池(学习)
mapbox-gl开发教程(十四):画圆技巧
私有化部署的即时通讯平台,为企业移动业务安全保驾护航
External Force Estimation Based on Time Delay Estimation with Perturbed Kalman Filter
Homework 7.29 correlation function directory and file attributes related functions
ECCV 2022 | 新加坡国立大学提出:全新可恢复型模型遗忘框架LIRF!
Digital input and output module DAM-5088
崩了,该来的终究躲不掉
Apifox 生成接口文档 教程与操作步骤
微信视频号视频如何下载提取?视频号直播回放如何下载?方法很简单!
11 年膨胀 575 倍,微信为何从“小而美”变成了“大而肥”?
Matlab基础(2)——向量与多项式
[BJDCTF2020]Cookie is so stable-1|SSTI injection
saltstack学习3模块
Matlab基础(3)——元胞与结构体
A tutorial on how to build a php environment under win