Go 切片绕坑指南

在Go中按值传递时,为什么有时会更改切片? 不知道大家有没有发现在一个函数内部对切片参数进行了排序后也会改变函数外部原来的切片中元素的顺序,但是在函数内向切片增加了元素后在函数外的原切片却没有新增元素,更奇怪的是添加并排序后,外部的切片有可能元素数量和元素顺序都不会变,这是为什么呢?我们通过三个小测验来解释造成这个现象的原因。测验一下面的代码的输出什么? func main() { var s []int for i := 1; i <= 3; i++ { s = append(s, i) } ...阅读全文

简书 2020-03-02 01:32:47 Java天天

kafka的理论知识

kafka官网上介绍kafka是一个分布式流处理平台。 那什么是流处理平台呢,流处理平台有以下三种特性: 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。 可以储存流式的记录,并且有较好的容错性。 可以在流式记录产生时就进行处理。 第一个特性很好理解,我们可以用kafka去发消息和接受消息,做一个广播,这个很多工具都可以做到,redis也支持,自己实现也可以,但是kafka强大在他的高可用高性能和可靠性。 第二点,kafka他自己有个参数,log.retention.hou...阅读全文

简书 2020-03-02 01:32:46 yellowone

先搞清楚这些问题,简历上再写你熟悉Java!

副本_未命名.jpg 原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 系列文章介绍 本文是《五分钟学Java》系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年多的Java学习和工作经历,总结和沉淀下来的方法论,希望能让Java学习这件事变得更简单,作者目前在阿里做Java,忙里偷闲分享一些技术文章,有兴趣看本系列更多文章可以关注我的公众号【Java技术江湖】 系列文章将会把一些技术学习方法、过程、要领与我的学习经验相结合,更加浅显易懂,并且我也...阅读全文

简书 2020-03-02 01:32:45 程序员黄小斜

golang sync.errgroup 源代码阅读

errgroup用途 调用多个go程做访问一批url,它们是有失败的可能,如何把第一个出错的信息返回给调用端。这涉及到多go程返回错误的技巧。你可以用一个错误chan chan error返回错误,调用端读取错误<- err,涉及到读取context.Done,只能使用select这个大杀器滥听两路以上chan,你需要痛苦地写一些没有营养的模板代码,你很希望有人能救你,这时就该到我们的sync.errgroup登场 一段代码(多go程中返回第一个错误) 使用很简单,声明,使用,等待 声明 var...阅读全文

简书 2020-03-02 01:32:44 疯狂的小蚂蚁go

图解Go语言内存分配

转载自图解Go语言内存分配 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会每次内存分配都需要进行系统调用。 Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc算法,全称Thread-Caching Malloc。核心思想就是把内存分为多级管理,从而降低锁的粒度。它将可用的堆内存采用二级分配的方式进行管理:每个线程都会自行维护一个独立的内存池,进行内存...阅读全文

简书 2020-03-02 01:32:44 网管同学

Docker基础(2) 实践篇

Docker基础(2) 实践篇 Docker的指令系统 全局指令 Docker仓库管理 Docker镜像管理 Dockerfile Docker容器管理 Docker Compose 命令的嵌套 Docker的指令系统 Docker指令的操作对象主要针对四个方面: 针对守护进程的系统资源设置和全局信息的获取。比如:docker info、docker deamon等。 针对Docker仓库的查询、下载操作。比如:docker search、docker pull等。 针对Docker镜像的查询、...阅读全文

简书 2020-03-02 01:32:39 zhixin9001

Golang调度模型

1 goroutine 在java/c++中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢? Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能地将...阅读全文

简书 2020-03-02 01:32:39 DevilRoshan

第九章 九析带你轻松完爆 go - 切片 slice

系列文章:总目录索引:九析带你轻松完爆 go 系列教程目录1 前言2 切片的声明3 切片的初始化 3.1 先声明后初始化 3.2 声明并初始化4 切片和数组的关系 4.1 数组转化为切片 4.2 切片的长度 4.3 切片的容量 4.4 切片的切片1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:2 切片的声明 切片在 go 语言中是一种特殊的数据类型,你不要觉得它难学,你只需要将它看成一种特殊的数组类型即可。它跟数组区别在于,数组声明时需要指定长度,但切片并不指定...阅读全文

51CTO博客 2020-03-01 20:25:17 九析

golang select channel 如何保证安全退出,不丢失数据?

今天研究了一下channel的源码,对channel的安全退出有了一些小见解。在此结合实际应用,对select 于channel结合对情况下,安全退出channel做一下记录。场景1:直接退出(会丢失数据) 因为退出时,直接程序就中断了,channel里存对数据直接丢失。package main import ( "fmt" "sync" "time" ) var ( wg sync.WaitGroup channel = make(chan int,...阅读全文

Go语言中文网 2020-03-01 22:38:02 yuanshuli11

第八章 九析带你轻松完爆 go - 数组玩

系列文章:总目录索引:九析带你轻松完爆 go 系列教程目录1 前言2 一维数组 2.1 一维数组声明 2.2 一维数组初始化 2.2.1 全量初始化 2.2.2 长度推测初始化 2.2.3 指定索引初始化 2.3 一维数组遍历 2.3.1 索引遍历数组 2.3.2 range 遍历数组3 二维数组 3.1 二维数组声明 3.2 二维数组初始化 3.3 二维数组遍历 3.3.1 索引遍历 3.3.2 range 遍历1 前言 如果你对博客有任何疑问或者想更深入学习 go,请加微信群,我们一起进步:...阅读全文

51CTO博客 2020-03-01 12:32:12 九析

mac安装gdb,lldb遇到的若干问题

今天折腾了下 Golang的调试工具gdb和lldb, 遇到了一些问题, 在这里记录下方便以后查找,也给遇到的小伙伴门一些参考。(只针对macOS系统) 生成证书报错 mac 创建证书 未知错误 = -2147414007 可以先生成一个登陆证书,然后将证书移动到系统那一类就行了 gdb 安装 gdb调试报错 Unable to find Mach task port for process-id 23330: (os/kern) failure (0x5). (please check gdb...阅读全文

Segmentfault 2020-03-05 09:32:33 say_leo

面试:反转链表

题目:反转链表 要求:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 反转链表算是面试中比较常见的一个关于链表的题,整体上难度不大,但如果你能掌握多种的解法,往往可以让面试官眼前一亮 注意提醒一点,在面对链表的面试题时,建议多画一下图理解一下 解法1:简单双指针 通过双指针,遍历 head 指针,通过中间变量,逐步指向新的 ...阅读全文

Segmentfault 2020-03-04 16:32:36 若鱼治水

Go中strings的常用方法

string操作在编程中具有极高的频率,那么string中有哪些有用的方法呢? 使用strings直接操作 Compare func Compare(a, b string) int 按照字典序比较两个字符串,通常情况下直接使用=,>,<会更快一些。 Contains,ContainsAny 和 ContainsRune func Contains(s, substr string) bool func ContainsAny(s, chars string) bool func Contain...阅读全文

掘金 2020年03月01日 大漠胡萝卜

Go 每日一库之 watermill

简介 在上一篇文章Go 每日一库之 message-bus中,我们介绍了一款小巧、实现简单的异步通信库。作为学习,message-bus确实不错。但是在实际使用上,message-bus的功能就有点捉襟见肘了。例如,message-bus将消息发送到订阅者管道之后就不管了,这样如果订阅者处理压力较大,会在管道中堆积太多消息,一旦订阅者异常退出,这些消息将会全部丢失!另外,message-bus不负责保存消息,如果订阅者后启动,之前发布的消息,这个订阅者是无法收到的。这些问题,我们将要介绍的wat...阅读全文

掘金 2020年03月01日 darjun

Golang的sync.WaitGroup 实现逻辑和源码解析

基本概念 方便的并发,是Golang的一大特色优势,而使用并发,对sync包的WaitGroup不会陌生。WaitGroup主要用来做Golang并发实例即Goroutine的等待,当使用go启动多个并发程序,通过waitgroup可以等待所有go程序结束后再执行后面的代码逻辑,比如: func Main() { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() time....阅读全文

掘金 2020年03月01日 排骨JZh

Golang 基础(二)

常量常量使用关键字 const 定义,用于存储不会改变的变量。无法在程序运行过程中修改它的值。存储在常量中的数据只可以是布尔型、数字型(整数型,浮点型和复数)和字符串型。例如: 格式:const identifier [type] = value const Pi = 3.141592658 const a = 3 Go语言中,可以省略类型说明符 type ,Go的编译器可以根据变量的值来推断它的类型,例如: const a string = "abc" // 显式类型定义 const a :=...阅读全文

Go 每日一库之 watermill

简介 在上一篇文章Go 每日一库之 message-bus中,我们介绍了一款小巧、实现简单的异步通信库。作为学习,message-bus确实不错。但是在实际使用上,message-bus的功能就有点捉襟见肘了。例如,message-bus将消息发送到订阅者管道之后就不管了,这样如果订阅者处理压力较大,会在管道中堆积太多消息,一旦订阅者异常退出,这些消息将会全部丢失!另外,message-bus不负责保存消息,如果订阅者后启动,之前发布的消息,这个订阅者是无法收到的。这些问题,我们将要介绍的wat...阅读全文

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

Golang 入门

推荐学习网址:https://learnku.com/docs/推荐在线工具:https://play.golang.org推荐编译工具:gorelease(可以一次性编译多个环境的执行程序,包含windows/linux/macos)编译Go 是一门编译型,具有静态类型和类 C 语言语法的语言,并且有垃圾回收(GC)机制所谓编译,是将源代码翻译为更加低级的语言的过程 —— 翻译成汇编语言,或者翻译成其他中间语言。编译语言有一个很大的缺陷,在于它的编译过程太慢。编译型语言注重于运行速度和无依赖执...阅读全文

简书 2020-03-01 15:32:47 lexder

Golang 基础(一)

文件名、关键字与标识符文件名:Go的源文件是以.go为后缀名,文件名可以支持下划线_作为分隔,但是不支持空格或者其他特殊字符标识符:有效的标识符必须以字符开头(可以使用任何UTF-8编码的字符或者下划线_开头) 有效的标识符:X56,group1,_23,i,өԑ12 无效的标识符:1ab,case,a+b 下划线 _ 作为特殊的标识符,被称为空白标识符,它可以向其他标识符用于变量声明或者赋值,任何赋值给它的值都会被抛弃 关键字或保留字,共有25个: package/import:导入关键字 i...阅读全文

简书 2020-03-01 15:32:46 lexder