GoLang--slice跳坑指南

slice是golang必会的基础之一,与python的列表和字符串切片有着高度的相似性但如果你按照python的切片照用在golang的话,嘿嘿,动不动就会蹦出奇葩的结果 先举个小栗子吧: arr:=[...]int{0,1,2,3,4,5,6,7,8,9} s1:=arr[2:6] s2:=s1[3:5]按照正常看来,改程序会报错,因为s1中并不存在索引为4的元素但是: 不你没有看错,就是这么神奇很多小伙伴会将slice和array一样对待,其实这两种东西差别还真不小(1)array是固定长...阅读全文

简书 2020-02-27 16:32:53 李航洛月

如何把golang的Channel玩出async和await的feel

引言如何优雅的同步化异步代码,一直以来都是各大编程语言致力于优化的点,记得最早是C# 5.0加入了async/await来简化TPL的多线程模型,后来Javascript的Promise也吸取这一语法糖,在ES 6中也加入了async和await.那么,被大家一称赞并发性能好、异步模型独树一帜的golang,能否也有async和await呢?其实,这对于golang的CSM来说是一点也不难!核心代码如下: done := make(chan struct{}) go func() { // do...阅读全文

简书 2020-02-27 16:32:50 Java天天

Go Modules 终极入门

Go modules 是 Go 语言中正式官宣的项目依赖解决方案,Go modules(前身为vgo)于 Go1.11 正式发布,在 Go1.14 已经准备好,并且可以用在生产上(ready for production)了,Go官方也鼓励所有用户从其他依赖项管理工具迁移到 Go modules。 而 Go1.14,在近期也终于正式发布,Go 官方亲自 “喊” 你来用: 因此在今天这篇文章中,我将给大家带来 Go modules 的 “终极入门”,欢迎大家一起共同探讨。 Go modules 是...阅读全文

掘金 2020年02月27日 煎鱼eddycjy

给Java程序员的Go私房菜(一) Go语言简介和环境安装

Go语言简介 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。(Google大法好[滑稽]) Go是静态强类型语言,是区别于解析型语言的编译型语言。也有的人说他说21世纪的C语言。 简直太耐看了这golang吉祥物。 golang的优势在于: 部署简单 并发性好 良好的语言设计 执行性好 说这么多不如战绩拿出来看看,有哪些是使用了go开发的 Docker:之前聊过的,一个字香! Kubernetes:俗称K8S,至于是什么就自行百度吧。 Lantern:蓝灯,...阅读全文

掘金 2020年02月27日 HarryZhang6

Grpc介绍 — ProToBuf基本使用

RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源的Grpc,和Thrift有很大的区别Grpc是基于HTTP2.0并且依赖protobuf,为什么又推出关于grpc的文章呢?请大家继续往下看。 附上: 喵了个咪的博客:w-blog.cn 博文实例demo:GitHub - sunmi-OS/grpc-php-to-golang-demo grpc官网:grpc / grpc.io pr...阅读全文

简书 2020-02-27 12:32:46 文振熙

G8.3 实现不可逆加密 - 用Go语言 Golang实现

前两节介绍的加密方法都属于“可逆”的加密算法,因为加密后的密文经过解密的过程就可以还原出原文。还有一类加密算法属于“不可逆”的加密算法,是指一般无法进行正常解密还原出原文的加密算法。 不可逆加密算法的应用场景也有很多,最典型的是服务端保存用户登录密码的方式。从保护用户隐私角度考虑,服务器端不应该存储用户的登录密码原文,也不应该保存可逆加密后的密文(因为也可以被解密还原),这时候实践中常用的方法是在服务器保存密码时将其用不可逆的算法转换成密文存储,下次用户登录时服务器将发来的用户密码以同样的不可逆...阅读全文

简书 2020-02-27 12:32:44 陆满庭

数组中的逆序对

题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%100的数据,size<=2*10^5 示例 输入 1,2,3,4,5,6,7,0 输出 7 思路 1.可以通过移动数字发现,计算逆序对的方...阅读全文

简书 2020-02-27 12:32:42 youzhihua

两个链表的第一个公共结点

题目描述 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 思路 假设两个链表的第一个公共结点为c。 链表1可以表示为a+c,链表2可以表示为b+c。 可以通过a+c+b+c = b+c+a+c来快速求出c的值,若没有公共结点,那c便是null。 可以根据下图,简单理解下这个过程。 Java代码实现 public class Solution { public ListNode FindFirstCommonNod...阅读全文

简书 2020-02-27 12:32:41 youzhihua

手把手教你写一个完美的Golang Dockerfile

引言 对于dockerfile而言,何为完美? 我认为应该满足以下三点: 体积小 构建快 够安全 话说不说,直接上拿走可用的Dockerfile。 FROM golang:1.13.5-alpine3.10 AS builder WORKDIR /build RUN adduser -u 10001 -D app-runner ENV GOPROXY https://goproxy.cn COPY go.mod . COPY go.sum . RUN go mod download COPY ....阅读全文

掘金 2020年02月26日 raining1127

golang 微服务之gRPC与Protobuf

RPC是什么? 所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。 gRPC是什么? 与许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。默认情况下,gRPC使用协议缓冲区作为接口定义语言(IDL)来描述服务接口和有效负载消息的结构。 gRPC有什么好处以及在什么场景下...阅读全文

Segmentfault 2020-03-01 13:32:33 UpWuzzzz

leetcode_819

Golang: 思路:这题的难点也在字符串的处理,但大部分的语言都提供类似的函数了,如果我们想提取字符串里的所有单词,使用正则是很好的途径,自己去分割字符串,处理标点符号,反而没什么意思。 代码如下: func mostCommonWord(paragraph string, banned []string) string { reg:=regexp.MustCompile("\\w+") mp1,mp2:=make(map[string]int),make(map[string]int) fo...阅读全文

简书 2020-02-27 09:32:41 淳属虚构

如何理解:程序、进程、线程、并发、并行、高并发?出自知乎大宽宽

在这里你可以了解:为啥大家说的进程的意思有出入?为啥并发那么难理解?为啥高并发不仅仅是“高”+“并发”的意思?为啥这些概念到了现实当中就不一样了?进程,和另一种进程假如你想铺一条长1000m,宽50m的路。为了解决这个问题,你先构想出来假如你自己1个人做,整个过程第一步干什么,第二步干什么等等。这个干活的过程,可以被称作一个【进程】(Process),或者你可以理解为“一个做事的办法/步骤/方案“。进程的英文Process本意就是“过程”的意思,是一个抽象的概念。这个活有没有真得干并不重要,重要...阅读全文

简书 2020-02-27 09:32:40 dimoncode

x 的平方根

实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 Golang解决: package main import "fmt" func binaryFind(x, l, r int) (t int) { m := (l + r + 1)...阅读全文

简书 2020-02-27 09:32:40 CancerTiN

Go 每日一库之 message-bus

简介 在一个涉及多模块交互的系统中,如果模块的交互需要手动去调用对方的方法,那么代码的耦合度就太高了。所以产生了异步消息通信。实际上,各种各样的消息队列都是基于异步消息的。不过它们大部分都有着非常复杂的设计,很多被设计成一个独立的软件来使用。今天我们介绍一个非常小巧的异步消息通信库[message-bus](https://github.com/vardius/me...,它只能在一个进程中使用。源代码只有一个文件,我们也简单看一下实现。 快速使用 安装: $ go get github.com...阅读全文

Segmentfault 2020-03-01 11:32:34 darjun

二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a = "11", b = "1" 输出: "100" 示例 2: 输入: a = "1010", b = "1011" 输出: "10101" Golang解决: package main import ( "fmt" ) func addBinary(a string, b string) string { length := len(b) if len(a) > len(b...阅读全文

简书 2020-02-27 07:32:43 CancerTiN

谈谈 Golang, 以及我走的一些弯路

在某乎上看到了这个问题, 还是挺有意思的. 撕哪个语言最好, 几乎是工程师当中最好的引战题目了. 今天我只想谈谈我是怎么看待 Go 的, 以及我走的一些弯路.我是 2010 年在学校的时候了解到 Go 语言的. 当时的 Go 语言还是一塌糊涂, STW GC 是大家嘲讽 Go 语言的最佳标靶. 只要黑一句, Go 粉基本被噎得说不出话来.我当时正想储备一门带并发编程模型的语言. 因为觉得未来 CPU 主频不再增长的情况下, 带并发编程模型的语言肯定是未来的主流. 是共享内存型语言强有力的竞争对手...阅读全文

简书 2020-02-27 07:32:43 即将秃头的Java程序员

假期笔记

不能盲目优化 一是在追求速度的时候抓不住重点。比如在没有一个完善的测量系统不知道瓶颈在哪就开始优化,花了一个多月软件提高了半个毫秒结果发现别人一个网络改动一下省10毫秒。小公司在进行大优化之前不估算投入产出比,耗费大量软硬件开发资源做对策略影响不大的改进。比如没弄清楚情况自己策略情况就强行上FPGA团队的。 虚拟语气 couldn't agree more,表示十分同意。 can't agree anymore表示十分同意是错误的,字面意思是,不能再继续同意下去了。 并发编程模型 共享数据,加锁...阅读全文

简书 2020-02-27 07:32:41 sunboximeng

Golang 问题点(一)

1. make和new的区别: make和new都在堆上分配内存. 但是他们的行为不同, 适用于不同的类型. new(T) 返回的是T的指针, 其中T为一个类型, 不是一个值, 为T类型新值分配内存空间并将此空间初始化为T类型的的零值, 返回的是新值得地址,即T的指针*T的值, 该指针指向T的新分配的零值. make(T, args) 用来为slice,map货channel类型分配内存和初始化一个对象, 返回类型的引用we不是指针, 返回值根据T的不同而不同. 简单来讲: new 的作用是初始...阅读全文

简书 2020-02-27 07:32:41 董小贱

golang协程实现探讨

问题一:介绍一下协程的运行时runtime,以及他跟协程有什么关系,为什么需要先介绍它?答:你要能从根本上了解一下这个语言的实现,才能更好的知道协程是怎么实现的。首先它是一个二进制的应用程序,这就和c#,python.lua语言有点不同,他们只是编译成一种中间代码,然后需要一个运行的程序去读取翻译他们,这个运行的程序一般理解为运行时。golang把和操作系统的系统调用、协程实现、统一管理(调度器)、gm。做了一个统一的封装,叫做运行时,我们编译golang项目的时候会先编程合成文件,然后在链接的...阅读全文

简书 2020-02-27 07:32:39 盈朔

手把手教你写一个完美的Golang Dockerfile

引言 对于dockerfile而言,何为完美? 我认为应该满足以下三点: 体积小 构建快 够安全 话说不说,直接上拿走可用的Dockerfile。 FROM golang:1.13.5-alpine3.10 AS builder WORKDIR /build RUN adduser -u 10001 -D app-runner ENV GOPROXY https://goproxy.cn COPY go.mod . COPY go.sum . RUN go mod download COPY ....阅读全文

简书 2020-02-27 07:32:39 海之方