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

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.Printfmt.Printlnfmt.Printffmt.Sprintf

1.fmt.Printfmt.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 语言中&#xff0c;基本数据类型主要包括以下几类&#xff1a;整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型&#xff08;byte&#xf…...

MQTT对比HTTP

吞吐量&#xff1a;根据3G网络的测量结果&#xff0c;MQTT的吞吐量比HTTP快93倍。这意味着在相同的网络条件下&#xff0c;MQTT能够更有效地传输数据&#xff0c;从而在处理大量数据或实时数据传输时具有更高的效率。架构与模式&#xff1a;MQTT基于发布/订阅模型&#xff0c;提…...

暴力数据结构之二叉树(堆的相关知识)

1. 堆的基本了解 堆&#xff08;heap&#xff09;是计算机科学中一种特殊的数据结构&#xff0c;通常被视为一个完全二叉树&#xff0c;并且可以用数组来存储。堆的主要应用是在一组变化频繁&#xff08;增删查改的频率较高&#xff09;的数据集中查找最值。堆分为大根堆和小根…...

死锁调试技巧:工作线程和用户界面线程

有人碰到了一个死锁问题&#xff0c;找到我们想请我们看看&#xff0c;这个是关于应用程序用户界面相关的死锁问题。 我也不清楚他为什么会找上我们&#xff0c;可能是因为我们经常会和窗口管理器打交道吧。 下面&#xff0c;我们来看看死锁的两个线程。 >> 请移步至 …...

蓝桥杯-外卖店优先级(简单写法)

“饱了么”外卖系统中维护着 N 家外卖店&#xff0c;编号 1∼N。 每家外卖店都有一个优先级&#xff0c;初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少 1&#xff0c;最低减到 0&#xff1b;而如果外卖店有订…...

VueRouter使用总结

VueRouter 是 Vue.js 的官方路由管理器&#xff0c;用于构建单页面应用&#xff08;SPA&#xff09;。在使用 VueRouter 时&#xff0c;开发者可以定义路由映射规则&#xff0c;并在 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 这样的语法后&#xff0c;会觉得处理错误真简单&#xff0c;然后你再来接触 Go 的错误异常&#xff0c;你会发现他好复杂啊&#xff0c;怎么到处都是 error&#xff0c;到处都需要处理 error。 首先咱们需要知道 Go 语言里面有个约定&#xff0c;就是一…...

python读取excel数据写入mysql

概述 业务中有时会需要解析excel中的数据&#xff0c;按照要求处理后&#xff0c;写入到db中&#xff1b; 用python处理这个正好简便快捷 demo 没有依赖就 pip install pymysql一下 import pymysql from pymysql.converters import escape_string from openpyxl import loa…...

flutter日期选择器仅选择年、月

引入包&#xff1a;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++

一、埃式筛法 代码 二、线性筛法&#xff08;欧拉筛法&#xff09; 主要的思想就是一个质数的倍数(倍数为1除外)肯定是合数&#xff0c;那么我们利用这个质数算出合数&#xff0c;然后划掉这个合数&#xff0c;下次就可以不用判断它是不是质数&#xff0c;节省了大量的时间。 …...

【Python超详细的学习笔记】Python超详细的学习笔记,涉及多个领域,是个很不错的笔记

获取笔记链接 Python超详细的学习笔记 一&#xff0c;逆向加密模块 1&#xff0c;Python中运行JS代码 1.1 解决中文乱码或者报错问题 import subprocess from functools import partial subprocess.Popen partial(subprocess.Popen, encodingutf-8) import execjs1.2 常用…...

TINA 使用教程

常用功能 分析-电气规则检查&#xff1a;短路&#xff0c;断路等分析- 直流分析 交流分析 瞬态分析 视图-分离曲线 由于输出的容性负载导致的振荡 增加5欧电阻后OK 横扫参数 添加横扫曲线的电阻&#xff0c;选择R3&#xff1a;8K-20K PWL和WAV文件的支持 示例一&#xff1a;…...

weblogic 任意文件上传 CVE-2018-2894

一、漏洞简介 在 Weblogic Web Service Test Page 中存在一处任意文件上传漏洞&#xff0c; Web Service Test Page 在"生产模式"下默认不开启&#xff0c;所以该漏洞有一定限制。利用该 漏洞&#xff0c;可以上传任意 jsp 文件&#xff0c;进而获取服务器权限。 二…...

我的第一个网页:武理天协

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类和对象的入门版本。 学习目的&#xff1a; 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题&#xff0c;作者决定分多次发布。 面向对象的引入 J…...

SpringBoot如何实现动态数据源?

在Spring Boot中实现动态数据源主要涉及到创建和管理不同的数据源&#xff0c;并在运行时根据需要切换。这可以通过编程方式配置Spring的AbstractRoutingDataSource来完成。下面我会逐步介绍如何实现动态数据源&#xff0c;并给出代码示例。 第1步&#xff1a;添加依赖 首先&…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...