成都市城乡建设委员会网站/国家免费技能培训有哪些
一.运算符
Go语言内置的运算符有:
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
1.1 算术运算符
注意:++(自增)和--(自减)在go语言中是单独的语句,并不是运算符。
1.2 关系运算符
1.3 逻辑运算符
1.4 位运算符
位运算符对整数在内存中的二进制位进行操作。
1.5 赋值运算符
二.变量和常量
1.1 变量
1.1.1 变量声明
Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。并且Go语言的变量声明后必须使用。
- 标准声明
Go语言的变量声明格式为:
var 变量名 变量类型
变量声明以关键字var开头,变量类型放在变量的后面,行尾无需分号。
var name string
var age int
var isOk bool
- 批量声明
每声明一个变量就需要写var关键字会比较繁琐,go语言还支持批量声明变量:
var (a stringb intc boold float32
)
1.1.2 变量初始化
Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每一个变量都会被初始化成其类型的默认值,例如:整型和浮点型变量的默认值为0,字符串变量的默认值为空字符串,布尔型变量默认值为false,切片,函数,指针变量的默认值为nil。
当然我们也可以在声明变量的时候为其指定初始值。格式为:
var 变量名 类型 = 表达式
举个例子:
var name string = "zhangsan"
var sex int = 1
或者一次初始化多个变量:
var name, sex = "zhangsan", 1
- 类型推导
有时候我们会将变量的类型忽略,这个时候编译器会根据等号右边的值来推导变量类型完成初始化。
var name = "zhangsan"
var sex = 1
- 短变量声明
在函数内部,可以使用更加简略的 ' := ' 方式声明并初始化变量。
package mainimport ("fmt"
)//全局变量
var m = 10func main() {n := 10m := 200 //此处声明局部变量mfmt.Println(m, n)
}
- 匿名变量
在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量。匿名变量用一个下划线_表示:
package mainfmt ("fmt"
)func foo() (int, string) {return 10, "zhangsan"
}func main() {x, _ := foo()_, y := foo()fmt.Println("x=", x)fmt.Println("y=", y)
}
匿名变量不占用命令空间,不会分配内存,所以匿名变量之间不存在重复声明。(在Lua等编程语言中,匿名变量也被叫做哑元变量)。
注意事项:
- 函数外的每一个语句都必须以关键字开始(var const func等)。
- :=不能使用在函数外
- _多用于占位,表示忽略值
1.2 常量
1.2.1 简介
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的值。常量的声明和变量声明非常相似,只是把var换成const,常量在定义的时候必须赋值。
const pi = 3.1415
const e = 2.7182
声明了pi和e这两个变量之后,在整个程序运行期间它们的值都不能再发生变化了。
多个常量也可以一起声明:
const (pi = 3.1415e = 2.7182
)
const同时声明多个常量时,如果省略了值则表示和上一行的值相同。
//n1,n2,n3的值都是100
const (n1 = 100n2n3
)
1.2.2 iota
iota是go语言的常量计数器,只能在常量的表达式中使用,iota在const关键字出现是将被重置为0。const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。使用iota能简化定义,在定义枚举时很有用。
const (n1 = iota //0n2 //1n3 //2n4 //3
)
1.2.3 iota常见用法
- 使用下划线_跳过某些值
const (n1 = iota //0n2 //1_ n3 //3)
- iota声明在中间插队
const (n1 = iota //0n2 = 100 n3 = iota //2n4 //3
)const n5 = iota // 0
- 定义数量级
const (_ = iotaKB = 1 << (10 * iota) // 1 << (10 * 1)MB = 1 << (10 * iota) // 1 << (10 * 2)GB = 1 << (10 * iota) // 1 << (10 * 3)TB = 1 << (10 * iota) // 1 << (10 * 4)PB = 1 << (10 * iota) // 1 << (10 * 5))
- 多个iota定义在一行
const (a, b = 1 + iota, 2 + iota // 1 + 0,2 + 0c, d // 1 + 1, 2 + 1e, f // 1 + 2, 2 + 3)
总结:同一行的iota值相同,经过一行,iota值加1,不管有没有用到iota。
三. 基本类型
3.1 基本类型的介绍
Golang更明确的数字类型命名,支持Unicode,支持常用数据结构。
支持八进制,六进制,以及科学记数法。标准库math定义了各数字类型取值范围。
a, b, c, d := 071, 0x1F, 1e9, math.MinInt16
空指针在go语言中是nil,而非C/C++的NULL。
3.1.1 整型
整型分为以下两大类:
- 有符号整型:int8,int16,int32,int64
- 无符号整型:uint8,uint16,uint32,uint64
其中uint8就是我们熟知的byte类型,int16对应C语言的short类型,int64对应C语言中的long类型。
3.1.2 浮点型
Go语言支持两种浮点类型:float32和float64。
这两种浮点型数据格式遵循IEEE 74标准:float32的浮点数最大范围约为3.4e38,可以使用常量定义math.MaxFloat32。float64的浮点数最大范围约为1.8e308,可以使用常量定义math.MaxFloat64。
3.1.3 复数
complex64和complex128
复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。
3.1.4 布尔值
Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。
注意:
- 布尔类型变量默认值为false。
- Go语言中不允许将整型强制转换为布尔型。
- 布尔型无法参与数值运算,也无法与其他类型进行转换。
3.1.5 字符串
Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型一样。Go语言里的字符串的内部实现使用UTF-8编码。字符串的值为双引号中的内容,可以在Go语言的源码中直接添加非ASCII码字符。
s1 := "hello"
s2 := "你好"
- 字符串转义字符
Go语言的字符串常见转义符包含回车,换行,单双引号,制表符等:
- 多行字符串
Go语言中需要定义一个多行字符串时,就必须使用反引号字符:
反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。
- 字符串的常用操作
3.1.6 byte和rune类型
组成每一个字符串的元素叫做字符,可以通过遍历或者单个获取字符串元素获取字符。字符用单引号包裹。
var a = '中'
var b = 'x'
Go语言的字符有以下两种:
uint8类型,或者叫byte类型,代表ASCII码的一个字符。
int32类型,或者叫rune类型,代表一个UTF-8字符。
当需要处理中文,日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。Go使用特殊的rune类型来处理Unicode,让基于Unicode的文本处理更加方便,也可以使用byte类型进行默认字符串处理,性能和扩展性都有照顾。
因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则会出现上面第一行的结果。
字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的,字符串是由byte字节组成,所以字符串的长度是byte字节长度。rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。
一个字符可能由多个byte组成,所以len()字符串变量得到的长度可能大于字符串变量长度,想要得到实际字符串长度,可能先转为[]rune数组,求[]rune数组长度。
package mainimport "fmt"func traversalString(s string) {fmt.Printf("strlen:%d", len(s))fmt.Println()//bytebt := []byte(s)for i := 0; i < len(bt); i++ {fmt.Printf("%v(%c)", bt[i], bt[i])}fmt.Println()//runern := []rune(s)for i := 0; i < len(rn); i++ {fmt.Printf("%v(%c)", rn[i], rn[i])}fmt.Println()fmt.Printf("[]rune:%d", len(rn))
}func main() {traversalString("pprof.cn博客")
}
- 修改字符串
要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换成string。无论哪种转换都会重新分配内存,并复制字节数组。
3.1.7 类型转换
Go语言中只有强制类型转换,没有隐式类型转换。并且该语法只能在两个类型之间支持相互转换的时候使用。
强制类型转换的基本语法:
T(表达式)
其中,T表示要转换的类型。表达式包括变量,复杂算子和函数返回值等。
package mainimport ("fmt""math"
)func sqrtDemo() {var a, b = 3, 4var c int//math.Sqrt参数类型是float64类型,需要强制类型转换//返回值是float64,而c是int类型,需要强制类型转换c = int(math.Sqrt(float64(a*a + b*b)))fmt.Println(c)
}func main() {sqrtDemo()
}
相关文章:

Go——运算符,变量和常量,基本类型
一.运算符 Go语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 1.1 算术运算符 注意:(自增)和--(自减)在go语言中是单独的语句,并不是运算符。 1.2 关系运算符 1.3 逻辑运算符 1.4 位运算符 位运算符对整数在内存…...

js使用canvas实现图片鼠标滚轮放大缩小拖拽预览,显示像素坐标,显示像素值
html代码 todo 实现画矩形框,圆形roi <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title&…...

ArrayList 源码解析和设计思路
ArrayList 一、继承体系二、接口继承三、标记接口四、设计目的五、框架总体结构六、工作原理七、创建List对象初始化?还是add()添加元素初始化?七、add(E e)添加元素八、remove(int index)删除元素八、线程安全问题 一、继承体系 ArrayLis…...

Win10系统使用IIS服务搭建WebDAV网站结合内网穿透公网访问本地文件
文章目录 推荐1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功总结: 推荐 前些天发现了一个巨牛的人工智能…...

AWTK 开源串口屏的配置文件
配置文件 每个 HMI 应用程序都需要一个配置文件,用于配置 HMI 的基本信息、服务、持久化、告警信息、历史数据等。 文件位置 design/default/data/settings.json基本配置 name - 名称(必须配置,只能用字母、数字、下划线) se…...

Spring、SpringMVC、Spring Boot常见注解有哪些?不要混淆了哦
Spring、SpringMVC、Spring Boot常见注解 一、Spring 注解说明Component、Controller、Service、Repository使用在类上用于实例化BeanAutowired使用在字段上用于根据类型依赖注入Qualifier结合Autowired一起使用用于根据名称进行依赖注入Scope标注Bean的作用范围Configuratio…...

在notion里面实现四象限清单
四象限清单是一种时间管理工具,旨在帮助人们根据任务的重要性和紧急性来优先排序他们的工作。这个概念最早由德怀特艾森豪威尔提出,后来又被史蒂芬柯维在他的著作《高效能人士的七个习惯》中进一步普及。四象限清单将任务分为四个类别: 第一…...

【linux】搜索所有目录和子目录下的包含.git的文件并删除
一、linux命令搜索所有目录和子目录下的包含.git的文件 在Linux系统中,要搜索所有目录和子目录下的包含.git的文件,可以使用find命令。find命令允许指定路径、表达式和操作来查找文件。 以下是使用find命令搜索包含.git的文件的方法: 1. 基…...

三、传输层拥塞控制、差错控制
3.1 概述和传输层服务 传输服务和协议: 为运行在不同主机上的应用进程提供逻辑通信; 传输协议运行在端系统-发送方:将应用层的报文分成报文段,然后传递给网络层;接收方:将报文段重组成报文,然后传递给应用…...

主流电商平台数据大规模数据采集接口的实现:电商API接口接入方案和电商数据采集现状
现实问题 1、您是否需要经常统计关注的品牌、产品、平台、卖家的电商数据,包括销量、评价量、收藏量、预售量、运费、赠品和促销信息,手头上没有稳定的数据源? 2、您是否经常需要统计授权卖家和非授权卖家的销售、动销占比,分析…...

Python电梯楼层数字识别
程序示例精选 Python电梯楼层数字识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《Python电梯楼层数字识别》编写代码,代码整洁,规则,易读。 学习与应…...

Linux学习:基础开发工具的使用(1)
目录 1. Linux软件包管理器:yum工具1.1 yum是什么(软件商城)1.2 yum的使用1.3 yum的背景生态 2. 项目开发与集成开发环境3. vim编辑器3.1 vim编辑器的常见模式与模式切换3.3 vim编辑器的使用3.3.1 命令模式下的常见命令:3.3.2 vim…...

在idea中配置tomcat服务器,然后部署一个项日
1.下载tomcat Tomcat下载 点击右边的tomcat8 找到zip点击下载 下载完,解压到你想放置的路径下 2.配置环境变量 打开设置找到高级系统设置点击环境变量 点击新建,变量名输入:CATALINA_HOME,变量值就是Tomcat的安装路径&#x…...

C语言例:设 int a=11; 则表达式 a+=a-=a*a 的值
注:软件为VC6.0 代码如下: #include<stdio.h> int main(void) {int a11, b;b (aa-a*a); //a*a121 -->a-121结果为a-110 -->a-110结果为a-220printf("表达式aa-a*a 的值为: %d\n",b);return 0; } //优先级&#x…...

C++ 中的虚函数和多态性
C 是一种高级编程语言,它具有面向对象编程的特性。在 C 中,虚函数和多态性是非常重要的概念,它们使得继承关系更加灵活和强大。 虚函数是在基类中声明为虚函数的成员函数,其作用是在运行时动态绑定函数的调用。当在派生类中重写基…...

叶顺舟:手机SoC音频趋势洞察与端侧AI技术探讨 | 演讲嘉宾公布
后续将陆续揭秘更多演讲嘉宾! 请持续关注! 2024中国国际音频产业大会(GAS)将于2024年3.27 - 28日在上海张江科学会堂举办。大会将以“音无界,未来(Audio, Future)”为主题。大会由中国电子音响行业协会、上…...

SpringBoot之yml与properties配置文件格式的区别
概念: SpringBoot支持两种格式的配置文件,一种是yml,而另一种就是properties,默认的文件名为application.yml或者.properties 为什么有了properties之后还要有yml呢? 因为properties配置文件存在数据冗余性,在properties配置文件中一切配置都需要从头写到为, 并且Key不能重复,…...

【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉树剪枝
本专栏内容为:递归,搜索与回溯算法专栏。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:递归搜索回溯专栏 🚚代码仓库:小小unicorn的代…...

Django实现登录注册
Django实现登录注册 目录 Django实现登录注册配置路由首页注册前端:后端: 登录前端:后端:验证码部分逻辑 配置路由 首先分发路由[User,Blog,Article] from django.contrib import admin from django.urls import path from Blog…...

Python实战:NumPy数组与矩阵操作入门
NumPy是Python数据科学领域中不可或缺的库之一,它提供了一个强大的N维数组对象和一系列用于操作这些数组的函数。本文将详细介绍NumPy数组与矩阵的基础知识,包括数组的创建、操作、切片、索引、以及矩阵的运算等。 1. 引言 在Python数据科学领域&#…...

2024.2.26校招 实习 内推 面经
绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、校招&实习 |美团2024年春季校园招聘全球启动(内推) 校招&实习 |美团2024年春季校园招聘全球启动(内推) 2、校招 | 江淮汽车2024…...

cannot find -xml2: No such file or directory的解决方法
一,问题现象 在编译库的时候出现如下图所示的报错:C:/msys64/mingw32/bin/…/lib/gcc/i686-w64-mingw32/13.2.0/…/…/…/…/i686-w64-mingw32/bin/ld.exe: ca nnot find -lxml2: No such file or directory collect2.exe: error: ld returned 1 exit s…...

linux下的进程间通信
转自http://blog.csdn.net/eroswang/article/details/1772350 详细的讲述进程间通信在这里绝对是不可能的事情,而且笔者很难有信心说自己对这一部分内容的认识达到了什么样的地步,所以在这一节的开头首先向大家推荐著 名作者Richard Stevens的著名作品&a…...

基于单片机的IC 卡门禁系统设计
摘要:针对传统门锁钥匙易丢失、配置不便和忘记携带等问题,提出了一种基于STC89C52 的IC 卡门禁系统设计。该系统以STC89C52 单片机为核心来控制电子锁模块的开关。主要过程是由RFID 模块读取IC卡ID 并通过串口发送至STC89C52 单片机模块,STC89C52 单片机模块可以实现在线对I…...

【爬虫介绍】了解爬虫的魅力
爬虫 爬虫(Spider)是一种自动化程序,通过模拟人的行为,在互联网上收集、抓取和提取信息。爬虫通常用于网站数据抓取、搜索引擎索引、数据分析和挖掘等领域。 爬虫可以自动访问网页,按照预定的规则抓取网页上的文本、…...

Xcode 15.3 Archive失败
Xcode 15.3 Archive失败 背景 升级 Xcode 到 15.3,真机运行正常。打包的时候发现 Archive 失败。 提示: Call parameter type does not match function signature! 仔细看报错里是和HandyJSON相关的提示。 解决 起初以为和 Pod 库有关系,…...

Hadoop学习3:问题解决
文章目录 问题解决1. ERROR: but there is no HDFS_NAMENODE_USER defined2. JAVA_HOME is not set and could not be found.3. Hadoop-DFS页面访问不了4. namenode格式化失败,或者dfs页面打开失败5. ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Ab…...

HarmonyOS鸿蒙开发常用4种布局详细说明
介绍一下鸿蒙开发常用4种布局 1、线性布局 2、层叠布局 3、网格布局 4、列表布局 1. 线性布局(Column/Row) 线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row(行)和Column&…...

Python中的变量是什么类型?
一、 Python中的变量是什么类型? 在Python中,变量本身是没有类型的,变量可以指向任何类型的数据对象。这意味着你可以将一个整数赋值给一个变量,稍后又可以将一个字符串赋值给同一个变量。Python是一种动态类型语言,它…...

数据结构之顺序表(C语言版)
顺序表是数据结构中最基本的一种线性表,它以一段连续的存储空间来存储数据元素,元素之间的顺序由它们在内存中的位置来决定。在C语言中,我们通常使用数组来实现顺序表。 目录 顺序表的结构定义 顺序表的基本操作 应用实例 顺序表的结构定义…...