18 neweastsun

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 1k+

Golang 实现冒泡排序

Golang 实现冒泡排序本文实现冒泡排序,充分利用Go语言特性。1. 冒泡排序冒泡排序循环集合n次的排序算法,每次遍历一次集合。其检查第一个元素和第二个元素,如果第一个大于第二个则交换它们,整个过程重复执行该动作。该算法时间复杂度为O(n*n),n为待排序元素个数,最坏情况是下面示例:[9,8,7,6,5,4,3,2,1,0]对于完全是逆序数组,冒泡排序需要迭代10次。最好场景是O(n), 在这之间可考虑优化,第一次迭代之后,最大的已经排好序,下次就可以不比较它;这样每次遍历之后总长度就少一

2020-07-12 16:19:22

Golang 数据结构——队列

Golang 数据结构——队列队列是按照先进先出原则的顺序集合。从队列的一端加入元素,从另一端取出元素。队列应用在现实中有很多场景,我们可以想象超时的结账队列或电影院的检票队列。1. 实现我们使用slice作为队列底层结构,暴露下列方法:New()Enqueue()Dequeue()Front()IsEmpty()Size()New类似构造函数,负责初始化内部切片。我们打算创建一个泛型、并发安全的队列ItemQueue。可以使用genny生成特定类型实现,封装泛型类型值的数据结构。

2020-07-12 11:04:12

Golang Struct 示例教程

Golang Struct 示例教程结构体是包括一组属性或字段的用户定义类型。,用来组织相关数据为一个整体。结构体可以描述现实世界实体的一组属性。如果你有面向对象编程背景,可以认为结构体是轻量级的类,支持组合但不支持继承。1. 定义结构体类型下面定义新的结构体:type Person struct { FirstName string LastName string Age int}type关键词定义新的类型,接着是用户类型名称,后面关键字struct表明正在定义结构体。

2020-07-11 16:12:10

Golang互斥锁——读写锁

Golang互斥锁——读写锁Golang原生支持并发应用,几乎没有其他语言默认支持如此多的并发实现工具。本文在上文的基础上讲解读写锁。1. 互斥锁解决什么问题我们并不希望多个线程或协程同时访问相同内存。在并发应用中,很多不同的线程或协程很有可能同时访问相同内存变量。互斥锁可以实现避免同时读写问题。当一个线程写内存变量,同时另一个线程并发读相同的内存变量。程序将会报错,因为读取线程可能正在读错误数据,这些数据正在发生变化。互斥锁跟踪在任何给定时间哪个线程可以访问一个变量。2. 互斥锁示例请看下面

2020-07-11 11:45:38

Golang几种对象比较方法

Golang几种对象比较方法本文讨论下Go中对象比较,分别为==、第三方包github.com/google/go-cmp/cmp中cmp.Equal()方法、reflect.DeepEqual()以及自定义isEqual()方法。1. 环境准备为了演示,这里定义简单Person结构体以及NewPerson方法创建对象。type Person struct { Name string Age int}func NewPerson(name string, age int) *Person

2020-07-09 20:54:23

生成模板代码实现Golang泛型

生成模板代码实现Golang泛型Golang是强类型静态语言,暂不支持泛型。那么如何定义通用类型的数据结构和算法呢?使用interface{}不是好的解决方案,接口需要转换同时会丢失静态类型的优势。本文我们介绍模板代码结合代码生成器,实现编译时检查、安全的、高性能的泛型编程。1. 实现通用Set数据结构如何实现一个数据结构(算法也一样)支持常用类型,生成特定类型实现,可以轻松重用。使用genny,非常简单几个步骤:导入genny/generic定义类型为通用类型generic.Type,例如,

2020-07-06 18:29:49

介绍 Golang 通道(channel)

介绍 Golang 通道(channel)本文介绍如何使用Golang通道。通道是Go应用中链接协程通信的管道,协程可以往通道中推入值或从中读取值。利用通道可以非常方便地实现高性能、高并发应用,相比与其他语言更简单,这并不是巧合,而是Go语言的设计理念————并发作为语言的一等公民,使得并发应用尽可能简单而不失灵活性。通道的思想起始很早就有了,但Go的实现者希望通道承担更多使命————以尽可能简单的方式让开发者创建更好、更清晰的高性能并发应用。确实,Go语言最吸引我的能力是可以轻松创建并发应用,到目前为

2020-07-04 11:50:26

Golang 同步等待组(WaitGroup)

Golang 同步等待组(WaitGroup)如果你正在学习Go的高性能并发应用开发,那么了解同步等待组至关重要。本文带你认识同步等待组并通过示例进行说明。1. 同步等待组(WaitGroup)让我们直入主题,说明是同步等待组(WaitGroup),能够解决什么问题。在实际使用Go协程实现并行应用时,可能会遇到这样场景:需要阻塞部分代码执行,直到其他协程成功执行之后才继续执行。示例代码:package mainimport "fmt"func myFunc() { fmt.Pri

2020-06-26 16:43:39

介绍Golang互斥锁

介绍Golang互斥锁使用Go实现高度并行程序并不妨碍你实现具有竞争条件特性的应用。竞争条件会引起应用出现不期望的问题,且很难调试和修复。因此我们需要使用Go实现在安全方式下实现并行应用,并且不影响性能,这就是互斥锁要发挥的作用。1. 互斥锁互斥锁(Mutex)是一种机制,它阻止并发进程进入一个临界数据段,而该临界数据段已经被给定进程占用。下面使用现实示例进行说明。我们有一个银行账户,应用系统提供对账户实现存款和取款功能。在单线程同步程序这很容易实现,只需要必要单元测试就可以有效地保障程序按照预期需

2020-06-26 15:38:32

介绍Golang 协程实现并行应用

介绍Golang 协程实现并行应用Go是一种令人难以置信的高性能语言。它拥有大量的优秀特性,可以让你构建出速度惊人的应用程序。通过提供这些goroutine(协程)和channel(通道)机制使得构建并行程序相当简单。使用协程可以非常快地把顺序应用程序转成并行,无需担心创建线程或线程池。但与所有并发编程一样,这也会带来一些不可控因素,因此在所有函数调用前使用go关键字之前,必须考虑到这些不确定性。本文带你了解如何使用Go协程,提升程序性能。1. 协程协程是由Go运行时管理的轻量级线程,让我们能够轻松

2020-06-26 13:37:22

如何使用Redis Watch命令

如何使用Redis Watch命令使用Redis管理数据,理解如何使用事务存储键值对数据很重要。Redis事务与RDMMS事务有些类似,但也有差异。Redis主要通过几个命令有效管理事务,本文讨论Redis的Watch命令以及如何使用。1. 概述在阅读之前你最好安装好Redis环境,熟悉Redis常用命令。Redis事务命令主要包括 WATCH, EXEC, DISCARD, MULTI。这些命令构成一组命令块,确保在一个步骤中全部执行。首先,它们确保事务中的命令将按顺序执行并序列化。这意味着在执行

2020-06-24 18:15:17

介绍BoltDB:Golang高性能持久化解决方案

介绍BoltDB:Golang高性能持久化解决方案1. 介绍BoltBoltDB是纯Go语言实现的持久化解决方案,保存数据至内存映射文件。称之为持久化解决方案不是数据库,因为数据库这个词有很多额外功能是bolt所不具备的。正是因为缺乏这些功能使得bolt如此优雅、好用。Bolt就是一个Go包。无需在系统中安装,开始编码前也无需配置,什么都不需要,仅需要go get github.com/boltdb/bolt,然后import “github.com/boltdb/bolt”。要完全使用bolt的存

2020-06-21 15:48:30

Redis事务命令介绍

Redis事物命令介绍Redis基础命令在数据管理中扮演重要角色,Redis命令被设计为原子的,即Redis事务使用全由或全无命题,即一组命令要么都执行要么都不执行,一旦执行不会受其他事物干扰。因此了解事务的基本命令是简化工作量的关键,本文带你了解如何使用Redis命令。1. Redis的事务命令我们先介绍下Redis与事务相关的基础命令及功能:MULTI - 事务块的开始EXEC - 执行队列命令的信号,命令执行后返回正常状态DISCARD - 一旦执行完成清理队列中的命令,然后返回正常状

2020-06-20 14:50:50

Golang Base64编码解码

Golang Base64编码解码Golang内置支持Base64编码解码,Go的encoding/base64包遵照RFC 4648规范实现了base64编码解码功能,包括标准方式以及URL/文件名称安全方式编码。本文通过示例演示如何编码和解码。1. Base64 标准方式编码解码RFC 4648规范约定标准Base64对任何二进制数据使用US-ASCII字符子集进行编码,字符包括:A-Z, a-z, 0-9, +, and / 。编码示例:func encode() { data := "h

2020-06-17 17:58:45

Golang现代命令行应用框架Cobra

Golang现代命令行应用框架Cobra本文介绍强大的命令行应用框架Cobra,让我们专注业务快速搭建强大的命令行应用。1. 认识CobraCobra是非常便利和流行的Golang包,用于开发强大命令行应用,包括命令、子命令、配置文件等。如果你了解docker的常用命令,你大概能理解Cobra的强大功能,docker就是使用Cobra作为其基础。Cobra作为命令行应用框架,其强大功能还包括生成代码模板,让你只需关注业务实现。1.1 安装Cobrago get github.com/spf13/

2020-06-14 20:56:19

Java责任链模式

Java责任链模式本文介绍广泛使用的行为模式————责任链模式。1. 概述责任链模式有一个源头命令对象和一系列处理对象组成。链中每个处理对象负责处理特定类型命令,处理完成后交给下一个处理对象。责任链模式一般用于:解耦命令发送者和接受者处理时选择处理策略下面通过示例进行说明。2. 示例示例使用责任链处理认证请求。输入认证提供者在该场景下是命令,每个认证处理器是独立处理对象。首先定义处理器抽象类:public abstract class AuthenticationProcessor

2020-06-06 15:22:55

使用Jackson和JSON Pointer查询解析任何JSON节点

使用Jackson和JSON Pointer查询解析任何JSON节点JSON Pointer是字符串表达式,用于标识JSON文档特定节点。RFC 6901规范有定义,用于查询复杂Json文档结构。1.示例Json文档{ "firstName": "John", "lastName": "Doe", "address": { "street": "21 2nd Street", "city": "New York", "postal

2020-06-03 18:14:57

Golang几种连接字符串方法

Golang几种连接字符串方法Golang中字符串是不可变的使用UTF-8编码任意字节链。把一个或多个字符相加称为字符串连接。最简单的方式使用+操作符,本文介绍多种方式连接字符串。1. 使用加操作符首先介绍简单使用+操作符:package main import "fmt" func main() { str3 := "hello" str4 := "Golang" // Concatenating strings Using + operator

2020-05-31 11:45:47

PostgreSql关联表刷新数据

PostgreSql关联表刷新数据实际项目中因为部门表ID有变化,需要修改所有其他业务表中关联的字段值。使用PostgreSql过程自动刷,效率较高,但更新数据动作危险系数较高,最好先备份数据。1.关联表更新语法更新数据,从另一张表根据条件获取数据。语法格式如下: UPDATE b SET column1 = a.column1, column2 = a.column2, column3 = a.column3 FROM a WHERE a.id = b

2020-05-27 17:53:54

Golang三种方式拷贝文件

Golang三种方式拷贝文件本文介绍三种典型拷贝文件方式,同时比较三种方法的效率,让我们了解什么场景下选择合适的方法。1. 拷贝的文件三种方法三种典型的方法分别为Go标准库提供的io.Copy(),第二种方法是利用ioutil.ReadFile() 和 ioutil.WriteFile() ,最后是使用os.Read() 和 os.Write()方法。1.1 io.Copy()方法首先使用Go标准库的io.Copy()方法。copy()方法实现详细逻辑:func copy(src, dst s

2020-05-24 16:21:23

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 分享宗师
    分享宗师
    成功上传21个资源即可获取