Go语言——string、数组、切片以及map

一、string、数组、切片代码

package mainimport "fmt"// 定义结构体
type student struct {id    intname  stringage   intscore float32
}func main() {// 使用var声明切片var slice1 []intslice1 = append(slice1, 1)slice1 = append(slice1, 2)slice1 = append(slice1, 3)fmt.Println("打印切片 = ", slice1)// 使用make关键字初始化,下面的意思为长度为5,容量为10slice2 := make([]int, 5, 10)slice2[0] = 1fmt.Println("打印make切片 = ", slice2)// 打印长度和其容量fmt.Printf("切片的长度 = %d,切片的容量 = %d\n", len(slice2), cap(slice2))// 切片化:语法u[low:high]创建对已存在数组进行操作的切片slice3 := []int{1, 2, 3, 4}fmt.Println("slice3 = ", slice3, len(slice3), cap(slice3))newSlice := slice3[1:]fmt.Println("newSlice = ", newSlice, len(newSlice), cap(newSlice))// 新创建的切片与最初的切片指向的底层其实是同一个数组,只是他们的指针的位置不一样,我们如果修改数组某个值,他们全都会修改newSlice[0] = 20fmt.Println("slice3 = ", slice3)fmt.Println("newSlice = ", newSlice)// 如果对新创建的切片进行append操作,如果没有发生扩容会向原数组中插入数据,如果发生扩容,新切片会创建一个新的数组,这条同样适用与原始切片newSlice = append(newSlice, 5)fmt.Println("添加元素后newSlice = ", newSlice)newSlice[0] = 10fmt.Println("添加元素后修改newSlice = ", newSlice)fmt.Println("添加元素后newSlice的 slice3 = ", slice3)// 使用var声明数组var intList1 [5]intintList1 = [5]int{1, 2, 3, 4, 5}fmt.Println("intList1 = ", intList1)// 短声明intList2 := [5]int{3, 4, 5, 6, 7}fmt.Println("intList2 = ", intList2)// 证明:在go语言中,数组是值传递的,修改传入的数组,发现原数组不变updateArray(intList2)fmt.Println("修改后的原数组 = ", intList2)// 声明结构体变量var s1 students1.score = 1s1.age = 18s1.name = "小明"// 短声明s2 := student{id:    1,name:  "小贵",age:   30,score: 100,}// 使用&获取结构体指针p := &s2fmt.Println("s2.name", s2.name)fmt.Println("p.name", p.name)// 使用s2修改属性s2.name = "小新"fmt.Println("s2.name", s2.name)fmt.Println("p.name", p.name)// 使用p修改属性p.name = "小p"fmt.Println("s2.name", s2.name)fmt.Println("p.name", p.name)// 定义一个字符串name := "lucky"// 将字符串转化为字节数组给nameCopynameCopy := []byte(name)// 修改第二个字符nameCopy[1] = 'l'fmt.Printf("nameCopy = [%s]\n", string(nameCopy))// 定义空字符串var school stringfmt.Println("school = ", school)// 字符串支持 + 运算newName := name + " " + "day"fmt.Println("newName = ", newName)// 字符串支持 += 运算newName += "s"fmt.Println("newName = ", newName)if name != newName {fmt.Println("ok")}// 使用`初始化字符串text := `ABCD
EFG`fmt.Println("text = ", text)
}func updateArray(arr [5]int) {arr[0] = 100fmt.Println("修改后的数组 = ", arr)
}

二、map代码

package mainimport ("fmt"
)func main() {// map的声明names := map[int]string{1: "小明",2: "小李",3: "小刘",}names[4] = "小蓝"// 更新之后,原map也被修改,说明是引用传递updateNames(names)ages := make(map[int]int)ages[1] = 10ages[2] = 34ages[3] = 18fmt.Println(names)// map删除某个keydelete(names, 4)fmt.Println(names)// 遍历map,每次打印结果不一样,表示是无序的for k, v := range names {fmt.Println(k, v)}// map与数组一样,也存在扩容的问题,为了防止频繁扩容,最好给一个初始值initMap := make(map[int]int, 10)fmt.Println(len(initMap))
}func updateNames(names map[int]string) {names[1] = "小王"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 开发中JDK 的使用和配置详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 在安卓开发中, 我们会使用到Java的JDK, JDK全程为(Java Development Kit)意思是:Java开发工具包。那么JDK 与我们的…

MPay码支付系统第四方聚合收款码多款支付插件个人免签支付源码TP8框架全开源

一、源码描述 这是一套码支付源码(MPay),基于TP8框架,前端layui2.9后端PearAdmin,专注于个人免签收款,通过个人的普通收款码,即可实现收款通知自动回调,支持绝大多数商城系统&#…

国产数据库铸就数字基建新基石,助力农业产业转型升级

中国科技企业以自主创新突破技术壁垒,为全球产业链重构注入新动能。广东辰宜信息科技有限公司(以下简称“辰宜科技”)凭借自主研发的“博流分布式多模数据库”等核心技术,作为支持数据流通的关键技术支撑,实现中国基础…

《人工智能:如何重塑教育模式与学习图景》

《人工智能:如何重塑教育模式与学习图景》 引言 人工智能,特别是大型语言模型(如GPT-4/ChatGPT),正以前所未有的速度影响教育领域。从基础教育到高等教育,再到职业教育,传统教学模式正在被重新审…

硬件工程师面试常见问题(14)

第六十六问:运放--输入偏置电流和输入失调电流 输入偏置电流lb:是由于运放两个输入极都有漏电流的存在。实际的运放,会有电流流入运放的输入端的。那么输入偏置电流就定义这两个电流的平均值。 输入失调电流 Ios:定义为两个差分输入端偏置电…

Docker+Kubernetes落地指南:从单机到集群的平滑迁移

一、为何必须升级到Kubernetes? 1.1 单机Docker的瓶颈 单机环境痛点: ├─ 资源利用率不均衡(CPU飙高 vs 内存闲置) ├─ 服务扩容需手动操作 ├─ 零宕机更新难以实现 └─ 网络配置复杂(跨主机通信困难&am…

HttpPrinter 是一款功能强大的跨平台 Web 打印解决方案

HttpPrinter 是一款功能强大的跨平台 Web 打印解决方案,支持多种编程语言和打印场景,适用于企业级报表打印、静默打印、远程打印等需求。以下是其核心功能、技术特点及使用方法的综合分析: 一、核心功能与特点 跨平台与多语言支持 支持 Java…

Selenium Web自动化测试学习笔记(一)

自动化测试 技术手段模拟人工,执行重复性任务,准确率100%,高于人工 selenium 可通过浏览器驱动控制浏览器,通过元素定位模拟人工,实现web自动化,没有焦点(把浏览器放在最小化依然可以&#x…

TikTok 矩阵运营新手实操保姆级教程 2.0 版本

在当下这个全球化的数字浪潮中,TikTok 这片充满机遇的流量蓝海,正吸引着无数创业者和品牌方争相角逐。而要想在这激烈的竞争中脱颖而出,TikTok 矩阵运营无疑是至关重要的制胜法宝。今天,就给大家送上这份超实用的新手实操教程&…

使用DeepSeek协助恢复历史数据

最近,工作中遇到比较老的数据库备份文件数据恢复的问题。过程中使用DeepSeek分析,很快的解决了从除备份文件本身其他信息一概不知的条件下,数据库选型问题和环境搭建问题。下面把实施过程分享出来,给其他遇到相同问题的小伙伴提供…

【特殊场景应对6】频繁跳槽:行业特性与稳定性危机的解释边界

写在最前 作为一个中古程序猿,我有很多自己想做的事情,比如埋头苦干手搓一个低代码数据库设计平台(目前只针对写java的朋友),比如很喜欢帮身边的朋友看看简历,讲讲面试技巧,毕竟工作这么多年,也做到过高管,有很多面人经历,意见还算有用,大家基本都能拿到想要的offe…

企业智能化第一步:用「Deepseek+自动化」打造企业资源管理的智能中枢

随着Deepseek乃至AI人工智能技术在企业中得到了广泛的关注和使用,多数企业开始了AI探索之旅,迅易科技也不例外,且在不断地实践中强化了AI智能应用创新的强大能力。 为解决企业知识管理碎片化、提高内部工作效率等问题,迅易将目光放…

大连理工大学选修课——图形学:第三四章 基本图形生成算法

第三四章 基本图形生成算法 图形生成 概念:如何在指定的输出设备上,根据坐标描述,构造基本二维几何图形 基本二维几何图形:点、直线、圆、多边形域、字符串及相关属性等。 图形生成的概念 是在指定的输出设备上,根…

怎样避免住宅IP被平台识别

要有效避免住宅IP被平台识别,需从IP质量选择、环境参数伪装、行为模式模拟、技术细节处理等多维度构建防御体系。以下是基于行业实践的综合性解决方案: 一、确保住宅IP的高纯净度 选择真实家庭网络IP 验证IP是否归属真实家庭宽带(非机房IP伪装…

WPF 触发器 Trigger

触发器 Trigger 触发器(Trigger)是 WPF 中的一种机制: 当某个条件满足时,自动改变控件的某些属性,比如颜色、大小、透明度等。 换句话说,就是"如果……那么就……" 的一种规则。 常见触发器类…

NLP核心技术解析:大模型与分词工具的协同工作原理

文章目录 一、核心关系概述二、分词工具的核心作用三、未登录词(OOV)问题3.1 问题本质分析3.2 解决方案3.2.1 预对齐词汇表(最优解)3.2.2 子词回退策略3.2.3 词汇表扩展(适合专业领域) 3.3 技术选型建议3.4…

vscode预览模式(点击文件时默认覆盖当前标签,标签名称显示为斜体,可通过双击该标签取消)覆盖标签、新窗打开

文章目录 VS Code 预览模式如何取消预览模式(即“固定”标签页)?预览模式有什么用? VS Code 预览模式 在 VS Code 中,当你单击文件浏览器(例如,资源管理器侧边栏)中的某个文件时&am…

MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - user/_sleep 是什么?做什么?

接上文 MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎样练成的? user/_sleep 是什么? book-riscv-rev3.pdf 3.8节有对Xv6 binary文件的格式描述 Xv6 binaries are formatted in the widely-used ELF format, defined in (kernel/elf.h). An …

【AI科技】AMD ROCm 6.4 新功能:突破性推理、即插即用容器和模块化部署,可在 AMD Instinct GPU 上实现可扩展 AI

AMD ROCm 6.4 新功能:突破性推理、即插即用容器和模块化部署,可在 AMD Instinct GPU 上实现可扩展 AI 现代 AI 工作负载的规模和复杂性不断增长,而人们对性能和部署便捷性的期望也日益提升。对于在 AMD Instinct™ GPU 上构建 AI 和 HPC 未来…

【含文档+PPT+源码】基于微信小程序连锁药店商城

项目介绍 本课程演示的是一款基于微信小程序连锁药店商城,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带的…