GoLang
文章平均质量分 86
golang可以做服务器端开发。golang很适合做日志处理、数据打包、虚拟机处理、数据库代理等工作。在网络编程方面,它还广泛应用于web应用、API应用等领域
逆流°只是风景-bjhxcc
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
展开
-
【Golang】Golang进阶系列教程--Go 语言 select 都能做什么?
在 Go 语言中,select 是一个关键字,用于监听和 channel 有关的 IO 操作。通过 select 语句,我们可以同时监听多个 channel,并在其中任意一个 channel 就绪时进行相应的处理。本文将总结一下 select 语句的常见用法,以及在使用过程中的注意事项。原创 2023-08-02 06:00:00 · 381 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--Go 语言 context 都能做什么?
很多 Go 项目的源码,在读的过程中会发现一个很常见的参数 ctx,而且基本都是作为函数的第一个参数。为什么要这么写呢?这个参数到底有什么用呢?带着这样的疑问,我研究了这个参数背后的故事。原创 2023-08-01 15:58:09 · 750 阅读 · 2 评论 -
【Golang】Golang进阶系列教程--为什么说 Go 语言字符串是不可变的?
最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢?这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。和切片的结构很像,只不过少了一个表示容量的 cap 字段。str:指向一个 []byte 类型的指针len:字符串的长度那么它在内存中存储是这样的:底层的存储就变成了这样:Go 实际上是重新创建了一个 []byte{} 切片,然后让指针指向了新的地址。这样就可以了。原创 2023-07-30 20:40:14 · 556 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?
Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。原创 2023-07-30 20:23:17 · 758 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--为什么 Go for-range 的 value 值地址每次都一样?
循环语句是一种常用的控制结构,在 Go 语言中,除了 for 关键字以外,还有一个 range 关键字,可以使用 for-range 循环迭代数组、切片、字符串、map 和 channel 这些数据类型。但是在使用 for-range 循环迭代数组和切片的时候,是很容易出错的,甚至很多老司机一不小心都会在这里翻车。具体是怎么翻的呢?我们接着看。原创 2023-07-30 20:16:55 · 747 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?
在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一种引用类型,它有三个属性:指针,长度和容量。指针: 指向 slice 可以访问到的第一个元素。长度: slice 中元素个数。容量: slice 起始元素到底层数组最后一个元素间的元素个数。切片扩容通常是在进行切片的 append 操作时触发的。原创 2023-07-29 21:35:36 · 1317 阅读 · 1 评论 -
【Golang】Golang进阶系列教程--Go 语言数组和切片的区别
在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。数组和切片是两个常用的数据结构。它们都可以用于存储一组相同类型的元素,但在底层实现和使用方式上存在一些重要的区别。Go 中数组的长度是不可改变的,而 Slice 解决的就是对不定长数组的需求。他们的区别主要有两点数组是一个长度固定的数据类型,其长度在定义时就已经确定,不能动态改变;切片是一个长度可变的数据类型,其长度在定义时可以为空,也可以指定一个初始长度。原创 2023-07-29 21:28:52 · 800 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--Go 语言 new 和 make 关键字的区别
make 只能用来分配及初始化类型为 slice、map 和 chan 的数据。new 可以分配任意类型的数据;new 分配返回的是指针,即类型 *Type。make 返回类型本身,即 Type;new 分配的空间被清零。make 分配空间后,会进行初始化;原创 2023-07-29 21:11:24 · 762 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags
在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。除了这些基本信息之外,Go 还提供了 struct tags,它可以用来指定 struct 中每个字段的元信息。在本文中,我们将探讨为什么 Go 语言中需要使用 struct tags,以及 struct tags 的使用场景和优势。原创 2023-07-28 22:16:24 · 790 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--为什么 Go 不支持 []T 转换为 []interface
在 Go 中,如果 interface{} 作为函数参数的话,是可以传任意参数的,然后通过类型断言来转换。}) {ok1 {ok2 {不管是传 int 还是 string,最终都能输出正确结果。那么,既然是这样的话,我就有一个疑问了,拿出我举一反三的能力。是否可以将 []T 转换为 []interface 呢?}) {本来一行代码就能搞定的事情,却非要让人写四行,是不是感觉很麻烦?那为什么 Go 不支持呢?我们接着往下看。原创 2023-07-28 21:56:13 · 1282 阅读 · 0 评论 -
【Golang】Golang进阶系列教程--Golang中文件目录操作的实现
文件读写:Go语言中的文件读写操作可以使用os包中的Open函数打开文件,然后使用Read和Write方法来读取和写入文件内容。在Go语言中,通过操作文件,我们可以读取文件的内容,写入数据到文件,以及获取文件的属性等。文件路径:文件路径是用于定位文件或目录的字符串。在Golang中,文件是以文件流的形式进行操作的,文件流是指将文件中的内容作为一个流来处理的方式,通过读取流来获取文件的内容,通过写入流来向文件中写入数据。常用的文件操作包括创建文件、打开文件、读取文件内容、写入文件内容和关闭文件等。原创 2023-07-28 21:38:46 · 969 阅读 · 0 评论 -
【Go】Go 语言开发工具GoLand 使用(二十二)
Goland 是一款由捷克软件开发公司 JetBrains 专为 Go 开发的跨平台的商业 IDE。Goland 具有 Strong Code Insight、Navigation & Search、Run & Debug、Integration with VCSs、More than just a Go IDE 以及较强的 Extensibility,能够帮助 Gopher 轻松愉悦方便快捷地 read 和 write Go code。原创 2023-07-23 06:00:00 · 369 阅读 · 1 评论 -
【Go】Go 语言教程--Go 并发(二十一)
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。原创 2023-07-22 09:01:03 · 347 阅读 · 0 评论 -
【Go】Go 语言教程--Go 错误处理(二十)
错误和异常是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。从表面上看,一切皆错误的思路更简单,而异常的引入仅仅增加了额外的复杂度。但事实并非如此。众所周知,Golang遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。Go 语言通过内置的错误接口提供了非常简单的错误处理机制。我们可以在编码中通过实现 error 接口类型来生成错误信息。原创 2023-07-21 08:39:08 · 186 阅读 · 0 评论 -
【Go】Go 语言教程--Go 语言接口(十九)
以上实例中,我们定义了一个 Shape 接口,它定义了一个方法 area(),该方法返回一个 float64 类型的面积值。在上面的例子中,我们定义了一个接口 Phone,接口里面有一个方法 call()。在示例中,我们将 Rectangle 和 Circle 类型的实例都赋值给了 Shape 类型的变量 s,并通过 area() 方法调用它们的面积计算方法。Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。原创 2023-07-20 14:10:15 · 157 阅读 · 0 评论 -
【Go】Go 语言教程--Go 语言类型转换(十八)
接着,我们使用类型转换将 w 转换为 StringWriter 类型,并将转换后的值赋值给变量 sw。然后,我们使用类型断言将 i 转换为字符串类型,并将转换后的值赋值给变量 str。最后,我们使用 ok 变量检查类型转换是否成功,如果成功,我们打印转换后的字符串;否则,我们打印转换失败的消息。注意,strconv.Atoi 函数返回两个值,第一个是转换后的整型值,第二个是可能发生的错误,我们可以使用空白标识符 _ 来忽略这个错误。如果类型断言成功,它将返回转换后的值和一个布尔值,表示转换是否成功。原创 2023-07-19 08:14:28 · 176 阅读 · 0 评论 -
【Go】Go 语言教程--Go 语言递归函数(十七)
递归,就是在运行的过程中调用自己。recursion() /* 函数调用自身 */ } func main() {Go 语言支持递归。但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中。递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等。原创 2023-07-18 14:17:17 · 737 阅读 · 0 评论 -
【Go】Go 语言教程--Go 语言Map(集合)(十六)
* 使用 make 函数 */ map_variable := make(map [ KeyType ] ValueType , initialCapacity)其中 KeyType 是键的类型,ValueType 是值的类型,initialCapacity 是可选的参数,用于指定 Map 的初始容量。Map 的容量是指 Map 中可以保存的键值对的数量,当 Map 中的键值对数量达到容量时,Map 会自动扩容。如果不指定 initialCapacity,Go 语言会根据实际情况选择一个合适的值。实例。原创 2023-07-17 06:53:10 · 399 阅读 · 0 评论 -
【Go】Go 语言教程--Go 语言范围(Range)(十五)
Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。以上代码中的 key 和 value 是可以省略。原创 2023-07-16 06:00:00 · 525 阅读 · 0 评论 -
【Go】Go 语言教程--GO语言切片(Slice)(十四)
切片不需要说明长度。也可以简写为也可以指定容量,其中 capacity 为可选参数。这里 len 是数组的长度并且也是切片的初始长度。切片初始化直接初始化切片,[] 表示是切片类型,{1,2,3} 初始化值依次是 1,2,3,其 cap=len=3。初始化切片 s,是数组 arr 的引用。将 arr 中从下标 startIndex 到 endIndex-1 下的元素创建为一个新的切片。默认 endIndex 时将表示一直到arr的最后一个元素。原创 2023-07-15 16:09:43 · 439 阅读 · 1 评论 -
【Go】Go 语言教程--GO语言结构体(十三)
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。value1 , value2 ... valuen } 或实例如下:实例// 创建一个新的结构体 fmt . Println(Books {"Go 语言" , "www.demo.com" , "Go 语言教程" , 6495407 }) // 也可以使用 key => value 格式 fmt . Println(Books {原创 2023-07-14 15:47:32 · 495 阅读 · 0 评论 -
【Go】Go 语言教程--GO语言指针(十二)
一个指针变量指向了一个值的内存地址。类似于变量和常量,在使用指针前你需要声明指针。var-type 为指针类型,var_name 为指针变量名,* 号用于指定变量是作为一个指针。var ip * int /* 指向整型*/ var fp * float32 /* 指向浮点型 */本例中这是一个指向 int 和 float32 的指针。原创 2023-07-13 16:37:05 · 571 阅读 · 0 评论 -
【Go】Go 语言教程--GO语言数组(十一)
number99 的变量,使用数组形式 numbers[0], numbers[1] …数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。初始化数组中 {} 中的元素个数不能大于 [] 中的数字。原创 2023-07-10 22:59:49 · 596 阅读 · 0 评论 -
【Go】Go 语言教程--GO语言变量作用域(十)
Go 语言变量作用域分为局部作用域和全局作用域。在 Go 语言中,变量、结构体、函数的导出属性是通过它们的首字母大小写来决定的。首字母大写的变量、结构体、或者函数都是导出的,它们可以在整个程序的任何位置,任何包进行访问。首字母小写的全局变量,结构体、或者函数只能在本包进行访问。原创 2023-07-09 06:00:00 · 374 阅读 · 0 评论 -
【Go】Go 语言教程--GO语言函数(九)
函数体 }func:函数由 func 开始声明function_name:函数名称,参数列表和返回值类型构成了函数签名。parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。原创 2023-07-08 09:15:34 · 491 阅读 · 1 评论 -
【Go】Go 语言教程--GO条件和循环语句(八)
条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。循环控制语句可以控制循环体内语句的执行过程。注意:Go 没有三目运算符,所以不支持。原创 2023-07-07 10:07:41 · 499 阅读 · 0 评论 -
【Go】Go 语言教程--GO语言运算符(七)
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有Go语言的逻辑运算符。假定 A 值为 True,B 值为 False。下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。下表列出了所有Go语言的关系运算符。假定 A 值为 10,B 值为 20。Go 语言支持的位运算符如下表所示。假定 A = 60;位运算符对整数在内存中的二进制位进行操作。接下来让我们来详细看看各个运算符的介绍。下表列出了所有Go语言的赋值运算符。下表列出了Go语言的其他运算符。原创 2023-07-06 08:18:04 · 360 阅读 · 0 评论 -
【Go】Go 语言教程--GO语言常量(六)
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。iota 表示从 0 开始自动加 1,所以 i=1原创 2023-07-05 13:29:35 · 358 阅读 · 0 评论 -
【Go】Go 语言教程--语言变量(五)
如果在相同的代码块中,我们不可以再次对于相同名称的变量使用初始化声明,例如:a := 20 就是不被允许的,编译器会提示错误 no new variables on left side of :=,但是 a = 20 是可以的,因为这是给相同的变量赋予一个新的值。右边的这些值以相同的顺序赋值给左边的变量,所以 a 的值是 5, b 的值是 7,c 的值是 “abc”。一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。原创 2023-07-04 21:57:06 · 456 阅读 · 0 评论 -
【Go】Go 语言教程--数据类型(四)
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。Go 也有基于架构的类型,例如:int、uint 和 uintptr。在 Go 编程语言中,数据类型用于声明函数和变量。原创 2023-07-03 23:08:16 · 369 阅读 · 0 评论 -
【Go】Go 语言教程--语言结构(三)
在 Go 程序中,一行代表一个语句结束。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。上一章节我们已经了解了 Go 语言的基本组成结构,本章节我们将学习 Go 语言的基础语法。在 Go 语言中,空格通常用于分隔标识符、关键字、运算符和表达式,以提高代码的可读性。程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。在函数调用时,函数名和左边等号之间要使用空格,参数之间也要使用空格。原创 2023-07-03 21:34:50 · 455 阅读 · 0 评论 -
【Go】Go 语言教程--语言结构(二)
当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。下一行 import “fmt” 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。原创 2023-07-03 21:24:34 · 527 阅读 · 1 评论 -
【Go】Go 语言教程--介绍(一)
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。原创 2023-07-02 10:28:20 · 472 阅读 · 1 评论 -
golang可以做什么
golang可以做服务器端开发。golang很适合做日志处理、数据打包、虚拟机处理、数据库代理等工作。在网络编程方面,它还广泛应用于web应用、API应用等领域。golang,也就是我们熟知的go语言的全称。Go语言是谷歌发布的第二款开源编程语言。专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。.原创 2020-12-21 10:16:59 · 6196 阅读 · 0 评论