![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang语言知识总结
文章平均质量分 53
Golang知识集
码农印象
修炼的过程中,最好有人和你并肩而行,共同成长!努力做一个文邹邹的工具人,你做得越多,你知道的越多......
展开
-
【Go】Go语言中的omitempty字段
直接上代码:package main import ( "encoding/json" "fmt") type Person struct { Name string `json:"name"` Age int `json:"age"` Addr string `json:"addr,omitempty"`} func main() { p1 := Person{ Name: "taoge", Age:原创 2022-05-19 19:23:07 · 2451 阅读 · 0 评论 -
【Go】使用lua脚本实现redis分布式锁
分布式锁的要求实现分布式锁之前要明确一下分布式锁的要求互斥性,在任意时刻,只能有一个进程持有锁防死锁,不能因为持有锁的客户端宕机而使其他进程无法获取到锁。加锁和解锁的必须是同一个进程。保证锁的续租。redis分布式锁的优缺点redis实现的分布式锁性能会比zookeeper、etcd等实现的要好,但因为单点故障或者主备异步复制的问题,可能会出现当master宕机crash会导致多个client同时持有分布式锁。(这里的方案会出现这些问题)因为etcd的高可靠、强一致存储,可以避免故障时出原创 2022-04-30 01:55:05 · 977 阅读 · 0 评论 -
【Go】学习笔记
1. 跨平台、有垃圾回收机制;2. 支持Unicode字符集(符号集)以及utf-8编解码(存储格式),Go语言源文件总是用UTF8编码;3. 默认使用了静态编译,不依赖任何动态链接库;4. 必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。go语言编译过程中只有报错,没有警告;5. Go语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句;6. gofmt工具把代码格式化为标准格式;7. 只有i++,没有++i。i++是语句而非表达式,j = i++是错误的原创 2022-04-30 01:52:45 · 477 阅读 · 0 评论 -
【Go】内存对齐
字节对齐问题我们在项目中有很多Struct结构体的时候,然后它结构体里面字段的排列方式如果不刻意的安排一下的话,因为有些比如说string占用的字节长度和int占用的字节长度是不一样的。会导致有一个内存不对齐,内存浪费的问题。等我们发现这个问题的时候,想手动去调整,但是因为结构体有很多,手动调整就很麻烦,所以目前就是把这个问题先放下来。但是这个问题在以前学习计算机组成原理的时候,倒是有了解过计算机的字长是多少【16 位】。操作系统每次处理一个字长需要多少字节。1-4-1-8-1=1+3+4+1原创 2022-01-23 12:12:40 · 492 阅读 · 0 评论 -
Interface 与结构体
interface类型的nil的type是 nil,value是空(*Struct)(nil) 赋值过的nil的type是 *Struct,value是nil因此不相等原创 2021-12-16 22:03:53 · 199 阅读 · 0 评论 -
Go语言实现布隆过滤器
1 布隆过滤器原理 布隆过滤器一般用来判断一个数据是否在一个很大的数据集合里面。当然可以用数组,集合,树等数据结构和各种查找法都可以做同样的事情,但是布隆过滤器有更好的时间效率和空间效率。比特币实现SPV节点时使用了布隆过滤器来查询交易。布隆过滤器可以判断一个数在不在集合里,但存在一定的误判率。 布隆过滤器的核心是一个超大的位数组和几个哈希函数。假设位数组的长度为m,哈希函数的个数为k。 以上图为例,在这里维数组长度为18,哈希函数个数为3...转载 2020-11-24 12:07:40 · 739 阅读 · 0 评论 -
【Golang基础集】Golang基础知识
Go 简介Go 安装Go 开发环境Go 第一个程序Go build参考:go buildGo fmteg: go fmt ./…Go DocGo 其他命令Go 基础类型Go 变量var、const、enum、iota、:= 、_、make、newGo 枚举Go 条件IfGo 条件switchGo 条件forGo 数组Go 切片:Go 函数Go MapGo 接口Go 反射Go JsonGo 策略模式...原创 2021-11-22 21:05:15 · 318 阅读 · 0 评论 -
【Go】main程序启动过程
go run main.go 一个 Go 程序就启动了。然而这背后操作系统如何执行到 Go 代码的,Go 为了运行用户 main 函数,又做了什么?一 编译go build main.go我们写的 go 代码都是编译成可执行文件去机器上直接执行的,在 linux 平台上是 ELF 格式的可执行文件,linux 能直接执行这个文件。编译器:将 go 代码生成 .s 汇编代码,go 中使用的是 plan9 汇编汇编起:将汇编代码转成机器代码,即目标程序 .o 文件链接器:将多个 .o 文件.原创 2021-11-30 00:13:00 · 2752 阅读 · 0 评论 -
【String拼接】Go语言字符串如何高效的进行拼接(6种方式进行对比分析)
string类型我们首先来了解一下Go语言中string类型的结构定义,先来看一下官方定义:// string is the set of all strings of 8-bit bytes, conventionally but not// necessarily representing UTF-8-encoded text. A string may be empty, but// not nil. Values of string type are immutable.type str.原创 2021-11-26 09:51:31 · 2453 阅读 · 0 评论 -
【Golang】获取本地IP
Golang获取本地IP地址方法,目前了解两种,记录如下:方法1:func main() { addrs, err := net.InterfaceAddrs() if err != nil { fmt.Println(err) return } for _, address := range addrs { // 检查ip地址判断是否回环地址 if ipnet, ok := address.(*net.IP原创 2021-11-18 19:17:23 · 9487 阅读 · 0 评论 -
【Golang】Struct、Json及Map的互相转化
一、Json和Struct互换(1)Json转struct例子:package mainimport ( "fmt" "encoding/json")type People struct { Name string `json:"name_title"` Age int `json:"age_size"`}func JsonToStructDemo(){ jsonStr := ` { .原创 2021-11-18 18:03:38 · 241 阅读 · 0 评论 -
GO 判断一个文件是否存在
通过下面的代码可以判断一个指定的路径在系统是否存在。if _, err := os.Stat(path); err != nil { if os.IsExist(err) { // file exist return } // file not exist ==> os.mkdir} // file exist// TODO或者// exists returns whether the given file or director原创 2021-11-15 19:52:04 · 670 阅读 · 0 评论 -
【Golang】各厂三年go面经,来一起写写答案,欢迎评论区留下您的身影!!!
常见面试问题记录包含的公司:映客、好未来、猿辅导、知乎、高德、滴滴、字节、腾讯、美团、格步科技、旷视科技、网易、新浪、百度、小米、京东云、伴鱼;前面是汇总,各家公司面经在后面,大而全,是我一个月的全部面试记录,整体看下来问题是比较基础的,基本都是远程面试。rpc微服务框架mq底层数仓runtime包里面的方法redis过期策略和内存淘汰策略sql索引优化问题一个update语句的执行过程go的profile工具?http和tcp有什么区别用netstat看tcp连接的时候有关注过tim原创 2021-05-27 21:11:03 · 3757 阅读 · 7 评论 -
【Golang】如何使用fmt打印出Go中的常量uint64?
相信很多学Go且有好奇心了解uint64最大值的小伙伴都会遇到这样的问题,打印math.MaxUint64会出现以下错误:# command-line-arguments./1.go:44:26: constant 18446744073709551615 overflows int主要原因是因为:math.MaxUint64是一个常量,而不是uint64。改为:num := math.MaxUint64fmt.Printf("%d", uint64(num))这里的问题是常数是无类原创 2021-05-27 19:34:41 · 2936 阅读 · 7 评论 -
golang 使用 strings.Split 切割的注意
s := strings.Split("", "") fmt.Println(s, len(s)) s = strings.Split("abc,abc", "") fmt.Println(s, len(s)) s = strings.Split("", ",") fmt.Println(s, len(s)) s = strings.Split("abc,abc", ",") fmt.Println(s, len(s)) s = strin..原创 2021-01-08 12:11:04 · 1238 阅读 · 0 评论 -
Go语言 struct结构体 能比较么 == 或 !=
同一个struct的2个实例能不能比较 == !=答案:可以能、也可以不能两个不同的struct的实例能不能比较== !=答案:可以能、也可以不能虽然答案都一样,但是涉及到的知识点略有不同如果结构体的所有成员变量都是可比较的,那么结构体就可比较如果结构体中存在不可比较的成员变量,那么结构体就不能比较结构体之间进行转换需要他们具备完全相同的成员(字段名、字段类型、字段个数)大家注意看上图t1 t2 是同一个struct的2个赋值相同的实例他们本质就是结构体的一...原创 2020-10-22 12:19:06 · 1745 阅读 · 0 评论 -
【Golang】图解golang里面的读写锁实现与核心原理分析
读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个goroutine可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的写锁饥饿问题因为读锁是共享的,所以如果当前已经有读锁,那后续goroutine继续加读锁正常情况下是可以加锁成功,但是如果一直有读锁进行加锁,那尝试加写锁的goroutine则可能会长期获取不到锁,这就是因为读锁而导致的写锁饥饿问题基于高低位与等待队列的实现image.png在说golang之前介绍一种JAVA里面的实现,在JAVA中Reentrant.原创 2020-09-17 00:04:14 · 766 阅读 · 0 评论 -
Go1.9 Sync,Map 使用
sync.map就是1.9版本带的线程安全map,主要有:Store LoadOrStore Load Delete Range这几种用法Store(key, value interface{})说明:存储一个设置的键值。LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)说明:返回键的现有值(如果存在),否则存储并返回给定的值,如果是读取则返回true,如果是存储返回false。..原创 2020-09-07 23:38:29 · 234 阅读 · 0 评论 -
Go拼接字串的三种方法 Go1.10中的strings.Builder
使用+拼接字串会严重影响运行性能,以下提供3种字串拼接方法。利用bytes.Buffer拼接字串sArr := []string{"a","b","c","d"}var buffer bytes.Bufferfor _,str := range sArr{buffer.WriteString(strconv.Itoa(i))}fmt.Println(buffer.String)构建数组切片的方式接接字串sArr := []string{"a","b","c","d"}fmt.P原创 2020-08-29 02:09:55 · 2084 阅读 · 0 评论 -
Golang 自定义错误示例
package mainimport ( "fmt" "time")// MyError is an error implementation that includes a time and message.type MyError struct { When time.Time What string}func (e MyError) Error() string { return fmt.Sprintf("%v: %v", e.When, e.What)}func oops(原创 2020-08-29 02:02:35 · 339 阅读 · 0 评论 -
Go入门及进阶书籍推荐
Go入门教程全集链接: https://pan.baidu.com/s/1mWD7DpRa56WXi7WmNaohOg 提取码: ki1eCloud.Native.Go.pdf C和指针.pdf C++面向对象多线程编程.pdf Design Pattern InGo[go语言设计模式].pdf Docker —— 从入门到实践 - v1.0.pdf Docker 容器与容器云(第2版).pdfGO语言圣经(1).pdf GO语言圣经.pdf Go 内存模型 - Go 编程语言.pdf Go 学习原创 2020-08-26 21:48:09 · 1398 阅读 · 3 评论 -
GoWeb框架之Gin-简明教程
Gin 简介Gin is a HTTP web framework written in Go (Golang). It features aMartini-like API with much better performance – up to 40 times faster.If you need smashing performance, get yourself some Gin.Gin 是使用 Go/golang 语言实现的 HTTP Web 框架。接口简洁,性能极高。截止 1.4.原创 2020-08-24 21:48:25 · 1249 阅读 · 0 评论 -
Go语言的百万并发微服务公开课
互联网架构演进之路单体架构->垂直架构->SOA架构->微服务架构1,比如最开始创业公司要一个APP原型,即满足一个业务需求,所有功能放一起,就是单体架构2,随着公司壮大,业务逐渐壮大,慢慢把功能就分开了,形成模块开发,比如MVC架构,也就是垂直架构3,模块化也就意味着耦合度高,所以出现面向服务架构,就是将中心模块即共有抽取出来,也就是面向服务架构4,服务越来越多,也...原创 2019-10-08 08:55:46 · 778 阅读 · 0 评论 -
【Go】初识Go语言
前言2017.10,作为 Go 语言的三位创始人之一,Unix 老牌黑客罗勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顾了一下 Go 语言的发展过程。其中提到,Go 语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言。还提到中国程序员对 Go 语言的热爱完全超出了他们的想象,甚至他们都不敢相信是真的。Go...原创 2019-09-27 16:19:51 · 307 阅读 · 0 评论