Go语言基础三:基本数据类型和运算符
Go语言数据类型
与其他编程语言一样,Go语言提供了各种数据类型,可分为基本的数据类型和复杂的数据类型。基本的数据类型就是基本的构造块,例如字符串、数字和布尔值。复杂的数据类型是用户自己定义的结构,由一种或者多种基本的数据类型组成。
基本的数据类型
基本的数据类型包括 bool、strin、int、int8、int16、int32、int64、uint、uint8、uint16、uint32、uint64、uintptr、byte、rune、float32、float64、complex64、complex128。
整型
| 类型名 | 字节数 |
|---|---|
| int8 | 有符号 8 位整型 (-128 ~ 127) |
| int16 | 有符号 16 位整型 (-32768 ~ 32768) |
| int32 | 有符号 32 位整型 (-2147483648 ~ 2147483647) |
| int64 | 有符号 64 位整型 (-9223372036854775808 ~9223372036854775807) |
| uint8 | 无符号 8 位整型 (0 ~ 255) |
| uint16 | 无符号 16 位整型 (0 ~ 65535) |
| uint32 | 无符号 32 位整型 (0 ~4294967295) |
| uint64 | 无符号 64 位整型 (0 ~ 18446744073709551615) |
rune类型是Unicode字符类型,和int32类型等价,通常用于表示一个Unicode码点,rune可以和int32可以互换。
byte是unit8类型的等价类型,byte一般用于强调数值是个原始的数据,而不是一个小的整数。
uinptr是一种无符号的整数类型,用于存放指针,没有指定具体的字节大小,但是足以容纳指针。
uinptr类型只有在底层编程才需要,特别是Go语言和C语言函数库或操作系统接口交互的地方。
浮点数
Go语言提供了两种精度的浮点数:float32、float64
这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的取值范围极限值可以在math包中找到。math.MaxFloat32、mathMaxFloat64分别表示两种浮点数类型的取值范围。
| 类型名 | 字节数 |
|---|---|
| float32 | IEEE-754 32位浮点型数 |
| float64 | IEEE-754 64位浮点型数 |
复数
Go语言提供了两种精度的复数类型:complex64、complex128,分别对应float32、float64两种浮点数类型。
直白地说:complex64 = float32实部+虚部、complex128 = float64实部+虚部
内置函数complex用于构建复数,内置函数real、imag函数分别返回复数的实部和虚部。
| 类型名 | 字节数 |
|---|---|
| complex64 | 32 位实数和虚数 |
| complex64 | 64 位实数和虚数 |
布尔型
一个布尔型的值只有两种:true、false。当声明一个布尔型变量但没有赋值时,默认值为false。
布尔值并不会隐式转换为数字值0或1,如果想实现转换,必须由一个if语句辅助转换。
字符串
子字符串
子字符串:操作s[i:j]基于对原始字符串s的第i个字节开始到第j个字节(并不包含j本身,并且从0开始)生成一个新的字符串。
无论i或者j都可以被省略不写,当i被省略时,代表从0开始;当j被省略时,代表至最后一位结束。例如:
package main
import "fmt"
func main(){
var s string = "0123456"
s_1, s_2, s_3 := s[0:6], s[:6], s[0:]
fmt.Println(s_1)
fmt.Println(s_2)
fmt.Println(s_3)
}
输出结果如下
012345 //不包含第6位
012345 //省略i则代表从0开始
0123456 //省略j则代表至最后一位结束
字符串内符号含义
| 符号 | 含义 |
|---|---|
| \a | 响铃 |
| \b | 退格 |
| \f | 换页 |
| \n | 换行 |
| \r | 回车 |
| \t | 制表符 |
| \v | 垂直制表符 |
| ' | 单引号 (只用在 ''' 形式的rune符号面值中) |
| " | 双引号 (只用在 "..." 形式的字符串面值中) |
| \ | 反斜杠 |
Go语言的运算符
Go语言内置的运算符有:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 其他运算符
运算符优先级表
对于相同优先级的运算符的运算方向均为从左至右。你也可以通过括号来提升运算符的优先级。
由上至下优先级由高至低
| 优先级 | 运算符 |
|---|---|
| 1 | * / % << >> & &^ |
| 2 | + - | ^ |
| 3 | == != < <= > >= |
| 4 | && |
| 5 | || |
运算符表
| 运算符 | 描述 |
|---|---|
| + | 相加 |
| - | 相减 |
| * | 相乘 |
| / | 相除 |
| % | 求余 |
| ++ (只有a++没有++a) | 自增 |
| -- (只有a--没有--a) | 自减 |
| == | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
| != | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
| > | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |
| < | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
| >= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
| <= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
| && | 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 |
| || | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 |
| ! | 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 |
| & | 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 |
| | | 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或 |
| ^ | 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 |
| << | 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 |
| >> | 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 |
| = | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
| += | 相加后再赋值 |
| -= | 相减后再赋值 |
| *= | 相乘后再赋值 |
| /= | 相除后再赋值 |
| %= | 求余后再赋值 |
| <<= | 左移后赋值 |
| >>= | 右移后赋值 |
| &= | 按位与后赋值 |
| ^= | 按位异或后赋值 |
| |= | 按位或后赋值 |
| & | 返回变量存储地址 |
| * | 指针变量。 |
Go语言基础三:基本数据类型和运算符的更多相关文章
- 疯狂JAVA——第三章 数据类型和运算符
3.1注释 1.单行注释 2.多行注释 3.文档注释——文档注释以斜线后紧跟两个星号(/**)开始,以星号后紧跟一个斜线结束(*/),中间部分都是文档注释,会被提取到API文档中. API文档类似于产 ...
- 【搬砖】安卓入门(2)- Java开发编程基础--进制转换和运算符
02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 ...
- IOS开发新手教程(一)-数据类型和运算符
OC语法入门(一) 数据类型和运算符 1.1凝视 凝视和其它语言一样,同意单行 ,多行凝视,一份规范的代码里面须要有一些正式的凝视,例如以下凝视: /* 这是多行 凝视 */ //这是多行凝视 OC语 ...
- Java 第二章 变量、数据类型和运算符
第二章 变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...
- Java1变量数据类型和运算符
day02_变量数据类型和运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class jh_01_数据类型说明 { public ...
- Java中的变量,数据类型和运算符
变量,数据类型和运算符 1.变量是一个数据存储空间的表示,它是储存数据的基本单元. 如何理解这句话,下面用一个表格可以形象的表达: 变量与房间之间的对应关系 房间名称 变量名 房间类型 变量类型 入住 ...
- PostgreSQL自学笔记:5 数据类型和运算符
5 数据类型和运算符 5.1 PostgreSQL 数据类型介绍 5.1.1 整数类型 整型类型 字节 取值范围 smallint 2字节 -2^15 ~ 2^15 int integer 4字节 - ...
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- Python第三章-输入输出和运算符
输入输出和运算符 一.输入和输出 1.1 输出 `print()`函数用来向终端输出数据(其实也可以向文件输出数据,后面再讲) 可以传递多个参数,则输出的时候 python 会把多个参数的值用空格隔开 ...
随机推荐
- UART串口及Linux实现
UART,全称Universal Asynchronous Receiver Transmitter,通用异步收发器,俗称串口.作为最常用的通信接口之一,从8位单片机到64位SoC,一般都会提供UAR ...
- gitee上传代码到仓库步骤(最简洁图文+命令说明)
gitee上传代码到仓库步骤(最简洁图文+命令说明) 目录 1.初始化项目 2.将当前目录下所有需要上传的文件代码等资源添加到缓存区 3. 提交缓存区里面的主要内容到本地仓库 4.添加一个远程仓库的地 ...
- npm 是什么?
npm 是什么? 本文写于 2020 年 6 月 16 日 最近帮几个同学装开发环境,发现他们会各种"卡死"在 npm 安装一些包的过程中. 他们会非常纠结这个命令我明明敲的和网上 ...
- 项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
前言 本项目的出现理由只是笔者的一个念头,于是利用专业Qt和Opencv相关的知识开发一个辅助工具,本文章仅用于Qt和Opencv结合的学习. Demo演示效果 运行包下载地 ...
- 为什么说 Gradle 是 Android 进阶绕不去的坎 —— Gradle 系列(1)
请点赞,你的点赞对我意义重大,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,欢迎 ...
- 好客租房22-react组件的两种创建方式(类组件)
2.2使用类创建组件 类组件:使用ES6的class创建的组件 约定1:类组件必须以大写字母开头 约定2:类组件应该继承react.component父类 从中可以使用父类的方法和属性 约定3:组件必 ...
- 个人冲刺(四阶段)——体温上报app(一阶段)
任务:完成了后台数据库的类模块 MyDBHelper.java package com.example.helloworld; import android.content.Context; impo ...
- 记一次生产事故的排查与优化——Java服务假死
一.现象 在服务器上通过curl命令调用一个Java服务的查询接口,半天没有任何响应.关于该服务的基本功能如下: 1.该服务是一个后台刷新指示器的服务,即该服务会将用户需要的指示器数据提前计算好,放入 ...
- DYOJ 【20220317模拟赛】瞬间移动 题解
瞬间移动 题意 三维空间中从 \((0,0,0)\) 开始,每次移动 1,问刚好走 \(N\) 次能到 \((X,Y,Z)\) 的方案数 \(N\le10^7\),答案模 \(998244353\) ...
- 2020.12.12【NOIP提高B组】模拟 总结
第一次来 B 组做,虚的很 T1: 容斥原理 比赛时也打了个大致,但挂了,只有 50 分. 赛后重构了一下代码,AC \(UPDATE:2020/12/13\ \ \ 14:10\) 思路: 像前缀和 ...