随笔分类 -  GO学习之路

摘要:Go语言make与new方法区别 在 Go 语言中,有两个比较雷同的内置函数,分别是 new 和 make 方法,其主要用途都是用于分配相应类型的内存空间。 基本特性 make 在 Go 语言中,内置函数 make 仅支持 slice、map、channel 三种数据类型的内存创建,其返回值是所创建 阅读全文
posted @ 2024-01-08 15:57 我是一条最咸的咸鱼 阅读(85) 评论(0) 推荐(0)
摘要:JSON(JavaScript 对象表示,JavaScript Object Notation)作为一种轻量级的数据交换格式,常用于前后端数据传输。 Go 语言通过 encoding/json 对外提供标准的 JSON 序列化和反序列化方法,即 encoding/json.Marshal 和 enc 阅读全文
posted @ 2021-12-07 21:27 我是一条最咸的咸鱼 阅读(7017) 评论(0) 推荐(0)
摘要:RPC RPC 代指远程过程调用(Remote Procedure Call),它的调用包含了传输协议和编码(对象序列号)协议等等。允许运行于一台计算机的程序调用另一台计算机的子程序,而开发人员无需额外地为这个交互作用编程。 RPC具有简单、通用、安全、效率的特点,可以基于 HTTP 协议进行调用。 阅读全文
posted @ 2021-11-25 21:18 我是一条最咸的咸鱼 阅读(411) 评论(0) 推荐(0)
摘要:结构体标签定义 通过 reflect.Type 获取结构体成员信息 reflect.StructField 结构中的 Tag 被称为结构体标签(Struct Tag)。结构体标签是对结构体字段的额外信息标签。 Tag是结构体在编译阶段关联到成员的元信息字符串,在运行的时候通过反射的机制读取出来。 结 阅读全文
posted @ 2021-11-04 21:29 我是一条最咸的咸鱼 阅读(2261) 评论(0) 推荐(0)
摘要:GO语言基础 第一个GO程序 GO语言常量和变量 GO语言数据类型 GO语言流程控制 GO值类型与引用类型区别 GO语言数组 GO语言切片 GO语言 map GO语言数组,切片,MAP总结 GO语言函数 GO语言指针 GO语言结构体 Go语言接口 GO语言Error处理 GO语言并发 GO语言测试 阅读全文
posted @ 2021-11-03 20:44 我是一条最咸的咸鱼 阅读(341) 评论(0) 推荐(0)
摘要:如果没有锁 在我们的项目中,可能会存在多个goroutine同时操作一个资源(临界区),这种情况会发生竞态问题(数据竞态)。 直接代码解释: 开启两个goroutine去累加变量x的值,这两个goroutine在访问和修改x变量的时候就会存在数据竞争,导致最后的结果与期待的不符。 互斥锁 互斥锁能够 阅读全文
posted @ 2021-06-24 10:50 我是一条最咸的咸鱼 阅读(641) 评论(0) 推荐(0)
摘要:channel简介 Channel是Go中的一个核心类型,我们可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 Go 语言中的通道(channel)是一种特殊的类型。通道像一个传送带或者队列,总是遵循先入先出(First In First Out 阅读全文
posted @ 2021-06-22 10:14 我是一条最咸的咸鱼 阅读(807) 评论(0) 推荐(0)
摘要:并发与并行 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发。 并发:同一时间段内执行多个任务。 并行:同一时刻执行多个任务。 Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。goro 阅读全文
posted @ 2021-06-21 20:56 我是一条最咸的咸鱼 阅读(321) 评论(0) 推荐(0)
摘要:Gin框架介绍Gin是一个用Go语言编写的web框架。它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍。中文文档Gin框架安装与使用安装GIN$ go get -u github.com/gin-gonic/gin第一个Gin程序package mainimport "github.com/gin-gonic/gin"func main(... 阅读全文
posted @ 2019-11-24 21:12 我是一条最咸的咸鱼 阅读(4874) 评论(0) 推荐(0)
摘要:Go语言没有提供像Java、C#、Python语言中的try...catch异常处理方式,而是通过函数返回值逐层往上抛。好处就是避免漏掉本应处理的错误。坏处是代码啰嗦。错误与异常区别错误指的是可能出现问题的地方出了问题,比如打开文件失败。异常是不应该出现问题的地方出了问题,比如空指针。Go中的错误是一种类型,错误用内置的error类型(接口)来表示。错误可以存储在变量中,从函数中返回。type e... 阅读全文
posted @ 2019-08-24 16:41 我是一条最咸的咸鱼 阅读(1494) 评论(0) 推荐(0)
摘要:使用的"math/rand"包。基本随机数a := rand.Int()b := rand.Intn(100) //生成0-99之间的随机数fmt.Println(a)fmt.Println(b)可以生成随机数,但是数值不会变。生成可变随机数//将时间戳设置成种子数rand.Seed(time.Now().UnixNano())//生成10个0-99之间的随机数for i:=0;i<10;i++... 阅读全文
posted @ 2019-08-20 16:46 我是一条最咸的咸鱼 阅读(37088) 评论(1) 推荐(0)
摘要:数组数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身... 阅读全文
posted @ 2019-08-16 15:34 我是一条最咸的咸鱼 阅读(2365) 评论(0) 推荐(0)
摘要:Go语言内置的flag包实现了命令行参数的解析。os.Argsos.Args是一个[]string类型。获取命令参数示例:func main() { if len(os.Args) > 0{ for index,args := range os.Args{ fmt.Printf("args[%d]=%v\n", index, args) }... 阅读全文
posted @ 2019-06-20 23:45 我是一条最咸的咸鱼 阅读(1142) 评论(0) 推荐(0)
摘要:驱动包MySql驱动Go语言中的database/sql包不包含数据库驱动,使用时必须注入一个数据库驱动。下载依赖go get -u github.com/go-sql-driver/mysql使用mysql驱动语法:func Open(driverName, dataSourceName string) (*DB, error)示例代码:import ( "database/sql" ... 阅读全文
posted @ 2019-06-19 23:39 我是一条最咸的咸鱼 阅读(1374) 评论(0) 推荐(0)
摘要:模板一个模板是一个字符串或一个文件,里面包含了一个或多个由双花括号包含的{{action}}对象。大部分的字符串只是按面值打印,但是对于actions部分将触发其它的行为。每个actions都包含了一个用模板语言书写的表达式,一个action虽然简短但是可以输出复杂的打印值,模板语言包含通过选择结构体的成员、调用函数或方法、表达式控制流if-else 语句range循环语句,还有其它实例化模板等诸... 阅读全文
posted @ 2019-06-10 23:45 我是一条最咸的咸鱼 阅读(8291) 评论(0) 推荐(1)
摘要:socket编程Socket是BSD UNIX的进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。电脑上运行的应用程序通常通过”套接字”向网络发出请求或者应答网络请求。Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中,S... 阅读全文
posted @ 2019-06-01 18:50 我是一条最咸的咸鱼 阅读(3921) 评论(0) 推荐(1)
摘要:Go语言的测试技术是相对低级的。它依赖一个 go test 测试命令和一组按照约定方式编写的 测试函数,测试命令可以运行这些测试函数。编写相对轻量级的纯测试代码是有效的,而且它很容易延伸到基准测试和示例文档。go test编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go ... 阅读全文
posted @ 2019-05-30 23:25 我是一条最咸的咸鱼 阅读(2975) 评论(0) 推荐(0)
摘要:反射可以作为了解,不必深入!反射介绍Go语音提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法和它们支持的内在操作,但是在编译时并不知道这些变量的具体类型。这种机制被称为反射。反射也可以让我们将类型本身作为第一类的值类型处理。Go程序在运行期使用reflect包访问程序的反射信息。reflect包反射是由 reflect 包提供支持. 它定义了两个重要的类型, Type 和 Value.... 阅读全文
posted @ 2019-05-28 00:13 我是一条最咸的咸鱼 阅读(310) 评论(0) 推荐(0)
摘要:Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换。strconv包strconv包实现了基本数据类型与其字符串表示的转换,官方文档中文版。string与int类型转换Atoi()将字符串类型的整数转换为int类型。func Atoi(s string) (i int, err error)示例:func main() { s1 := "100" i1, err :=... 阅读全文
posted @ 2019-05-26 23:40 我是一条最咸的咸鱼 阅读(2031) 评论(0) 推荐(0)
摘要:并发与并行 并发:同一时间段执行多个任务 并行:同一时刻执行多个任务 Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。goroutine是由Go语言的运行时调度完成,而线程是由操作系统调度完成。 Go 阅读全文
posted @ 2019-05-25 23:45 我是一条最咸的咸鱼 阅读(812) 评论(0) 推荐(0)

返回顶部