Go学习笔记之数据类型

文章目录

  • GO数据类型
    • 数组array
    • 切片slice
    • 集合map
    • 结构体
    • make和new

GO数据类型

  • 在go语言中,定义的全局数据结构不使用不会报错,定义的局部数据结构必须使用,否则报错;建议定义的数据类型就要使用,要么不定义。

数组array

类似于python的list,有下标查找方法

  • array与list的区别:
    • array是固定长度的数组,没有append、pop等方法;
    • array作为值传入函数或者是赋值给变量的是原始值拷贝不会,任何修改不会影响原始值;
var l1 [5]int = [5]int{1, 2, 3, 4, 5} //定义
l2 := [5]int{1, 2, 3} //初始化(:= 只能用于函数内部)

切片slice

可以进行切割的数组, 能使用append方法,使用后会返回添加后的切片,slice是底层数组,作为值作为值传入函数或者是赋值给变量时会改变原始值。

var s []string
var s []string = ['a', 'b']
b = s[:2] //前包后不包
s = append(s, "c") //增大了切片的最大容量,len(s)是4,cap(s)是6

集合map

类似与python的字典,能通过key进行增删改查

  • map与dict的区别:

    • map是无序的key-value集合,遍历时会无序的返回,而dict是有序的,按顺序遍历;
    • map定义时要说明key和value的类型,dict不需要;
    • map通过键获取键值时,如果键不存在,则返回该键类型的0值,如:键是int类型的返回值是0;而dict通过键获取值,键不存在,则会报错,使用get方法获取时返回None;
  • 注意:

    • map定义时必须要初始化,或者使用make来分配内存,否则会报错因为没有分配内存空间;
    • map是应用类型,如果将他传递给一个函数或是赋值给另一个变量,他们指向的都是底层数据结构,一个变化都会变化;
var m = map[int]string{1: "a",2: "b", //结尾括号另起一行时结尾需要有“,”同一行则不需要 
}var m1 = make(map[int]string)m1 := make(map[int]string) //:=用于函数内部
m1[1] = "a"
// m = {1: "a", 2: "b"} //不允许这种赋值方式

结构体

结构体自定义数据类型的属性和方法,是go实现面向对象的方法,通过type来定义

type Person struct{name stringage int
}var person Person //实例化结构体,实例化才会分配内存,才能调用内部的属性和方法 

要创建结构体的方法,需要将结构体作为接收者来定义函数,此时该函数就是该结构体的方法

  • 接收者有值接收者和指针接收者,当是值类型接收者时,实例化不能改变当前实例的属性或方法,指针类型接收者则能改变
type Person struct{Name stringAge int
}//receiver是值类型
func (p Person) SetName(word string) {p.Name = word
}//receiver是指针类型
func (p *Person) SetAge(age int){p.Age = age
}var p1 Person
p1.SetName("lili")
fmt.Println(p1.Name) //空字符串
p1.SetAge(12)
fmt.Println(p1.Age) //12
  • 注意:结构体的属性和方法首字母为大写才能被模块外调用,否则只能在模块内调用

make和new

make和new都可以给定义的数据类型分配空间

  • 区别:
    • make只能给slice、map、channel分配空间;
    • make分配完后返回的是数据类型的值,是对数据类型的初始化,new返回的是指针;
    • 很少使用到new

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

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

相关文章

使用Alien对.deb包与.rpm包相互转换

目录 1、切换到root 2、更新yum(更新比较耗时,不更新没试行不,自行斟酌是否跳过这一步) 3、卸载ibus 4、安装Alien及其依赖包 5、安装Alien 6、将.deb转换成.rpm包 7、安装RPM包 8、如果报错 9、将.rpm转换成.deb包 10、安…

在 Visual Studio 中编译 Qt 资源文件和 UI 文件教程

在 Visual Studio 中编译 Qt 资源文件和 UI 文件教程 Qt 是一个跨平台的 C 库,用于开发图形界面和应用程序。在 Qt 开发中,资源文件和 UI 文件是常见的两种资源,需要将它们编译成可用的形式,以便在应用程序中使用。本教程将指导您…

MongoDB(三十九)

目录 一、概述 (一)相关概念 (二)特性 二、应用场景 三、安装 (一)编译安装 (二)yum安装 1、首先制作repo源 2、软件包名:mongodb-org 3、启动服务&#xff1a…

Java工程师修炼手册:Java数据结构面试题

Java数据结构面试题一直都是面试官喜欢问到的问题,在我们去面试Java的相关岗位时,肯定会被提问到,所以我们就需要提前做好准备,轻松的去应对: 1. 数据结构定义 数据结构是计算机存储、组织数据的方式。数据结构是指相…

asp.net core读取request内容

在Startup.cs中定义Middleware,设置缓存Http请求的Body数据。代码如下。自定义Middleware请放到Configure方法的最前面。 app.Use(next > new RequestDelegate(async context > {context.Request.EnableBuffering();await next(context);})); GET请求 HttpC…

详解23种设计模式优缺点以及解决方案

1. 单例模式(Singleton Pattern): 优点:确保一个类只有一个实例,提供全局访问点,节省资源。缺点:可能引入全局状态,难以扩展和测试。解决方法:使用依赖注入来替代直接访…

通过 Amazon SageMaker JumpStart 部署 Llama 2 快速构建专属 LLM 应用

来自 Meta 的 Llama 2 基础模型现已在 Amazon SageMaker JumpStart 中提供。我们可以通过使用 Amazon SageMaker JumpStart 快速部署 Llama 2 模型,并且结合开源 UI 工具 Gradio 打造专属 LLM 应用。 Llama 2 简介 Llama 2 是使用优化的 Transformer 架构的自回归语…

【JavaEE基础学习打卡04】JDBC之MySQL数据库安装

目录 前言一、JDBC与数据库二、MySQL数据库1.MySQL数据库2.MySQL服务下载安装3.MySQL服务启动停止4.MySQL命令 三、MySQL客户端安装总结 前言 📜 本系列教程适用于JavaWeb初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持…

【 Cocos Creator 项目实战】益智游戏《2048》(附带完整源码工程)

本文乃Siliphen原创,转载请注明出处 目录 游戏介绍 概述 游戏整体流程 游戏框架设计 主要流程控制类 本文项目的代码组织结构 构建游戏世界 数字方块 地图 触摸手势识别 防触摸抖动 判断用户输入的方向 地图 任意大小的地图 初始化地图大小 地图绘制…

数据结构----结构--线性结构--栈,队列

数据结构----结构–线性结构–栈,队列 一.栈:Stack 1.栈的特点: ​ 先进后出:FILO(对一组数据有倒叙要求时可以用栈) 2.栈的实现 顺序存储:数组实现: ​ 缺点:空间…

无涯教程-Perl - sysread函数

描述 该函数等效于C /操作系统函数read(),因为它绕过了诸如print,read和seek之类的函数所采用的缓冲系统,它仅应与相应的syswrite和sysseek函数一起使用。 它从FILEHANDLE中读取LENGTH个字节,并将输出放入SCALAR中。如果指定了OFFSET,则将数据从OFFSET字节写入SCALAR,从而有效…

IC流程中 DFT 学习笔记(2)

引言 DFT是ASIC芯片设计流程中不可或缺的环节。其主要目的是在芯片前端设计验证完成后插入一些诸如寄存器链等可供测试的逻辑,算是IC后端设计的范畴,属于结构测试而非功能测试。主要是在ASIC芯片流片完成后,通过这些已插入的逻辑&#xff0c…

手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery来帮您

手机照片误删怎么办,电脑照片误删怎么办怎么才能找回,EasyRecovery 2023来帮您!!! EasyRecovery 2023是一款操作安全、价格便宜、用户自主操作的 数据恢复 方案,它支持从各种各样的 存储介质 恢复删除 或者…

Vue3.X 创建简单项目

一、环境安装与检查 首先,我们要确保我们安装了构建vue框架的环境,不会安装的请自行百度,有很多安装教程。检查环境 node -v # 如果没有安装nodejs请安装,安装教程自行百度 vue -V# 没有安装,请执行npm install -g v…

Cesium for unity 1.5.0使用注意事项

Cesium for Unity Quickstart – Cesium 1.Unity版本仅支持Unity2021.3.2f1以后版 2.仅支持 3D (URP)和3D (HDRP)渲染管线 3.如果Package Manager中不出现My Registries选项,请在 Edit > Project Settings...>Package Manager中重命名或删除重新添加Packag…

深入浅出PHP封装根据商品ID获取淘宝商品详情数据方法

要通过淘宝的API获取商品详情,您可以使用淘宝开放平台提供的接口来实现。以下是一种使用PHP编程语言实现的示例,展示如何通过淘宝开放平台API获取商品详情: 首先,确保您已注册成为淘宝开放平台的开发者,并创建一个应用…

【微服务实战】01-工程结构概览

文章目录 工程结构概览:定义应用分层及依赖关系1.应用分层2.定义Entity3.仓储层3.1 工作单元:事务管理3.2 仓储层 4.领域事件5.APIController最佳实践 工程结构概览:定义应用分层及依赖关系 1.应用分层 领域模型层基础设施层 ⇒ 仓储应用层 ⇒ Api、后台任务Job共…

TCP服务器实现—多进程版,多线程版,线程池版

目录 前言 1.存在的问题 2.多进程版 3.多线程版 4.线程池版 总结 前言 在上一篇文章中使用TCP协议实现了一个简单的服务器,可以用来服务端和客户端通信,但是之前的服务器存在一个问题,就是当有多个客户端连接服务器的时候,服…

002-Spring boot 自动配置相关分析

目录 自动配置 EnableAutoConfiguration开启自动配置读取配置提前过滤自动配置配置包 AutoConfigurationPackage 自动配置 EnableAutoConfiguration 开启自动配置 在Spring 启动类上的 SpringBootApplication 中有 EnableAutoConfiguration 读取配置 Import(AutoConfigurat…

后端返回图片,前端接收并显示的解决方案

后端图片数据返回 后端通过二进制流的形式,写入response中 controller层 /*** 获取签到二维码*/GetMapping("/sign-up-pict")public void signUpPict(Long id, Long semId, HttpServletResponse response) throws NoSuchAlgorithmException {signUpServ…