Go语言
文章平均质量分 75
就叫一片白纸
话不多说就是干
展开
-
【搞定Go语言】第4天2:GORM CRUD指南
CRUD通常指数据库的增删改查操作,本文详细介绍了如何使用GORM实现创建、查询、更新和删除操作。CRUDCRUD通常指数据库的增删改查操作,本文详细介绍了如何使用GORM实现创建、查询、更新和删除操作。本文中的db变量为*gorm.DB对象,例如:import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql")func main() { db, err := gorm.Open("mysql"原创 2021-03-25 22:23:54 · 516 阅读 · 1 评论 -
【搞定Go语言】第4天1:GORM入门指南
gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。gorm介绍中文官方网站内含十分齐全的中文文档,有了它你甚至不需要再继续向下阅读本文。安装go get -u github.com/jinzhu/gorm连接数据库连接不同的数据库都需要导入对应数据的驱动程序,GORM已经贴心的为我们包装了一些驱动程序,只需要按如下方式导入需要的数据库驱动即可:import _ "github.com/jinzhu/gorm/dialects/mysql"// impor原创 2021-03-22 22:21:28 · 716 阅读 · 0 评论 -
【搞定Go语言】第3天24:部署Go语言项目的 N 种方法
部署Go语言项目本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法。独立部署Go 语言支持跨平台交叉编译,也就是说我们可以在 Windows 或 Mac 平台下编写代码,并且将代码编译成能够在 Linux amd64 服务器上运行的程序。对于简单的项目,通常我们只需要将编译后的二进制文件拷贝到服务器上,然后设置为后台守护进程运行即可。编译编译可以通过以下命令或编写 makefile 来操作。CGO_ENABLED=0 GOOS=linux GO原创 2021-03-20 22:03:01 · 673 阅读 · 0 评论 -
【搞定Go语言】第3天23:常用限流策略——漏桶与令牌桶介绍
限流又称为流量控制(流控),通常是指限制到达系统的并发请求数,本文列举了常见的限流策略,并以gin框架为例演示了如何为项目添加限流组件。限流限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为8万人;沙河地铁站早高峰通过站外排队逐一放行的方式限制同一时间进入车站的旅客数量等。限流虽然会影响部分用户的使用体验,但是却能在一定程度上报障系统的稳定性,不至于崩溃(大家都没了用户体验)。而互联网上类似需要限流的业务场景也原创 2021-03-20 21:52:34 · 527 阅读 · 0 评论 -
【搞定Go语言】第3天22:常用的HTTP服务压测工具介绍
在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。HTTP服务压力测试工具在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。压测相关术语响应时间(RT) :指系统对请求作出响应的时间.吞吐量(Throughput) :指系统在单位时间内处理请求的数量原创 2021-03-18 21:43:31 · 558 阅读 · 0 评论 -
【搞定Go语言】第3天21:使用swagger生成接口文档
有时候一份清晰明了的接口文档能够极大地提高前后端双方的沟通效率和开发效率。本文将介绍如何使用swagger生成接口文档。swagger生成接口文档swagger介绍Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具一起使用,以设计、构建、记录和使用RESTful Web服务。Swagger包括自动文档,代码生成和测试用例生成。在前后端分离的项目开发过程中,如果后端同学能够提供一份清晰明了的接口文档,那么就能极大地提高大家的沟通效原创 2021-02-28 23:12:47 · 547 阅读 · 0 评论 -
【搞定Go语言】第3天20:validator库参数校验若干实用技巧
本文介绍了使用validator库做参数校验的一些十分实用的使用技巧,包括翻译校验错误提示信息、自定义提示信息的字段名称、自定义校验方法等。validator库参数校验若干实用技巧在web开发中一个不可避免的环节就是对请求参数进行校验,通常我们会在代码中定义与请求参数相对应的模型(结构体),借助模型绑定快捷地解析请求中的参数,例如 gin 框架中的Bind和ShouldBind系列方法。本文就以 gin 框架的请求参数校验为例,介绍一些validator库的实用技巧。gin框架使用github.com原创 2021-02-27 22:26:06 · 910 阅读 · 0 评论 -
【搞定Go语言】第3天19:gin框架源码解析
通过阅读gin框架的源码来探究gin框架路由与中间件的秘密。gin框架路由详解gin框架使用的是定制版本的httprouter,其路由的原理是大量使用公共前缀的树结构,它基本上是一个紧凑的Trie tree(或者只是Radix Tree)。具有公共前缀的节点也共享一个公共父节点。Radix Tree基数树(Radix Tree)又称为PAT位树(Patricia Trie or crit bit tree),是一种更节省空间的前缀树(Trie Tree)。对于基数树的每个节点,如果该节点是唯一的子树原创 2021-02-23 23:04:17 · 528 阅读 · 0 评论 -
【搞定Go语言】第3天18:gin框架中使用zap日志库
本文介绍了在基于gin框架开发的项目中如何配置并使用zap来接收并记录gin框架默认的日志和如何配置日志归档。我们在基于gin框架开发项目时通常都会选择使用专业的日志库来记录项目中的日志,go语言常用的日志库有zap、logrus等。网上也有很多类似的教程,我之前也翻译过一篇《在Go语言项目中使用Zap日志库》。但是我们该如何在日志中记录gin框架本身输出的那些日志呢?gin默认的中间件首先我们来看一个最简单的gin项目:func main() { r := gin.Default() r.G原创 2021-02-22 20:58:44 · 4298 阅读 · 1 评论 -
【搞定Go语言】第3天17:Cookie和Session
Cookie和Session是Web开发绕不开的一个环节,本文介绍了Cookie和Session的原理及在Go语言中如何操作Cookie。CookieCookie的由来HTTP协议是无状态的,这就存在一个问题。无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的。状态可以理解为客户端和服务器在某次会话中产生的数据,那无原创 2021-02-21 21:33:20 · 253 阅读 · 0 评论 -
【搞定Go语言】第3天16:如何使用Docker部署Go Web应用
本文介绍了如何使用Docker以及Docker Compose部署我们的 Go Web 程序。为什么需要Docker?使用docker的主要目标是容器化。也就是为你的应用程序提供一致的环境,而不依赖于它运行的主机。想象一下你是否也会遇到下面这个场景,你在本地开发了你的应用程序,它很可能有很多的依赖环境或包,甚至对依赖的具体版本都有严格的要求,当开发过程完成后,你希望将应用程序部署到web服务器。这个时候你必须确保所有依赖项都安装正确并且版本也完全相同,否则应用程序可能会崩溃并无法运行。如果你想在另一个原创 2021-02-19 22:17:53 · 437 阅读 · 0 评论 -
【搞定Go语言】第3天15:优雅地关机或重启
我们编写的Web项目部署之后,经常会因为需要进行配置变更或功能迭代而重启服务,单纯的kill -9 pid的方式会强制关闭进程,这样就会导致服务端当前正在处理的请求失败,那有没有更优雅的方式来实现关机或重启呢?阅读本文需要了解一些UNIX系统中信号的概念,请提前查阅资料预习。优雅地关机什么是优雅关机?优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对客户端友好的关机方式。而执行Ctrl+C关闭服务端时,会强制结束进程导致正在访问的请求出现问题。原创 2021-02-18 21:34:50 · 451 阅读 · 0 评论 -
【搞定Go语言】第3天14:使用Air实现Go程序实时热重载
今天我们要介绍一个神器——Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率。为什么需要实时加载?之前使用Python编写Web项目的时候,常见的Flask或Django框架都是支持实时加载的,你修改了项目代码之后,程序能够自动重新加载并执行(live-reload),这在日常的开发阶段是十分方便的。在使用Go语言的gin框架在本地做开发调试的时候,经常需要在变更代码之后频繁的按下Ctrl+C停止程序并重新编译再执行,这样就不是很方便。Air介绍原创 2021-02-17 23:46:20 · 1217 阅读 · 1 评论 -
【搞定Go语言】第3天13:在gin框架中使用JWT
JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。什么是JWT?JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。为什么需要JWT?在之前的一些web项目中,我们通常使用的是Cookie-Session模式实现用户认证。相关流程大致如下:用户在浏览器端填写用户名和密原创 2021-02-16 23:48:39 · 671 阅读 · 0 评论 -
【搞定Go语言】第3天12:gin框架路由拆分与注册
本文总结了我平时在项目中积累的关于gin框架路由拆分与注册的若干方法。gin框架路由拆分与注册基本的路由注册下面最基础的gin路由注册方式,适用于路由条目比较少的简单项目或者项目demo。package mainimport ( "net/http" "github.com/gin-gonic/gin")func helloHandler(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "Hello q1mi!原创 2021-02-06 00:28:24 · 907 阅读 · 0 评论 -
【搞定Go语言】第3天11:Gin框架介绍及使用
Gin是一个用Go语言编写的web框架。它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍。 如果你是性能和高效的追求者, 你会爱上Gin。Gin框架介绍Go世界里最流行的Web框架,Github上有32K+star。 基于httprouter开发的Web框架。 中文文档齐全,简单易用的轻量级框架。Gin框架安装与使用安装下载并安装Gin:go get -u github.com/gin-gonic/gin第一个Gin示例:pack原创 2021-02-02 23:23:01 · 4191 阅读 · 0 评论 -
【搞定Go语言】第3天10:go操作Elasticsearch
文简单介绍了ES、Kibana和Go语言操作ES。Elasticsearch介绍Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。Elasticsearch能做什么当你经营一家网上商店,原创 2021-01-20 22:21:23 · 695 阅读 · 0 评论 -
【搞定Go语言】第3天9:go操作etcd
etcd是近几年比较火热的一个开源的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现,本文主要介绍etcd的安装和使用。etcdetcd介绍etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。类似项目有zookeeper和consul。etcd具有以下特点:完全复制:集群中的每个节点都可以使用完整的存档高可用性:Etcd可用于避免硬件的单点故障或网络问题一致性:每次读取都会返回跨多主机的最新写入简单:包括一个定义原创 2021-01-17 23:03:45 · 466 阅读 · 0 评论 -
【搞定Go语言】第3天8:go操作kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、多副本备份、横向扩展等特点。本文介绍了如何使用Go语言发送和接收kafka消息。saramaGo语言中连接kafka使用第三方库:github.com/Shopify/sarama。下载及安装go get github.com/Shopify/sarama注意事项sarama v1.20之后的版本加入了zstd压缩算法,需要用到cgo,在Windows平台编译时会提示类似如下原创 2020-12-16 23:21:24 · 388 阅读 · 0 评论 -
【搞定Go语言】第3天7:Go标准库Context
在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。为什么需要Context基本示例pa原创 2020-12-15 23:19:22 · 572 阅读 · 0 评论 -
【搞定Go语言】第3天6:Go语言之依赖管理
Go语言的依赖管理随着版本的更迭正逐渐完善起来。依赖管理为什么需要依赖管理最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决?godepGo语言从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么go工具链会优先使用vendor内的包进行编译、测试等。godep是一个通过vender模式实现的Go语言的第三方依赖管理工具,类似的还有由社区维护准官方包管原创 2020-12-13 21:53:11 · 225 阅读 · 0 评论 -
【搞定Go语言】第3天5:使用go module导入本地包
go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。到今天Go1.14版本推出之后Go modules 功能已经被正式推荐在生产环境下使用了。这几天已经有很多教程讲解如何使用go module,以及如何使用go module导入gitlab私有仓库,我这里就不再啰嗦了。但是最近我发现很多小伙伴在群里问如何使用go module导入本地包,作为初学者大家刚开始接触package的时候肯定都是先在本地创建一个包,然后本地原创 2020-12-13 21:48:20 · 335 阅读 · 0 评论 -
【搞定Go语言】第3天4:NSQ开源的实时分布式内存消息队列
Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。 NSQ的优势有以下优势:NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证NSQ支持横向扩展,没有任何集中式代理。NSQ易于配置和部署,并且内置了管理界面。NSQ的应用场景通常来说,消息队列都适用以下场景。异步处理参照下图利用消息队列把业务流程中的非关键流程异步化,从而显著降低业务请求的响应时间。 应用解耦通过使用消息队列将不同的业务逻辑解耦,降低系统间的耦合,提高系统的健壮性。后续有原创 2020-12-11 23:58:39 · 490 阅读 · 0 评论 -
【搞定Go语言】第3天3:Go语言操作Redis
在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。Redis介绍Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。Redis支持的数据结构Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查原创 2020-12-10 22:45:55 · 505 阅读 · 0 评论 -
【搞定Go语言】第3天2:sqlx库使用指南
在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子,介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。sqlx介绍在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认为是Go语言内置database/sql的超集,它在优秀的内置database/sql基础上提供了一组扩展。这些扩展中除了大家常用来查询的Get(dest interface{}, …) error和Select(d原创 2020-12-09 22:20:18 · 578 阅读 · 0 评论 -
【搞定Go语言】第3天1:Go语言操作MySQL
MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。Go操作MySQL连接Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。使用database/sql包时必须注入(至少)一个数据库驱动。我们常用的数据库基本上都有完整的第三方实现。例如:MySQL驱动下载依赖go get -u github.com/go-sql-driver/mysql使用MySQL驱动func Open(driverName, dat原创 2020-12-08 22:05:52 · 611 阅读 · 0 评论 -
【搞定Go语言】第2天23:Go语言基础之net/http
Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。net/http介绍Go语言内置的net/http包提供了HTTP客户端和服务端的实现。HTTP协议超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP客户端基本的HTTP/HTTPS请求Get、Head、Post和PostForm函数原创 2020-12-07 23:18:48 · 633 阅读 · 0 评论 -
【搞定Go语言】第2天22:Go语言标准库flag基本使用
Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。os.Args如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。package mainimport ( "fmt" "os")//os.Args demofunc main() { //os.Args是一个[]string if len(os.Args) > 0 { for index, arg := range os.Args {原创 2020-12-07 23:13:43 · 250 阅读 · 0 评论 -
【搞定Go语言】第2天21:Go语言基础之单元测试
不写测试的开发不是好程序员。我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分。 这篇文章主要介绍下在Go语言中如何做单元测试和基准测试。go test工具Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go原创 2020-12-06 21:07:58 · 186 阅读 · 0 评论 -
【搞定Go语言】第2天20:Go语言基础之网络编程
现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程。 关于网络编程其实是一个很庞大的领域,本文只是简单的演示了如何使用net包进行TCP和UDP通信。如需了解更详细的网络编程请自行检索和阅读专业资料。互联网协议介绍互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。我们理解了这些协议,就理解了互联网的原理。由于这原创 2020-12-02 20:52:19 · 295 阅读 · 0 评论 -
【搞定Go语言】第2天19:Go语言基础之并发
并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。Go语言中的并发编程并发与并行并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。goroutine是由Go语言的运行时(runtime)调度完成,而线程是由操作系统调度完成原创 2020-11-30 21:54:23 · 274 阅读 · 0 评论 -
【搞定Go语言】第2天18:Go语言内置包之strconv
Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换。strconv包strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi()、Itia()、parse系列、format系列、append系列。更多函数请查看官方文档。string与int类型转换这一组函数是我们平时编程中用的最多的。Atoi()Atoi()函数用于将字符串类型的整数转换为int类型,函数签名如下。func Atoi(s string) (i int, err error)原创 2020-11-28 21:53:37 · 461 阅读 · 0 评论 -
【搞定Go语言】第2天17:反射
本文介绍了Go语言反射的意义和基本使用。变量的内在机制Go语言中的变量是分为两部分的:类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。反射介绍反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。因此在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信原创 2020-11-25 22:07:34 · 172 阅读 · 0 评论 -
【搞定Go语言】第2天16:Go语言标准库log介绍
无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯。logGo语言内置的log包实现了简单的日志服务。本文介绍了标准库log的基本使用。使用Loggerlog包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|P原创 2020-11-23 21:32:47 · 395 阅读 · 0 评论 -
【搞定Go语言】第2天15:Go语言基础之time包
时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。time包time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。时间类型time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下:func timeDemo() { now := time.Now() //获取当前时间 fmt.Printf("current time:%v\n", now) year := no原创 2020-11-23 21:29:38 · 273 阅读 · 0 评论 -
【搞定Go语言】第2天14:Go语言fmt.Printf使用
fmt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数。fmtfmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。向外输出标准库fmt提供了以下几种输出相关函数。PrintPrint系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。func Print(a ...interface{}原创 2020-11-19 22:13:24 · 408 阅读 · 0 评论 -
【搞定Go语言】第2天13:Go语言文件操作
文件是什么?计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。打开和关闭文件os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关闭文件。package mainimport ( "fmt" "os")func main() { // 只读方式打开当前目录下的main.go文件 file, err := os.Open("./main.go") if err != nil {原创 2020-11-19 22:02:25 · 263 阅读 · 0 评论 -
【搞定Go语言】第2天12:Go语言基础之接口
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。接口类型在Go语言中接口(interface)是一种类型,一种抽象的类型。interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型。为什么要使用接口ty原创 2020-11-18 21:15:58 · 272 阅读 · 0 评论 -
【搞定Go语言】第2天11:Go语言基础之包
在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。Go语言的包(package)包介绍包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。定义包我们还可以根据自己的需要创建自己的包。一个包可以简单理解为一个存放.go文件的文件夹。 该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包。package原创 2020-11-18 21:09:09 · 198 阅读 · 0 评论 -
【搞定Go语言】第2天10:Go语言基础之结构体
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。类型别名和自定义类型自定义类型在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如://将MyInt定义为int类型type MyInt int通过type关键字的定义,MyInt原创 2020-11-14 23:06:55 · 217 阅读 · 0 评论