go 从0开始学习笔记

go面试题学习笔记 go高级面试题 go语言设计与实现 go语言的深度理解-知乎 关于学习 学习的方法可以说是一千个人有一千个哈姆雷特。我比较讨厌教科书式的学习,把书从第一页翻到最后一页,这样可能是表面上读完了。但是记住了多少呢?其实呢,我们可能往往只需要记住一个点就行了,一个点可以牵扯出很多东西,以点及线,以线及面 安装略 创建项目 mkdir /Users/zhangguofu/app/goApp cd /Users/zhangguofu/app/goApp 使用go mod 作为包管理 g...阅读全文

简书 2021-04-01 23:32:41 张清柏

2021-04-01:给定一个正方形矩阵matrix,原地调整成顺时针90度转动的样子。[[a,b,c],[d,e,f],[g,h,i]]变成[[g,d,a],[h,e,b],[i,f,c]]。

2021-04-01:给定一个正方形矩阵matrix,原地调整成顺时针90度转动的样子。[[a,b,c],[d,e,f],[g,h,i]]变成[[g,d,a],[h,e,b],[i,f,c]]。 福大大 答案2021-04-01: 四数交换。先外圈交换,再内圈交换。 代码用golang编写。代码如下: package main import "fmt" func main() { matrix := [][]int{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, ...阅读全文

简书 2021-04-01 23:32:32 福大大架构师每日一题

leetcode 最接近目标值的子序列和 golang

1755. 最接近目标值的子序列和 由于量级在40,所以单纯的dfs会出问题,所以需要把数组一分为2。然后对得到的数组排序,然后问题就转变为求 2个数组的加和问题。 数组排序 一个从大到小,一个从小到大。求最接近目标的值即可。 func minAbsDifference(nums []int, goal int) int { ans := math.MaxInt32 n := len(nums) m := map[int]bool{} dfs(nums[:n/2], 0, m) A := mak...阅读全文

简书 2021-04-01 23:32:31 lucasgao

golang 归并排序

归并排序的时间复杂度为:O(nlogn) func HeapSort(data []int) []int { len := len(data) if len <=1 { return data } //将待排序的数组划分为左右2部分,递归的进行 mid :=len/2 left :=data[:mid] right :=data[mid:] left= HeapSort(left) right= HeapSort(right) //对划分后的两部分进行排序 return Sort(left,ri...阅读全文

简书 2021-04-01 20:32:31 夜空中乄最亮的星

手撸golang etcd raft协议之6

手撸golang etcd raft协议之6 缘起 最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1) 本系列笔记拟采用golang练习之 gitee: https://gitee.com/ioly/learning.gooop raft分布式一致性算法 分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性? Raft算法把问题分解成了四个子问题: 1. 领袖选举(leader ele...阅读全文

简书 2021-04-01 20:32:31 老罗话编程

再见,Python!你好,Go语言

2019 年程序员最想学习的编程语言出身名门的 Go 语言对于一门只有十年历史的新语言,Go 的发展势头相当迅猛,容器界的扛把子 Docker 就是用 Go 写的,国内也有不少团队广泛使用 Go。近日,HackerRank 在社区发起了 程序员技能调查,来自 100 多个国家、超过 70000 名开发者参与其中。调查结果显示,2019 年,程序员最想学习的编程语言 Top 3 分别是 Go、Kotlin 和 Python,其中 Go 以 37.2% 的比例排在首位。但 Go 要想撼动编程界的常青...阅读全文

51CTO博客 2021-04-01 17:44:02 mb5fdb0a1b25659

Go语言学习8-接口类型

3.Go语言数据类型 上篇我们了解了Go语言的函数类型,本篇主要了解接口类型。主要如下: 3.6 接口 一个Go语言的接口由一个方法的集合代表。只要一个数据类型(或与其对应的指针类型)附带的方法集合是某一个接口的方法集合的超集,那么就可以判定该类型实现了这个接口。 3.6.1 类型表示法 接口类型的声明由若干个方法的声明组成。方法的声明由方法名称和方法签名构成。在一个接口类型的声明中不允许出现重复的方法名称。 接口类型是所有自定义的接口类型的统称。以标准库代码包 sort 中的接口类型 Inte...阅读全文

51CTO博客 2021-04-01 15:04:02 Huazie

golang 接口值

1.一个接口值由一个具体的类型和那个类型的值两部分组成,被称为接口的动态类型和动态值。 类型部分代表与之相关的类型描述符。 类型描述符是提供每个类型信息的值。 2.几种接口值举例 (1) //in io package type Writer interface { Write(p []byte) (n int, err error) } var w io.Writer//接口 w = os.Stdout /* Stdout = NewFile(uintptr(syscall.Stdout), ...阅读全文

简书 2021-04-01 15:32:57 hapcat

go每日一库 [home-dir] 获取用户主目录

## 关于我 [我的博客|文章首发](http://www.zhouhuibo.club) 顾名思义,`go-homedir`用来获取用户的主目录。实际上,通过使用标准库`os/user`我们也可以得到内容,使用以下方式 ## 标准库使用 ``` package main import ( "fmt" "log" "os/user" ) func main() { u, err := user.Current() if err != ...阅读全文

Go语言中文网 2021-04-01 14:28:12 happlyfox

Go语言学习6-字典类型

3. Go语言数据类型 上篇我们介绍了Go语言的切片类型,本篇我们了解一下Go语言的字典类型。主要如下: 3.4 字典 在Go语言中,字典类型的官方称谓是Map, 它是哈希表(Hash Table)的一个实现。 3.4.1 类型表示法 如果一个字典类型的键的类型为K,且元素的类型为T,那么用于表示这个字典类型的类型字面量: map[K]T 字典类型声明中的元素类型可以是任意一个有效的Go语言数据类型(除了函数类型、字典类型或切片类型)。键的类型必须是可比较的。如果字典类型的键类型是接口类型,那么...阅读全文

51CTO博客 2021-04-01 11:33:31 Huazie

2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v的最长子数组长度。

2021-03-31:给定一个数组arr,给定一个值v。求子数组平均值小于等于v的最长子数组长度。 福大大 答案2021-03-31: 这道题是昨天每日一题的变种。数组每个元素减v,然后求<=0的最长子数组长度。 1.前缀和+有序表。时间复杂度O(N*lgN)。无代码。 2.滑动窗口。时间复杂度O(N)。这道题用自然智慧想不到,需要练敏感度。有代码。 数组每个元素减v。 minSum数组,最小累加和,以i开头最小值。 minSumEnd数组,以i开头最小值,右边界在哪里。 采用滑动窗口,右指针每...阅读全文

简书 2021-04-01 12:32:35 福大大架构师每日一题

golang base64 斜杠 等号 问题

背景 写一个接口认证的时候,密码需要通过SHA1+HMAC加密以后转base64,发现加密的结果不符合预期 问题 shell里面通过命令生成的字符串 golang生产的结果有差别 具体的说,shell 生产的base64传里面有'/',对应golang生产的是'_',例如下面案例 shell输出: NaY6swRy/2BgUPuVUAWEDlaWZ3s= golang输出:NaY6swRy_2BgUPuVUAWEDlaWZ3s= 原因 golang base64 有不同方法进行encode/de...阅读全文

简书 2021-04-01 12:32:34 TedCat

手撸golang etcd raft协议之5

手撸golang etcd raft协议之5 缘起 最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1) 本系列笔记拟采用golang练习之 gitee: https://gitee.com/ioly/learning.gooop raft分布式一致性算法 分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性? Raft算法把问题分解成了领袖选举(leader election)、 日志...阅读全文

简书 2021-04-01 12:32:34 老罗话编程

go语言的递归函数调用

1、 go语言函数返回过程 首先需要明白go语言函数的返回过程 借助defer关键字,我们了解到关键字return不是一个原子操作,实际上return只代表汇编指令ret,即跳转程序执行。比如语句 return i,实际上分两步执行,即首先将i值存入栈中作为返回值,然后执行跳转,而defer的执行时机正是在跳转前。 2、go函数调用规范 在Go汇编语言中CALL指令用于调用函数,RET指令用于从调用函数返回。但是CALL和RET指令并没有处理函数调用时输入参数和返回值的问题。CALL指令类似PU...阅读全文

Go log

一般而言日志可分为事件日志和消息日志两种 事件日志记录发生在系统运行过程中的事件,用来审计操作、诊断问题等。对理解复杂系统的运行非常关键。 消息日志被应用在比如即时通信中,用来记录来往的消息。 标准的日志定义在IETF中,会记录时间、地点、参与者、起因、简要经过等信息。 日志记录一般格式:[时间][日志级别][地点][参与者][事件][起因] 对于系统日志一般还会定义严重性等级(Severity Level)用来标识该条日志记录的紧要程度 紧要程度 日志级别 0 EMERGENCY 1 ALER...阅读全文

简书 2021-04-01 12:32:33 JunChow520

21 Golang中的接口(一)

Golang中接口定义了对象的行为规范,只定义规范不实现。接口中定义的规范由具体的对象来实现。 每个接口由数个方法组成,接口的定义格式如下: type 接口名 interface { 方法名1 (参数列表1) 返回值列表1 方法名2 (参数列表2) 返回值列表2 …… } 接口名:使用type将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后加er,eg:写操作的接口叫Writer,有字符串功能的接口叫Stringer等。 demo 如果接口中有方法,必须要通过结构体或者通过自定...阅读全文

简书 2021-04-01 12:32:33 learninginto

简介

go是一门新的语言,虽然它从现存的语言中借鉴了很多想法,它仍然有一些不同寻常的特性使高性能go程序与他借鉴的语言编写的程序有所不同。一个程序直接从C++或者Java转成Go,一般并不能得到一个让人满意的结果,毕竟Java程序是用Java编写的,不是用Go。另一方面,如果从Go的角度出发去思考编程,就能得到一个成功运行但是完全不同的程序。换句话说,想要把Go写好,理解Go的属性和风格是很重要的,了解Go的命名、格式化、程序构造等既定用例也很重要。这样你写的程序就很容易让其他的Go程序员理解了。 这...阅读全文

简书 2021-04-01 12:32:33 岸边露伴一动不动

sync.Pool原理

转自:https://zhuanlan.zhihu.com/p/76812714 请问sync.Pool有什么缺点? 1.12及之前版本的sync.Pool有三个问题: 每次GC都回收所有对象,如果缓存对象数量太大,会导致STW1阶段的耗时增加。 每次GC都回收所有对象,导致缓存对象命中率下降,New方法的执行造成额外的内存分配消耗。 Pool.Get方法底层有锁,极端情况下,要尝试最多P次抢锁,也获取不到缓存对象,最后得执行New方法返回对象。 这些问题就对sync.Pool的室使用提出了要求...阅读全文

简书 2021-04-01 12:32:33 o0O0o_b39d

Golang内存分配逃逸分析

参考博客 https://www.jianshu.com/p/b85696ae6e71 https://www.jianshu.com/p/ff8373429ccc https://www.cnblogs.com/shijingxiang/articles/12200355.html 问题 知道golang的内存逃逸吗?什么情况下会发生内存逃逸? 1、golang的内存分配方式分为栈(stack)和堆(heap)两种;栈廉堆贵 分配到栈内存的好处:函数返回时会直接释放,不会引起垃圾回收,对性能没...阅读全文

简书 2021-04-01 12:32:31 我是不会赢的