GO基础篇-函数
1 序
GO基础篇-包
1 序
任何包系统设计的目的都是为了简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的单元以便于理解和更新,在每个单元更新的同时保持和程序中其它单元的相对独立性。这种模块化的特性允许每个包可以被其它的不同项目共享和重用,在项目范围内、甚至全球范围统一的分发和复用。
Golang中的包(Package)是类型、函数、常量和变量的集合,它将相关特性的函数和数据放在统一的文件或文件夹中进行管理,Golang中的包是一种组织代码的机制,它有助于将相关的代码组织在一起,使代码具有更好的可复用性、可维护性以及可读性。在Golang中,包是代码的基本单元,一个程序可以由多个包组成,每个包都有独立的命名空间。
每个包一般都定义了一个不同的名字空间用于它内部的每个标识符的访问。每个名字空间关联到一个特定的包,让我们给类型、函数等选择简短明了的名字,这样可以避免在我们使用它们的时候减少和其它部分名字的冲突。每个包还通过控制包内名字的可见性和是否导出来实现封装特性。通过限制包成员的可见性并隐藏包API的具体实现,将允许包的维护者在不影响外部包用户的前提下调整包的内部实现。通过限制包内变量的可见 ...
Go基础篇-流程控制
1 序
众所周知,任何一门程序设计语言的执行顺序都依赖于流程控制,流程控制语句,用于设定程序执行的次序,建立程序的逻辑结构。可以说,流程控制语句是整个程序的骨架,如果没有任何控制的话,那么程序会按照代码的一行行地顺序执行。
Golang是一门注重简洁、高效、并发编程的编程语言。在编写任何程序时,掌握流程控制是至关重要的,它决定了程序执行的顺序和条件。同时提供了一组清晰而灵活的流程控制结构,使得开发者能够轻松地编写可读性高且高效的代码。
2 Overview2.1 顺序执行在Golang中,程序按照代码的顺序逐行执行。这是最基本的流程控制形式,是任何编程语言的基础。通过顺序执行,我们能够在程序中定义一系列的操作,实现所需的功能。
12345678import "fmt"func main() { fmt.Println("Hello, World!") fmt.Println("Welcome to Golang!") // Output: Hello, World! // Output: Welcome ...
Go基础篇-映射
1 序
通过上一章对切片的介绍,相信大家已经对切片有了深刻了解,现在我们将介绍一种非常熟悉的数据结构:映射(map),类似与其他语言的字典和Hash表。
在Golang中,map是一个内建的引用类型,一种无序的键值对集合,类似类似于其他语言中的字典或哈希表。它允许我们使用键来存储和检索值。同时map提供了一种高效的方式来存储、组织和检索数据。map的键必须是唯一的,而值可以是任意类型:数字、字符串、布尔值、切片、映射或其他自定义类型,与数组和切片不同,map的大小是动态的,可以根据需要自动增长和收缩。
Map提供了一些常用的方法来操作键值对,如Get用于获取指定键的值,Set用于设置键值对,Delete用于删除键值对,以及Len用于获取map中的键值对数量。此外,还有一些有用的方法如Range可以遍历map中的所有键值对。
Map在Golang中广泛应用于各种场景,如数据存储、缓存、配置管理、日志记录等。由于其高效、灵活和易于使用的特性,map成为了Golang中不可或缺的数据结构之一。
2 Map特点
无序、无重复
存储无序、遍历无序
key不可重复
动态长度
map长度可以 ...
Go基础篇-切片
1 序
书接上回,我们在上一章里了解数组的基本定义,并熟知了数组的底层原理,同时也熟悉了数组的一些基本操作,但是Go语言中数组的使用并不多,其根本原因就是数组不够灵活,但是切片使用非常广泛。
在Go语言中,切片是一个拥有相同类型元素动态长度的序列。本质是一个数组的引用,但是与数组不同的是切片是动态的,长度可以在运行时改变,切片的使用更加灵活,通常在实际开发中更常用。 本章节我们将详细介绍切片,并深入探讨它的特性、用法和常见操作。
2 切片底层原理切片的底层原理是基于数组的一种数据结构。切片是对数组一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。
在Go语言中,切片是对数组的抽象,它提供了更强大的能力和便捷性。切片本身并不是动态数组或者数组指针,而是通过指针引用底层数组,设定相关属性将数据读写操作限定在指定的区域内。你可以把它当作类似下面的一个结构体,内部包含三个元素分别是:指向底层数组的指针、切片的长度和切片的容量。
12345type sl ...
Go基础篇-数组
1 序
在Go语言中,数组是数据管理中至关重要的组件。它们作为核心数据结构,为开发者提供了灵活性、性能和便利性,本文将带您了解Go语言复合数据类型的数组。并深入探讨它的特性、用法和常见操作。
在使用数组的时候,我们会使用一些函数来实现,这里我们将介绍Go语言中的内置函数。
2 内置函数Go语言提供了一些内置函数(Built-in Functions),这些函数是在编译器中实现的,并且可以直接使用,无需导入任何包。以下是一些常用的Go内置函数:
123456789101. len(): 返回字符串、数组、切片、字典或通道的长度。2. cap(): 返回数组、切片或通道的容量。3. make(): 用于创建切片、映射或通道。4. new(): 用于创建某种类型的指针,并返回其地址。5. append(): 用于向切片追加元素,可以同时追加一个或多个元素。6. copy(): 用于将源slice的元素复制到目标slice,并返回复制的元素个数。7. delete(): 用于从字典中删除指定键的元素。8. close(): 用于关闭通道。9. panic()和recover(): 用于处理 ...
Go基础篇-关键字&变量&常量&基本数据类型
1 序
在计算机编程中,数据类型是一种基础概念,它定义了数据的特性、存储方式以及可以对其执行的操作。数据类型的正确选择和使用对于编写高效、可靠的代码至关重要。Go语言作为一门现代化、简洁而强大的编程语言,提供了丰富的数据类型,使得开发人员能够更好地控制和操作数据。
本文将带您踏上一段探索Go语言基本数据类型的奇妙之旅。我们将深入探讨Go语言中的布尔型、整数型、浮点型和字符串型等基本数据类型的特性、用法和常见操作。
变量就是承载各种数据类型的容器,变量的定义又离不开关键字,所以我们先看Go的关键字。
2 关键字Go语言具有一些关键字(Keywords),这些关键字具有特殊的含义,不能作为标识符来使用,以下是Go语言中的关键字列表:
12345678910111213141516171819202122232425break:用于在循环中跳出循环或在switch语句中跳出switch语句。case:用于在switch语句中分支选择。chan:用于定义通道类型。const:用于定义常量。continue:用于跳过循环中剩余的语句并开始下一次循环。default:在switch语句中所有c ...
MySQL索引使用和优化
索引常用规则1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
正确选择复合索引中的主列字段,一般是选择性较好的字段;
复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否 极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;8、频繁进行数据操作的表,不要建立太多的索引;9、删除无用的索引,避免对执行计划造成负面影响;
以上是一些普遍的建立索引时的判断依据。索引的建立必须慎重,对每个索引的必要性都应 ...
IntelliJ IDEA的使用
IDEA全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java等少数语言,对于这样一个强大的代码编辑器,我们势必要了解他的快捷键操作,方便我们快速的编写实现代码。
快捷键的使用
注意:以下快捷键的使用仅针对于Windows平台的操作,对于MAC和LINUX大家自己对照windows平台idea的使用
跳转
项目之间的跳转(项目分别位于不同的idea窗口): Ctrl + Alt + [ : 跳转到上一个idea窗口 Ctrl + Alt + ] : 跳转到下一个idea窗口
文件之间的跳转 Ctrl + E : 多个文件之间的 ...
多线程之线程顺序执行
我们知道在多线程中,线程在启动的时候不是马上去执行任务的,而是由cpu调度让哪一个线程执行,通常情况下多线程的执行顺序是随机的,如果我们想要让线程按照一定的顺序让线程执行,怎么做呢?
1.初见首先我们先上一段代码,看看执行效果。
123456789private static Thread thread1 = new Thread(()->System.out.println("thread1 开始执行"));private static Thread thread2 = new Thread(()->System.out.println("thread2 开始执行"));private static Thread thread3 = new Thread(()->System.out.println("thread3 开始执行"));public static void main(String[] args) { thread1.start(); thread ...