Go基础学习【2】

news2024/10/7 10:18:24

文章目录

    • 一:数组
    • 二:map集合
    • 三:包
    • 四:结构体

一:数组

1.命名
var arrAge = [5]int{1,2,3,4,5}
var arrAge =[…]int{1,2,4,5,6}
var arrAge =[5]string{3:“sfd”,5:“asdf”}
2.传递
通过传递数组的指针 和 使用数组的切片 来防止数组传递给函数消耗的内存
3.切片

切片的定义;
make([]int,50,50)
new([100]int)[0:50]

切片是一个可变的数组,在 Go 代码中 切片比数组更常用。不可以将指针只想切片,因为切片本身就是一个指针了,使用make创建切片切片拥有长度和容量。
切片的长度是它所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。

make([]int, len,cap)  //50表示长度,cap可写可不写  
new([100]int)[0:50]   //这两种方法表示IDE是一样的
var v [] int = make([]int,10,50) 等价于 v:make([]int,10,50)

第一种适用于 map 切片 和channel
第二种使用于 数组 结构体
切片依旧适用for range格式 来进行遍历
切片的复制和添加
添加的第一种方式:copy() copy(s1.s2) 将s2内容拷贝到s1中也可以作为添加来说
添加的第二种方式:append(s1,s2) 将s2添加到s1尾部
4、切片的应用
修改某个字符的时候,首先将其转化为byte类型,然后进行字符修改,然后在将其从字符转化为字符串

s := "hello"
c := []byte(s)
c[0] = 'c'
s2 := string(c) // s2 == "cello"

二:map集合

使用make来构造map,不要使用new,如果map中新增容量,那么容量会自动增加,但是还是提前标出容量为好

var map1 map[keytype]valuetype  //定义形式
var map1 map[string]int   //定义形式
赋值形式:一种是根据键定值
第二种形式如下:
noteFrequency := map[string]float32 {
    "C0": 16.35, "D0": 18.35, "E0": 20.60, "F0": 21.83,
    "G0": 24.50, "A0": 27.50, "B0": 30.87, "A4": 440}

map类型的切片:

定义:
make([]map[string]int])

使用两层make,第一层make是定义切片,第二层make是定义map里的元素
map的排序:将键或者值拷贝到一个切片,可以借助切片中的sort方法来进行排序,然后使用for-range输出

三:包

1.上锁
线程占用问题,多个不同线程访问同一个变量的时候有顺序问题,可以通过对变量的上锁和解锁来防止资源竞争

func Update(info *Info) {
    info.mu.Lock() //上锁
    info.Str = // new value //赋值
    info.mu.Unlock() //解锁
}

还可以通过RWMutex锁:RLock() 同一时间内允许多个线程同时访问,但是只有一个线程能够进行写操作
2.自定义包
创建新包并引入时 注意的是首字母大写的变量名和函数才属于共有的,其他都是私有的

四:结构体

格式定义

type identifier struct{
    field1 type1
    field2 type2
}
type T  struct{a , b int}
var t * T  //变量t是指向T的一个指针
t:=new(T) //给t分配内存,并零值化内存

结构体的匿名字段:定义结构体时。只定义了类型,没有定义字段名

普通结构体:
type hello struct{
    name sting
    a int
}

匿名结构体:

type hello struct{
    int 
    string
}

值类型的接收者和指针类型的接收者区别:
指针类型的接受者在改变之后,变量的值发生改变;而值类型的接收者在改变变量的值后,变量的值没有是不受影响的,只有go复制出来的副本受其影响
在需要改变值的时候或拷贝代价较大时候以及为了维持一致性,使用指针类型接收者
当嵌套字段名发生冲突的时候,为了避免冲突,需要具体到具体结构体和方法

user3.Address.CreateTime = "2000" //指定Address结构体中的CreateTime
user3.Email.CreateTime = "2000"   //指定Email结构体中的CreateTime

可以通过直接命名方式对结构体进行赋值:

d1 := &Dog{
   Feet: 4,
   Animal: &Animal{ //注意嵌套的是结构体指针
      name: "乐乐",
   },
}

详细查看:我的笔记链接
感谢观看

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

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

相关文章

[go学习笔记.第十六章.TCP编程] 2.项目-海量用户即时通讯系统

一.项目介绍 1.项目开发流程 需求分析->设计阶段->编码实现->测试阶段->实施阶段 2.需求分析 (1).用户注册 (2).用户登录 (3).显示在线用户列表 (4).群聊(广播) (5).点对点聊天 (6).离线留言 3.示意图 4.项目开发前技术准备 项目要保存用户信息和消息数据,因此需…

【Vue】vue项目用qrcodejs2生成带log的二维码图片,vue生成二维码图片中间带log,自定义log

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、安装qrcodejs2二、在页面中使用1.引入…

英国Paper写作思路和精髓如何了解?

第一学期即将结束,为了能帮助更多英国留学生顺利完成Paper,增加对英国Paper写作的理解,取得高分。本文小编为大家分享英国Paper写作的思路和精髓,帮助自己修改提升Paper质量。 The first semester is coming to an end.In order t…

flutter AnimatedSwitcher 动画切换过渡组件 跑马灯动画封装

flutter AnimatedSwitcher 动画切换过渡组件前言一、AnimatedSwitcher 简介二、AnimatedSwitcher 的简单使用三、AnimatedSwitcher 自定义跑马灯动画四、SlideTransitionX 的封装总结前言 本篇文章将记录 AnimatedSwitcher 过渡组件,这个组件动画是一个新的小部件来…

制作一个简单HTML宠物猫网页(HTML+CSS)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

在 Spring Boot中配置日志

Spring Boot 在引擎盖下使用Apache Commons Logging。但是,它允许您选择所需的日志记录库。让我们来看看使用 Spring Boot 时的一些配置和最佳实践。 目录 概述简单日志记录示例配置日志记录 更改日志级别将日志写入文件在 Spring 引导中更改日志记录模式对日志条…

基于小波域的隐马尔可夫树模型的图像去噪方法的matlab实现代码

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 为适应图像的空域非平稳变化, 提出了一种基于小波域分类隐马尔可夫树(CHMT)模型的图像去噪方法.该模型中,图像在每一尺度每一子带的小波系数均被分成C组以突出其空域非平稳变化 的特征,这…

MySQL有哪些锁

这次,来说说 MySQL 的锁,主要是 Q&A 的形式,看起来会比较轻松。 在 MySQL 里,根据加锁的范围,可以分为全局锁、表级锁和行锁三类。 全局锁 全局锁是怎么用的? 要使用全局锁,则要执行这条命…

彻底搞明白概率论:事件间的关系与运算;频率与概率

文章目录事件间的关系事件间的运算事件间的运算法则概率描述性定义统计性定义频率频率的性质频率是否能够作为概率呢?公理化定义概率的重要性质事件间的关系 注意互斥关系和对立关系: 互斥关系是:只要 A,BA,BA,B 不同时发生(不存在…

山东菏泽家乡网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

MindFusion JavaScript R2 套件 Crack

MindFusion JavaScript R2将您的 JAVASCRIPT 应用程序更快地推向市场 MindFusion JavaScript 库旨在显着缩短开发任何类型的交互式 JS 应用程序所需的时间。它们还使开发更加容易。 用于 JavaScript 的 MindFusion 包 JavaScript 数据视图 数据网格JavaScript 图 绘图JavaScr…

DJYGUI系列文章八:GDD绘图系统

目录 1 GDD绘图系统概述 1.1绘图上下文 1.2 DrawColor,FillColor,TextColor的作用与区别 2 API说明 2.1 SetRopCode: 设置当前光栅码 2.2 GetRopCode: 获得当前光栅码 2.3 MoveTo: 设置当前坐标位置 2.4 SetDr…

Web基础习题

1.语义化标签 1.现需要设置一个按钮&#xff0c;请填写语义化标签补全代码片段&#xff08;仅填写一个标签名即可&#xff09; <_____>点我!</_____> 2.在HTML中一般用哪个语义化标签表示斜体文本效果 3.在HTML中一般用哪个语义化标签表示头部导航 4.在HTML中一…

web前端-html-css-字体(字体的样式,字体的分类,字体其他样式,字体简写样式,文本样式)

字体的样式 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style type"text/css">.p1 {font-size: 30px;font-family: "curlz mt";}</style></head><body>…

vite+ts前期准备(尽量详细在更新)

创建和准备vitets项目 打开命令行或进入vscode打开终端 输入命令:npm init vite 选择vuets cd 进入项目 cnpm/yarn/npm install 初次运行项目 终端输入命令:cnpm run dev 可以设置运行之后自动打开浏览器 目录打开package.json dev:vite --open 添加–open 查看环境变量 目录打…

Latex IEEE模板导入中文问题

IEEE模板下载 下载IEEE的conference的latex模板文件&#xff1a; conference&#xff1a;https://www.ieee.org/conferences/publishing/templates.html 模板包括以下文件 编译 IEEE模板需要用pdflatex编译&#xff0c;否则英文的粗体等无法正常显示。 使用pdflatex编译 …

select......for update会锁表还是锁行?

select查询语句是不会加锁的&#xff0c;但是select .......for update除了有查询的作用外&#xff0c;还会加锁呢&#xff0c;而且它是悲观锁。 那么它加的是行锁还是表锁&#xff0c;这就要看是不是用了索引/主键。 没用索引/主键的话就是表锁&#xff0c;否则就是是行锁。…

Flutter组件--TabBar使用详情(分段控制器)

TabBar介绍 一个显示水平行选项卡的Widget。 通常创建为 AppBar 的 AppBar.bottom 部分并与 TabBarView 结合使用 在什么情况下使用TabBar 当你的app内容类别比较多的时候&#xff0c;我们常常会用到TabBar&#xff0c;例如网易新闻、京东、B站等&#xff0c;所以TabBar是一…

CentOS7 设置 MySQL 主备同步

文章目录环境准备修改配置文件创建同步数据账户设置主库信息测试参考资料本文主要介绍在 MySQL 的主备同步设置方法。环境准备 Linux&#xff1a;Centos 7 MySQL&#xff1a;5.7 主节点&#xff1a;192.168.210.18 备节点&#xff1a;192.168.210.19 主备节点 MySQL 均支持…

2022 Android 高级进阶学习资料与高频精选面试题精讲(圆梦大厂)

序言 可能每个技术人都有个大厂梦&#xff0c;我也不例外。最近准备跳槽&#xff0c;前一阵子在准备各种面试&#xff0c;也面了几个大厂&#xff0c;其中包括字节、阿里 就以字节面试为例&#xff0c;面试总共花费了 20 天左右&#xff0c;包含了 4 轮电话面试、1 轮笔试、1 轮…