Golang学习日志
文章平均质量分 56
Golang学习日志
attempt_to_do
这个作者很懒,什么都没留下…
展开
-
理解RESTful架构
1.RESTRESTful,是目前最为流行的一种互联网软件架构。因为它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。1.1.什么是RESTREST指的是一组架构的约束条件和原则。满足这些约束条件和原则的应用程序或者设计就是RESTful的。REST的几个概念:资源REST是“表现层状态转化”。“表现层”指的是“资源”的表现层;表现层:资源是一个具体的实体信息,可以有多种的展示方式,把实体展示出来就是表现层;状态转化:访问一个网站,就代表客户端和服务器的一个互动过程,这原创 2021-11-21 21:09:04 · 256 阅读 · 0 评论 -
RPC(远程过程调用协议)
RPC(Remote Procedure Call Protocol)——远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。它假定某些传输协议的存在,如TCP或UDP,以便为通信程序之间携带信息数据。通过它可以使函数调用模式网络化。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC工作原理运行时,一次客户机对服务器的RPC调用,其内部操作大致有如下十步:1.调用客户端句柄;执行传送参数2.调用本地系统内核发送网络消息3.消息传送到远程主机4.服原创 2021-11-15 18:28:38 · 2124 阅读 · 0 评论 -
分析http包运行机制
如下图所示,是Go实现Web服务的工作模式的流程图创建Listen Socket, 监听指定的端口, 等待客户端请求到来。Listen Socket接受客户端的请求, 得到Client Socket, 接下来通过Client Socket与客户端通信。处理客户端的请求, 首先从Client Socket读取HTTP请求的协议头, 如果是POST方法, 还可能要读取客户端提交的数据, 然后交给相应的handler处理请求, handler处理完毕准备好客户端需要的数据, 通过Client原创 2021-11-13 18:01:52 · 115 阅读 · 0 评论 -
channels详细使用说明
goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。那么goroutine之间如何进行数据的通信呢,Go提供了一个很好的通信机制channel。channel可以与Unix shell 中的双向管道做类比:可以通过它发送或者接收值。这些值只能是特定的类型:channel类型。定义一个channel时,也需要定义发送到channel的值的类型。注意,必须使用make 创建channel:ci := make(chan int)cs := make(chan string)cf := m原创 2021-11-13 17:38:07 · 6837 阅读 · 0 评论 -
嵌入struct和嵌入interface
嵌入struct当匿名字段是一个struct的时候,那么这个struct所拥有的全部字段都被隐式地引入了当前定义的这个struct。package mainimport "fmt"type Human struct { name string age int weight int}type Student struct { Human // 匿名字段,那么默认Student就包含了Human的所有字段 speciality string}func原创 2021-11-13 17:16:08 · 249 阅读 · 0 评论 -
方法的继承和重写
继承如果匿名字段实现了一个method,那么包含这个匿名字段的struct也能调用该method。package mainimport "fmt"type Human struct { name string age int phone string}type Student struct { Human //匿名字段 school string}type Employee struct { Human //匿名字段 company原创 2021-11-13 16:47:26 · 310 阅读 · 0 评论 -
函数作为值、类型
在GO中,函数也是一种变量,通过type来定义它,它的类型就是所有相同参数,相同返回值的一种类型。type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])把函数类型作为值来传递package mainimport "fmt"type testInt func(int) bool // 声明了一个函数类型func isOdd(integer int) bool原创 2021-11-13 01:27:17 · 331 阅读 · 0 评论 -
包的初始化
包的初始化首选解决包级变量的依赖顺序问题,然后按包级变量声名出现的顺序进行初始化var a = b + c // a 第三个初始化, 为 3 var b = f() // b 第二个初始化, 为 2, 通过调用 f (依赖c) var c = 1 // c 第一个初始化, 为 1 func f() int { return c + 1 }如果包中含有多个.go源文件,它们将按照发给编译器的顺序进行初始化,Go语言的构建工具首先会将.go文件根据文件名排序,然后依次调用编译器编译。对于在包级别声明原创 2021-10-30 11:22:00 · 201 阅读 · 0 评论 -
Go - 变量的声明周期
变量的生命周期指的是在程序运行期间变量有效存在的时间间隔。对于在包一级声明的变量来说,它们的生命周期和整个程序的运行周期是一致的。而相比之下,在局部变量的声明周期则是动态的:从每次创建一个新变量的声明语句开始,直到该变量不再被引用为止,然后变量的存储空间可能被回收。函数的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。for t := 0.0; t < cycles*2*math.Pi; t += res { x := math.Sin(t) y := math.Sin原创 2021-10-29 23:20:08 · 157 阅读 · 0 评论 -
Golang - 切片
创建切片从数组中创建切片var sliceName = arr[index1:index2]说明:创建一个切片 sliceName,该切片元素的内容是从数组 arr 的索引 index1 开始到索引 index2 结束。make创建切片var sliceNma []type = make([]type,len,[cap])说明:创建一个切片 sliceName,该切片每一个元素的类型是 type,切片的长度为 len,容量为 cap。make 函数的第三个参数 cap,是可选参数,如果 ca原创 2021-09-28 10:04:54 · 138 阅读 · 0 评论 -
golang — 结构体
结构体的组成Golang中结构体类型的关键字是struct。结构体成员是由一系列的成员 变量 构成的,这些成员变量也被称为 “字段”。字段具有以下特性:字段拥有自己的类型和值。字段名必须唯一。字段的类型可以是任意的内置数据类型,也可以是结构体类型。结构体定义type StructName struct { Field1 FieldType1 [Tag1] Field2 FieldType2 [Tag2] Field3 FieldType3 [Tag3] ..原创 2021-09-26 22:10:26 · 111 阅读 · 0 评论