2.go语言初始(二)
本篇博客涉及到go 的基础数据类型、 go 语言中的运算符、转义字符、格式化输出、字符串操作
go 语言中的运算符
在 go 语言中,基本数据类型主要包括以下几类:整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型(byte)、符文类型(rune)。
1.整数类型
- int: 有符号整数,其大小在不同平台上可能有所不同(通常是32位或64位)。
- int8、int16、int32、int64:有符号整数类型、分别占用8位、16位、32位和64位。
- uint: 无符号整数、其大小在不同平台上可能有所不同(通常是32或64位)。
- uint8、uint16、uint32、uint64:无符号整数类型、分别占用8位、16位、32位和64位。
- uintptr:无符号整数类型、用于存放指针。
package mainimport "fmt"func main() {var a int = 34var b int8 = 98var c uint 16 = 65535var d uintptr = 0x12345678fmt.Println("int", a)fmt.Println("int8", b)fmt.Println("uint16", c)fmt.Println("uintptr", d)
}
【注】有符号类型和无符号类型的区别
- 有符号整数:
有符号整数可以表示正数、负数和零、最高位(最左边一位)用作符号位:0 表示正数, 1 表示负数。 - 无符号整数
无符号整数只能表示非负数(正数和零)。所有位都用于表示值,没有符号位。
2.浮点数类型
- float32:32位浮点数类型。
- float64:64位浮点数类型。
package mainimport "fmt"func main() {var e float32 = 3.14var f float64 = 2.5346546fmt.Println("float32: ", e)fmt.Println("float64: ", f)
}
3.复数类型
- complex64: 由两个float32组成的复数类型
- complex128: 由两个float64组成的复数类型
package mainimport "fmt"func main() {var g complex64 = i + 2ivar g complex64 = 3.5 + 2.5ifmt.Println("complex64:", g)fmt.Println("complex128:", h)
}
4.布尔类型
- bool: 布尔类型只能取 'true’或 ‘false’.
package mainimport "fmt"func main() {var i bool = truevar j bool = falsefmt.Println("bool true:", i)fmt.Println("bool false:", j)
}
5.字符串类型
- string: 字符串类型,表示一串UTF-8编码的字符。
package mainimport "fmt"func main() {var i bool = truevar j bool = falsefmt.Println("bool true:", i)fmt.Println("bool false:", j)
}
6.字节类型
- byte: ‘uint8’ 的别名,通常表示一个字节的数据
package mainimport "fmt"func main() {var l byte = 'A'fmt.Println("byte:", l)
}
7.符文类型
- rune: ‘int32’ 的别名,通常用于表示一个Unicode码点。
package mainimport "fmt"func main() {var m rune = '你'fmt.Println("rune:", m)
}
go 语言中的运算符
在 go 语言中,运算符用于执行各种操作,如算术运算、比较、逻辑运算和位运算。
1.算数运算符
- +:加法
- -:减法
- *:乘法
- /:除法
- %:取余
package mainimport "fmt"func main() {a := 10b := 3fmt.Println("加法:", a + b) // 13fmt.Println("减法:", a - b) // 7fmt.Println("乘法:", a * b) // 30fmt.Println("除法:", a / b) // 3fmt.Println("取余:", a % b) // 1
}
2.关系运算符
- ==:等于
- !=:不等于
- <:小于
-
:大于
- <=:小于等于
-
=:大于等于
package mainimport "fmt"func main() {a := 10b := 20fmt.Println("等于:", a == b) // falsefmt.Println("不等于:", a != b) // truefmt.Println("小于:", a < b) // truefmt.Println("大于:", a > b) // falsefmt.Println("小于等于:", a <= b) // truefmt.Println("大于等于:", a >= b) // false
}
3.逻辑运算符
- &&:逻辑与(AND)
- ||:逻辑或(OR)
- !:逻辑非(NOT)
package mainimport "fmt"func main() {a := trueb := falsefmt.Println("逻辑与:", a && b) // falsefmt.Println("逻辑或:", a || b) // truefmt.Println("逻辑非:", !a) // false
}
4.位运算符
- &:按位与(AND)
- |:按位或(OR)
- ^:按位异或(XOR)
- &^:按位清零(AND NOT)
- <<:左移
- >>: 右移
package mainimport "fmt"func main() {a := 10 // 1010b := 3 // 0011fmt.Println("按位与:", a & b) // 0010 -> 2fmt.Println("按位或:", a | b) // 1011 -> 11fmt.Println("按位异或:", a ^ b) // 1001 -> 9fmt.Println("按位清零:", a &^ b) // 0100 -> 8c := 1 // 0001fmt.Println("左移:", c << 2) // 0100 -> 4fmt.Println("右移:", a >> 2) // 0010 -> 2
}
5.赋值运算符
- =:赋值
- +=:加后赋值
- -=:减后赋值
- *=:乘后赋值
- /=:除后赋值
- %=:取余后赋值
- &=:按位与后赋值
- |=:按位或后赋值
- ^=:按位异或后赋值
- <<=:左移后赋值
- />>=:右移后赋值
package mainimport "fmt"func main() {a := 5a += 3fmt.Println("加后赋值:", a) // 8a -= 2fmt.Println("减后赋值:", a) // 6a *= 2fmt.Println("乘后赋值:", a) // 12a /= 3fmt.Println("除后赋值:", a) // 4a %= 3fmt.Println("取余后赋值:", a) // 1
}
6.其它运算符
- ++:自增
- –:自减
package mainimport "fmt"func main() {a := 5a++fmt.Println("自增:", a) // 6a--fmt.Println("自减:", a) // 5
}
转义字符
go 语言中,常见的转义字符包括换行符、制表符、引号和反斜杠等。
1.常见转义字符
- \a:响铃(警报)
- \b:退格
- \f:换页
- \n:换行
- \r:回车
- \t:水平制表符
- \v:垂直制表符
- \:反斜杠
- ":双引号
- ':单引号
package mainimport "fmt"func main() {// 响铃(警报)fmt.Println("响铃(警报):\a")// 退格fmt.Println("退格:Hello\bWorld") // 输出 "HellWorld"// 换页fmt.Println("换页:Hello\fWorld") // 换页符常见于打印机控制// 换行fmt.Println("换行:Hello\nWorld")// 回车fmt.Println("回车:Hello\rWorld") // 输出 "World"// 水平制表符fmt.Println("水平制表符:Hello\tWorld")// 垂直制表符fmt.Println("垂直制表符:Hello\vWorld")// 反斜杠fmt.Println("反斜杠:Hello\\World")// 双引号fmt.Println("双引号:Hello\"World\"")// 单引号fmt.Println("单引号:Hello\'World\'")
}
2.字符串字面值中的转义字符
在字符串字面值中,转义字符用于表示那些在正常情况下无法直接输入的字符。例如:
package mainimport "fmt"func main() {var str string = "这是一个包含换行符的字符串:\n你好,世界!"fmt.Println(str)
}
3.使用反引号
在 go 语言中,可以使用反引号(···)创建原始字符串字面值,这种字符串字面值不支持转义字符,所有的字符都按原样处理。这对包含大量特殊字符或多行文本的字符串非常有用。例如:
package mainimport "fmt"func main() {var rawString string = `这是一个原始字符串字面值,
它可以包含多行文本,
以及各种特殊字符,例如 \n、\t 等,都会被按原样处理。`fmt.Println(rawString)
}
格式化输出
go 语言中提供了一些强大的内置函数,用于格式化输出。这些函数主要包括 fmt.Print、fmt.Println、fmt.Printf和fmt.Sprintf。
1.fmt.Print和fmt.Println
fmt.Print: 直接输出,不添加任何额外的字符。fmt.Println: 输出内容后会自动添加一个换行符。
package mainimport "fmt"func main() {fmt.Print("Hello, ")fmt.Print("Go!")// 输出: Hello, Go!fmt.Println("Hello,")fmt.Println("Go!")// 输出:// Hello,// Go!
}
2. fmt.Printf
fmt.Printg函数是 go 语言中常用的格式化输出方式。
package mainimport "fmt"func main() {name := "Alice"age := 30// 使用占位符 %s 和 %d 分别输出字符串和整数fmt.Printf("Name: %s, Age: %d\n", name, age)// 使用占位符 %v 输出变量的默认格式fmt.Printf("Name: %v, Age: %v\n", name, age)// 使用占位符 %+v 输出带字段名的变量的默认格式fmt.Printf("Name: %+v, Age: %+v\n", name, age)// 使用占位符 %T 输出变量的类型fmt.Printf("Type of name: %T, Type of age: %T\n", name, age)// 使用占位符 %q 输出带双引号的字符串fmt.Printf("Quoted name: %q\n", name)// 使用占位符 %b 输出整数的二进制表示fmt.Printf("Binary age: %b\n", age)// 使用占位符 %x 和 %X 分别输出整数的十六进制表示(小写字母和大写字母)fmt.Printf("Hexadecimal age (lowercase): %x\n", age)fmt.Printf("Hexadecimal age (uppercase): %X\n", age)// 使用占位符 %f 输出浮点数的小数表示height := 1.75fmt.Printf("Height: %f\n", height)// 使用占位符 %.2f 指定浮点数的小数位数fmt.Printf("Height (2 decimal places): %.2f\n", height)
}
3. fmt.Sprintf
- `fmt.Sprintf``函数用于将格式化的字符串保存到变量中,而不是直接输出到标准输出流。
package mainimport "fmt"func main() {name := "Bob"age := 25// 使用 fmt.Sprintf 格式化字符串并保存到变量中formattedString := fmt.Sprintf("Name: %s, Age: %d", name, age)// 输出格式化的字符串fmt.Println(formattedString)
}
字符串操作
在 go 语言中,字符串的操作主要包括字符串连接、获取字符串长度、字符串切片、字符串查找、字符串替换等。
1.字符串连接
使用 + 运算符来连接字符串
package mainimport "fmt"func main() {str1 := "Hello"str2 := "World"result := str1 + " " + str2fmt.Println(result) // Output: Hello World
}
2.获取字符串长度
使用len()函数获取字符串的长度
package mainimport "fmt"func main() {str := "Hello, World!"length := len(str)fmt.Println("Length of string:", length) // Output: 13
}
3.字符串切片
使用切片操作来获取字符串的子串
package mainimport "fmt"func main() {str := "Hello, World!"substring := str[7:12]fmt.Println("Substring:", substring) // Output: World
}
4.字符串查找
使用strings包提供的函数来查找字串在字符串中的位置
package mainimport ("fmt""strings"
)func main() {str := "Hello, World!"index := strings.Index(str, "World")fmt.Println("Index of 'World':", index) // Output: 7
}
5.字符串替换
使用strings包提供的函数来替换字符串中的字串
package mainimport ("fmt""strings"
)func main() {str := "Hello, World!"newStr := strings.Replace(str, "World", "Gopher", -1)fmt.Println("New string:", newStr) // Output: Hello, Gopher!
}
6.字符串拼接
三种方式对字符串进行拼接,其中两种为高性能模式,在涉及到性能要求时需注意。
package mainfunc main() {// 格式化输出username := "bobby"age := 18address := "北京"mobile := "15687954621"fmt.Println("用户名: "+username, ", 年龄: "+strconv.Itoa(age)+", 地址:"+address, ", 电话: "+mobile) // 极其难维护fmt.Printf("用户名:%s, 年龄: %d, 地址: %s, 电话: %s\n", username, age, address, mobile) // 非常常用,但是性能没有上面的好userMsg := fmt.Sprintf("用户名:%s, 年龄: %d, 地址: %s, 电话: %s\r\n", username, age, address, mobile)fmt.Println(userMsg)// 通过srting的builder进行字符串拼接, 高性能var builder strings.Builderbuilder.WriteString("用户名")builder.WriteString(username)builder.WriteString("年龄")builder.WriteString(strconv.Itoa(age))builder.WriteString("地址")builder.WriteString(address)builder.WriteString("电话")builder.WriteString(mobile)re := builder.String()fmt.Println(re)
}
相关文章:
2.go语言初始(二)
本篇博客涉及到go 的基础数据类型、 go 语言中的运算符、转义字符、格式化输出、字符串操作 go 语言中的运算符 在 go 语言中,基本数据类型主要包括以下几类:整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型(byte…...
MQTT对比HTTP
吞吐量:根据3G网络的测量结果,MQTT的吞吐量比HTTP快93倍。这意味着在相同的网络条件下,MQTT能够更有效地传输数据,从而在处理大量数据或实时数据传输时具有更高的效率。架构与模式:MQTT基于发布/订阅模型,提…...
暴力数据结构之二叉树(堆的相关知识)
1. 堆的基本了解 堆(heap)是计算机科学中一种特殊的数据结构,通常被视为一个完全二叉树,并且可以用数组来存储。堆的主要应用是在一组变化频繁(增删查改的频率较高)的数据集中查找最值。堆分为大根堆和小根…...
死锁调试技巧:工作线程和用户界面线程
有人碰到了一个死锁问题,找到我们想请我们看看,这个是关于应用程序用户界面相关的死锁问题。 我也不清楚他为什么会找上我们,可能是因为我们经常会和窗口管理器打交道吧。 下面,我们来看看死锁的两个线程。 >> 请移步至 …...
蓝桥杯-外卖店优先级(简单写法)
“饱了么”外卖系统中维护着 N 家外卖店,编号 1∼N。 每家外卖店都有一个优先级,初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订…...
VueRouter使用总结
VueRouter 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。在使用 VueRouter 时,开发者可以定义路由映射规则,并在 Vue 组件中通过编程式导航或声明式导航的方式控制页面的跳转和展示。以下是 VueRouter 使用的…...
Flink checkpoint 源码分析- Checkpoint snapshot 处理流程
背景 在上一篇博客中我们分析了代码中barrier的是如何流动传递的。Flink checkpoint 源码分析- Checkpoint barrier 传递源码分析-CSDN博客 最后跟踪到了代码org.apache.flink.streaming.runtime.io.checkpointing.CheckpointedInputGate#handleEvent 现在我们接着跟踪相应…...
Leaflet.canvaslabel在Ajax异步请求时bindPopup无效的解决办法
目录 前言 一、场景重现 1、遇到问题的代码 2、问题排查 二、通过实验验证猜想 1、排查LayerGroup和FeatureGroup 2、排查Leaflet.canvaslabel.js 三、柳暗花明又一村 1、点聚类的办法 2、歪打正着 总结 前言 在上一篇博客中介绍了基于SpringBoot的全国风景区WebGIS按…...
Go 处理错误
如果你习惯了 try catch 这样的语法后,会觉得处理错误真简单,然后你再来接触 Go 的错误异常,你会发现他好复杂啊,怎么到处都是 error,到处都需要处理 error。 首先咱们需要知道 Go 语言里面有个约定,就是一…...
python读取excel数据写入mysql
概述 业务中有时会需要解析excel中的数据,按照要求处理后,写入到db中; 用python处理这个正好简便快捷 demo 没有依赖就 pip install pymysql一下 import pymysql from pymysql.converters import escape_string from openpyxl import loa…...
flutter日期选择器仅选择年、月
引入包:flutter_datetime_picker: 1.5.0 封装 import package:flutter/cupertino.dart; import package:flutter/material.dart; import package:flutter_datetime_picker/flutter_datetime_picker.dart;class ATuiDateTimePicker {static Future<DateTime> …...
素数筛详解c++
一、埃式筛法 代码 二、线性筛法(欧拉筛法) 主要的思想就是一个质数的倍数(倍数为1除外)肯定是合数,那么我们利用这个质数算出合数,然后划掉这个合数,下次就可以不用判断它是不是质数,节省了大量的时间。 …...
【Python超详细的学习笔记】Python超详细的学习笔记,涉及多个领域,是个很不错的笔记
获取笔记链接 Python超详细的学习笔记 一,逆向加密模块 1,Python中运行JS代码 1.1 解决中文乱码或者报错问题 import subprocess from functools import partial subprocess.Popen partial(subprocess.Popen, encodingutf-8) import execjs1.2 常用…...
TINA 使用教程
常用功能 分析-电气规则检查:短路,断路等分析- 直流分析 交流分析 瞬态分析 视图-分离曲线 由于输出的容性负载导致的振荡 增加5欧电阻后OK 横扫参数 添加横扫曲线的电阻,选择R3:8K-20K PWL和WAV文件的支持 示例一:…...
weblogic 任意文件上传 CVE-2018-2894
一、漏洞简介 在 Weblogic Web Service Test Page 中存在一处任意文件上传漏洞, Web Service Test Page 在"生产模式"下默认不开启,所以该漏洞有一定限制。利用该 漏洞,可以上传任意 jsp 文件,进而获取服务器权限。 二…...
我的第一个网页:武理天协
1. html代码 1.1 首页.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>武理天协</title><link rel"stylesheet" href"./style.css"><link rel"stylesh…...
机器学习笔记 KAN网络架构简述(Kolmogorov-Arnold Networks)
一、简述 在最近的研究中,出现了号称传统多层感知器 (MLP) 的突破性替代方案,重塑了人工神经网络 (ANN) 的格局。这种创新架构被称为柯尔莫哥洛夫-阿诺德网络 (KAN),它提出了一种受柯尔莫哥洛夫-阿诺德表示定理启发的函数逼近的方法。 与 MLP 不同,MLP 依赖于各个节…...
基于网络爬虫技术的网络新闻分析(二)
目录 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3 系统概要设计 3.1 设计约束 3.1.1 需求约束 3.1.2 设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3…...
Java--初识类和对象
前言 本篇讲解Java类和对象的入门版本。 学习目的: 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题,作者决定分多次发布。 面向对象的引入 J…...
SpringBoot如何实现动态数据源?
在Spring Boot中实现动态数据源主要涉及到创建和管理不同的数据源,并在运行时根据需要切换。这可以通过编程方式配置Spring的AbstractRoutingDataSource来完成。下面我会逐步介绍如何实现动态数据源,并给出代码示例。 第1步:添加依赖 首先&…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
