Go+赋值运算、字符串、切片

简介: 赋值运算符就是可以直接进行赋值的一种运算符

赋值运算符

概述


赋值运算符就是可以直接进行赋值的一种运算符。


分类


我们列出了Go+中所有的赋值运算符。


运算符 描述 实例
= 简单的赋值运算符,将一个表达式的值赋给一个左值 C = A + B 将 A + B 表达式结果赋值给 C
+= 相加后再赋值 C += A 等于 C = C + A
-= 相减后再赋值 C -= A 等于 C = C - A
*= 相乘后再赋值 C *= A 等于 C = C * A
/= 相除后再赋值 C /= A 等于 C = C / A
%= 求余后再赋值 C %= A 等于 C = C % A
<<= 左移后赋值 C <<= 2 等于 C = C << 2
>>= 右移后赋值 C >>= 2 等于 C = C >> 2
&= 按位与后赋值 C &= 2 等于 C = C & 2
^= 按位异或后赋值 C ^= 2 等于 C = C ^ 2
|= 按位或后赋值 C |= 2 等于 C = C | 2
var a int = 21
var c int
c = a
println("c 值为 = ", c) // c 值为 =  21
c += a
println("c 值为 = ", c) // c 值为 =  42 
c -= a
println("c 值为 = ", c) // c 值为 =  21 
c *= a
println("c 值为 = ", c) // c 值为 =  441
c /= a
println("c 值为 = ", c) // c 值为 =  21 
c = 200
c <<= 2
println("c 值为 = ", c) // c 值为 =  800
c >>= 2
println("c 值为 = ", c) // c 值为 =  200
c &= 2
println("c 值为 = ", c) // c 值为 =  0
c ^= 2
println("c 值为 = ", c) // c 值为 =  2
c |= 2
println("c 值为 = ", c) // c 值为 =  2
复制代码


声明并赋值运算符


Go+有一种简便的赋值写法,他的语法格式如下:


变量名 := 变量值
复制代码


需要注意的是,他不能在函数外面使用,即不能用来声明全局变量。


a := 100;
a +=: 10;
println(a) //110
复制代码


字符串


概述


一个字符串就是一个不可以更改的字节序列,字符串可以包含任意的数据,一般用于存储文本。


定义字符串


我们一般使用双引号""来定义一个字符串,但是要注意,有一些特定的字符是有固定的含义的,我们称为转义字符,这些转义字符包含:


  • \n:换行符
  • \r:回车符
  • \t:tab 键
  • \u 或 \U:Unicode 字符
  • \:反斜杠自身


println("hello" + "\t" + "world") // hello   world
复制代码


如果我们想要知道这个字符串所占的字节长度,我们可以使用Go+的内置函数来计算。


println(len("helloword")) // 9
复制代码


如果我们要定义一个字符串的语法如下:


str := "helloword"
println(str) // helloword
println(len(str)) // 9
复制代码


字符串拼接


我们可以通过+实现两个字符串的拼接,将后面的字符串追加到前面字符串的后面。


str := "hello" + "word"
println(str) // helloword
str1 := "my name is \t"
str2 := "zs"
println(str1 + str2) // my name is      zs
复制代码


定义多行字符串


如果我们想要定义多行的字符串,Go+也是支持的。使用传统的""是不能跨行的,我们如果想要定义一个多行的字符串,可以使用反引号:`


const str = `第一行
第二行
第三行
`
println(str)
复制代码


在所有反引号之间的代码不会被编译器识别,只是作为字符串的一部分。


切片


概述


   切片是程序员对数组对象的抽象,在Go+里面,数组长度是不可变的,这样会造成我们使用集合的时候比较笨重,只有在固定的场所才可以使用。


Go+提供了一种较为灵活的数组,我们可以理解为动态数组,他对比数组来说长度是不固定的,同时可以追加元素,在追加元素的时候,可以动态扩容,他就是切片。


定义切片


   定义切片和定义变量一样,语法如下:


var 变量名 []切片类型
var age []int
复制代码

   

切片是不需要声明长度的,我们也可以使用内置函数——make()来定义切面。


var 变量名 []切片类型 = make([]类型, 长度)
var age []int = make([]int,10)
复制代码

 

 当然也可以简写。


变量名 := make([]类型, 长度)
age := make([]int,10)
复制代码

 

 这里的长度就是我们给这个切片赋值的初始长度。


切片初始化


   定义完了切片,我们要开始对我们定义的切片进行初始化操作了。初始化切片的语法如下:


切片名 := [] 切片类型 {初始化的值}
num :=[] int {1,2,3,4,5}
复制代码

 

这种方式最简单粗暴,直接初始化切片,这样我们就初始化了一个切片,切片里面有1,2,3,4,5这些值,切片的长度为5。


切片的两种内置函数


len()


   len()函数表示切片的长度,我们可以直接使用这个函数去获取这个切片的长度。


num :=[] int {1,2,3,4,5}
len(num) //5
复制代码


cap()


   有了长度以后,我们在实际开发中可能还需要查看当前切片的容量大小,我们可以使用cap()函数来进行查看。


num :=[] int {1,2,3,4,5}
cap(num) //5
复制代码


切片截取


   我们日常中还会使用的一个就是切片的截取,我们可以设置索引的方式来动态截取切片。


num :=[] int {1,2,3,4,5}
println("这是原始的切片",num) // 这是原始的切片 [1 2 3 4 5]
println("这是截取后的切片",num[0:2]) // 这是截取后的切片 [1 2]
复制代码

 

我们直接在切片后使用[开始的索引,结束的索引],即可动态截取切片,注意这个是含头不含尾,也就是意味着我们截取出来的只是包含起始值,但是不包含结束值。



相关文章
|
5月前
|
人工智能 自然语言处理 算法
Go语言统计字符串中每个字符出现的次数 — 简易频率分析器
本案例实现一个字符统计程序,支持中文、英文及数字,可统计用户输入文本中各字符的出现次数,并以整洁格式输出。内容涵盖应用场景、知识点讲解、代码实现与拓展练习,适合学习文本分析及Go语言基础编程。
|
6月前
|
存储 JSON 安全
Go语言切片,使用技巧与避坑指南
Go语言中的切片(Slice)是动态引用数组的高效数据结构,支持扩容与截取。本文从切片基础、常用操作到高级技巧全面解析,涵盖创建方式、`append`扩容机制、共享陷阱及安全复制等内容。通过代码示例详解切片特性,如预分配优化性能、区分`nil`与空切片、处理多维切片等。掌握这些核心知识点,可编写更高效的Go代码。
224 2
|
5月前
|
数据采集 机器学习/深度学习 存储
Go语言实战案例 - 找出切片中的最大值与最小值
本案例通过实现查找整数切片中的最大值与最小值,帮助初学者掌握遍历、比较和错误处理技巧,内容涵盖算法基础、应用场景及完整代码示例,适合初学者提升编程能力。
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
287 7
|
6月前
|
Go 索引
Go语言中使用切片需要注意什么?
本文详细讲解了Go语言中切片(Slice)的使用方法与注意事项。切片是对数组连续片段的引用,具有灵活的操作方式。文章从定义与初始化、长度与容量、自动扩容、共享底层数组、复制、边界检查、零值到拼接等方面展开,并配以示例代码演示。通过学习,读者可深入了解切片的工作原理及优化技巧,避免常见陷阱,提升编程效率与代码质量。
176 2
|
10月前
|
测试技术 Go API
Go 切片导致 rand.Shuffle 产生重复数据的原因与解决方案
在 Go 语言开发中,使用切片时由于其底层数据共享特性,可能会引发意想不到的 Bug。本文分析了 `rand.Shuffle` 后切片数据重复的问题,指出原因在于切片是引用类型,直接赋值会导致底层数组共享,进而影响原始数据。解决方案是使用 `append` 进行数据拷贝,确保独立副本,避免 `rand.Shuffle` 影响原始数据。总结强调了切片作为引用类型的特性及正确处理方法,确保代码稳定性和正确性。
276 82
|
7月前
|
安全 Go 开发者
Go语言之切片的原理与用法 - 《Go语言实战指南》
切片(slice)是Go语言中用于处理变长数据集合的核心结构,基于数组的轻量级抽象,具有灵活高效的特点。切片本质是一个三元组:指向底层数组的指针、长度(len)和容量(cap)。本文详细介绍了切片的声明与初始化方式、基本操作(如访问、修改、遍历)、长度与容量的区别、自动扩容机制、共享与副本处理、引用类型特性以及常见陷阱。通过理解切片的底层原理,开发者可以更高效地使用这一数据结构,优化代码性能。
223 13
|
7月前
|
人工智能 Go
[go]Slice 切片原理
本文详细介绍了Go语言中的切片(slice)数据结构,包括其定义、创建方式、扩容机制及常见操作。切片是一种动态数组,依托底层数组实现,具有灵活的扩容和传递特性。文章解析了切片的内部结构(包含指向底层数组的指针、长度和容量),并探讨了通过`make`创建切片、基于数组生成切片以及切片扩容的规则。此外,还分析了`append`函数的工作原理及其可能引发的扩容问题,以及切片拷贝时需要注意的细节。最后,通过典型面试题深入讲解了切片在函数间传递时的行为特点,帮助读者更好地理解和使用Go语言中的切片。
226 0
|
8月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
223 6
|
9月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
318 11

热门文章

最新文章