当前位置: 首页 > news >正文

Go——运算符,变量和常量,基本类型

一.运算符

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语言内置的运算符有&#xff1a; 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 1.1 算术运算符 注意&#xff1a;(自增)和--(自减)在go语言中是单独的语句&#xff0c;并不是运算符。 1.2 关系运算符 1.3 逻辑运算符 1.4 位运算符 位运算符对整数在内存…...

js使用canvas实现图片鼠标滚轮放大缩小拖拽预览,显示像素坐标,显示像素值

html代码 todo 实现画矩形框&#xff0c;圆形roi <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title&…...

ArrayList 源码解析和设计思路

ArrayList 一、继承体系二、接口继承三、标记接口四、设计目的五、框架总体结构六、工作原理七、创建List对象初始化&#xff1f;还是add()添加元素初始化?七、add(E e)添加元素八、remove&#xff08;int index&#xff09;删除元素八、线程安全问题 一、继承体系 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 连接成功总结&#xff1a; 推荐 前些天发现了一个巨牛的人工智能…...

AWTK 开源串口屏的配置文件

配置文件 每个 HMI 应用程序都需要一个配置文件&#xff0c;用于配置 HMI 的基本信息、服务、持久化、告警信息、历史数据等。 文件位置 design/default/data/settings.json基本配置 name - 名称&#xff08;必须配置&#xff0c;只能用字母、数字、下划线&#xff09; se…...

Spring、SpringMVC、Spring Boot常见注解有哪些?不要混淆了哦

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

在notion里面实现四象限清单

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

【linux】搜索所有目录和子目录下的包含.git的文件并删除

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

三、传输层拥塞控制、差错控制

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

主流电商平台数据大规模数据采集接口的实现:电商API接口接入方案和电商数据采集现状

现实问题 1、您是否需要经常统计关注的品牌、产品、平台、卖家的电商数据&#xff0c;包括销量、评价量、收藏量、预售量、运费、赠品和促销信息&#xff0c;手头上没有稳定的数据源&#xff1f; 2、您是否经常需要统计授权卖家和非授权卖家的销售、动销占比&#xff0c;分析…...

Python电梯楼层数字识别

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

Linux学习:基础开发工具的使用(1)

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

在idea中配置tomcat服务器,然后部署一个项日

1.下载tomcat Tomcat下载 点击右边的tomcat8 找到zip点击下载 下载完&#xff0c;解压到你想放置的路径下 2.配置环境变量 打开设置找到高级系统设置点击环境变量 点击新建&#xff0c;变量名输入&#xff1a;CATALINA_HOME&#xff0c;变量值就是Tomcat的安装路径&#x…...

C语言例:设 int a=11; 则表达式 a+=a-=a*a 的值

注&#xff1a;软件为VC6.0 代码如下&#xff1a; #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 的值为&#xff1a; %d\n",b);return 0; } //优先级&#x…...

C++ 中的虚函数和多态性

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

叶顺舟:手机SoC音频趋势洞察与端侧AI技术探讨 | 演讲嘉宾公布

后续将陆续揭秘更多演讲嘉宾&#xff01; 请持续关注&#xff01; 2024中国国际音频产业大会(GAS)将于2024年3.27 - 28日在上海张江科学会堂举办。大会将以“音无界&#xff0c;未来&#xff08;Audio&#xff0c; Future&#xff09;”为主题。大会由中国电子音响行业协会、上…...

SpringBoot之yml与properties配置文件格式的区别

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

【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉树剪枝

本专栏内容为&#xff1a;递归&#xff0c;搜索与回溯算法专栏。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;递归搜索回溯专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代…...

Django实现登录注册

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

Python实战:NumPy数组与矩阵操作入门

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

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

LeetCode 0386.字典序排数:细心总结条件

【LetMeFly】386.字典序排数&#xff1a;细心总结条件 力扣题目链接&#xff1a;https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...

《开篇:课程目录》

大家好&#xff01;我是一名.NET技术开发者&#xff0c;长期以来积累了比较多的项目实战经验&#xff0c;现在把它分享给大家&#xff0c;希望能够帮助到大家&#xff0c;同时为.NET社区提供一份力量&#xff0c;让更多的开发者参与进来。 要讲解的课程如下&#xff1a; 《介绍…...