跳至内容
从程序猿到架构狮
Abase2: NoSQL数据库中的CRDT支持实践
深入了解无冲突复制数据类型 (CRDTs)
两地三中心数据中心和同城双活数据中心的区别?
如何理解 Go 言中的 Context?
从零开始学架构(上篇)
标签系列
10节课学会Go
速通golang
分类
分类
选择分类
DB/Cache/MQ/ES
es
Kafka
mysql
redis
前端/客户端
未分类
机器学习/区块链
机器学习
算法/数据结构
算法
系统/架构/网关/运维
docker
http/https/url
linux
linux/shell 命令
linux内核
Rpc
全链路监控
安全
建站
异地容灾
微服务
日志
灰度发布
系统架构
网关/路由
nginx
设计模式
进程/线程/协程
采集/爬虫
限流/熔断/降级
高并发/高性能/高可用
语言
Golang
Go 基础教程
Go defer
Go Json
Go 函数Function
Go 切片Slice
Go 包package
Go 变量
Go 变量作用域
Go 基础语法
Go 常量
Go 开发工具IDE
Go 循环语句
Go 指针
Go 接口interface
Go 数据类型
Go 数组Array
Go 条件语句
Go 环境安装
Go 类型转换
Go 结构
Go 结构体
Go 范围Range
Go 运算符
Go 递归函数
Go 错误处理
Go 集合Map
Gopher 错误列表
Go 开源项目
Go 源代码/底层原理
Go 面试题
Go 高级教程
Go CGo扩展
Go CICD流水线
Go Context
Go GMP调度
Go Goroutine/Channel/Select/高并发
Go Http/Web服务
Go 内存缓存
Go 分布式
Go 性能分析
Go 设计模式
Go 调试/单测/dlv
GRpc/Pb
Python
Python 库
编辑器IDE
网络编程
量化与投资
股票
量化分析
高频交易
面试
面试技巧
面试题目
关于本站
每天进步一点点
展开菜单
当前页父级
语言
切换子菜单
当前页父级
Golang
切换子菜单
当前页父级
Go 基础教程
切换子菜单
Go 环境安装
Go 包package
Go 结构
Go 基础语法
Go 数据类型
Go 变量
Go 常量
Go 运算符
Go 条件语句
Go 循环语句
Go 函数Function
Go 变量作用域
Go 数组Array
Go 指针
Go 结构体
Go 切片Slice
Go 范围Range
Go 集合Map
Go 递归函数
Go 类型转换
Go 接口interface
Go 错误处理
Go Json
Go defer
当前页数:
Gopher 错误列表
Go 语言开发工具
Go 高级教程
切换子菜单
GRpc/Pb
Go 调试/单测/dlv
Go Http/Web服务
Go Udp/Tcp
Go Goroutine/Channel/Select/高并发
Go Context
Go 分布式
Go 内存缓存
Go 设计模式
Go CICD流水线
Go CGo扩展
Go GMP调度
Go 性能分析
Go 源代码/底层原理
Go 开源项目
Go 面试题
Python
切换子菜单
Python 基础教程
Python 库
代码规范
java
c++
css
js
vue
Android安卓
IOS苹果
PC端
网络编程
编辑器IDE
NOSQL
切换子菜单
mysql
redis
es
Kafka
系统/架构/运维/面试
切换子菜单
网关/路由
切换子菜单
nginx
系统架构
微服务
高并发/高性能/高可用
linux
切换子菜单
linux内核
linux/shell 命令
异地容灾
Rpc
限流/熔断/降级
全链路监控
日志
进程/线程/协程
灰度发布
设计模式
建站
采集/爬虫
http/https/url
安全
docker
代码规范
单点登录SSO
面试
切换子菜单
面试技巧
面试题目
避坑
算法/数据结构
切换子菜单
算法
切换子菜单
算法题目
排序
数据结构
通信
量化与投资
切换子菜单
量化分析
股票
高频交易
机器学习/区块链
切换子菜单
区块链
机器学习
展开菜单
当前页父级
语言
切换子菜单
当前页父级
Golang
切换子菜单
当前页父级
Go 基础教程
切换子菜单
Go 环境安装
Go 包package
Go 结构
Go 基础语法
Go 数据类型
Go 变量
Go 常量
Go 运算符
Go 条件语句
Go 循环语句
Go 函数Function
Go 变量作用域
Go 数组Array
Go 指针
Go 结构体
Go 切片Slice
Go 范围Range
Go 集合Map
Go 递归函数
Go 类型转换
Go 接口interface
Go 错误处理
Go Json
Go defer
当前页数:
Gopher 错误列表
Go 语言开发工具
Go 高级教程
切换子菜单
GRpc/Pb
Go 调试/单测/dlv
Go Http/Web服务
Go Udp/Tcp
Go Goroutine/Channel/Select/高并发
Go Context
Go 分布式
Go 内存缓存
Go 设计模式
Go CICD流水线
Go CGo扩展
Go GMP调度
Go 性能分析
Go 源代码/底层原理
Go 开源项目
Go 面试题
Python
切换子菜单
Python 基础教程
Python 库
代码规范
java
c++
css
js
vue
Android安卓
IOS苹果
PC端
网络编程
编辑器IDE
NOSQL
切换子菜单
mysql
redis
es
Kafka
系统/架构/运维/面试
切换子菜单
网关/路由
切换子菜单
nginx
系统架构
微服务
高并发/高性能/高可用
linux
切换子菜单
linux内核
linux/shell 命令
异地容灾
Rpc
限流/熔断/降级
全链路监控
日志
进程/线程/协程
灰度发布
设计模式
建站
采集/爬虫
http/https/url
安全
docker
代码规范
单点登录SSO
面试
切换子菜单
面试技巧
面试题目
避坑
算法/数据结构
切换子菜单
算法
切换子菜单
算法题目
排序
数据结构
通信
量化与投资
切换子菜单
量化分析
股票
高频交易
机器学习/区块链
切换子菜单
区块链
机器学习
Gopher 错误列表
2023年6月17日
新手Gopher常犯的50个错误
1.开头大括号不能放在单独的行上...
进一步了解
Gopher 错误列表
0
文章目录
×
1.开头大括号不能放在单独的行上
2.未使用的变量
3.未使用的导入
4.简短的变量声明只能在函数内部使用
5.使用短变量声明重新声明变量
6.不能使用短变量声明来设置字段值(比如结构体的字段)
7.可能出现的“变量阴影”
8.不能使用“nil”来初始化没有显式类型的变量 var
9.不能直接使用nil值的Slice和Map– 只是声明没有分配内存空间不能直接赋值是
10.map使用make分配内存时可指定capicity,但是不能对map使用cap函数
11.字符串不允许使用nil值
12.数组用于函数传参时是值复制
13.range关键字返回是键值对,而不是值
14.Slice和Array是一维的
15.从不存在key的map中取值时,返回的总是”0值”
16.字符串是不可变
17.字符串与[]byte之间的转换是复制(有内存损耗),可以用map[string] []byte建立字符串与[]byte之间映射,也可range来避免内存分配来提高性能
18.string的索引操作返回的是byte(或uint8),如想获取字符可使用for range,也可使用unicode/utf8包和golang.org/x/exp/utf8string包的At()方法。
19.字符串并不总是UTF8的文本
20.len(str)返回的是字符串的字节数,获取字符串的rune数是使用unicode/utf8.RuneCountInString()函数,但注意一些字符也可能是由多个rune组成,如é是两个rune组成。
21.在Slice、Array、Map的多行书写最后的逗号不可省略
22.log包中的log.Fatal和log.Panic不仅仅记录日志,还会中止程序。它不同于Logging库。
23.内置数据结构的操作并不同步,但可把Go提供了并发的特性使用起来:goroutines和channels。
24.使用for range迭代String,是以rune来迭代的。
25.使用for range迭代map时每次迭代的顺序可能不一样,因为map的迭代是随机的。
26.switch的case默认匹配规则不同于其它语言的是,匹配case条件后默认退出,除非使用fallthrough继续匹配;而其它语言是默认继续匹配,除非使用break退出匹配。
27.只有后置自增、后置自减,不存在前置自增、前置自减
28.位运算的非操作是^(跟异或位运算一样),有别于其它语言的~。
29.位运算(与、或、异或、取反)优先级高于四则运算(加、减、乘、除、取余),有别于C语言。
30.结构体在序列化时非导出字段(以小写字母开头的字段名)不会被encode,因此在decode时这些非导出字段的值为”0值”
31.程序不等所有goroutine结束就会退出。可通过channel实现主协程(main goroutine)等待所有goroutine完成。
32.对于无缓存区的channel,写入channel的goroutine会阻塞直到被读取,读取channel的goroutine会阻塞直到有数据写入。
33.向一个nil值(未用make分配空间)的channel发送或读取数据,会导致永远阻塞。
34.向一个nil值(未用make分配空间)的channel发送或读取数据,会导致永远阻塞。
35.方法接收者是类型(T),接收者只是原对象的值复制,在方法中修改接收者不会修改原始对象的值;如果方法接收者是指针类型(*T),是对原对象的引用,方法中对其修改当然是原对象修改。
36.关闭HTTP的Response.Body
Closing HTTP Connections
JSON Encoder Adds a Newline Character
JSON Package Escapes Special HTML Characters in Keys and String Values
Unmarshalling JSON Numbers into Interface Values
JSON String Values Will Not Be Ok with Hex or Other non-UTF8 Escape Sequences
Comparing Structs, Arrays, Slices, and Maps
Recovering From a Panic
Updating and Referencing Item Values in Slice, Array, and Map “range” Clauses
“Hidden” Data in Slices
Slice Data “Corruption”
“Stale” Slices
Type Declarations and Methods
Breaking Out of “for switch” and “for select” Code Blocks
Iteration Variables and Closures in “for” Statements
Deferred Function Call Argument Evaluation
Deferred Function Call Execution
Failed Type Assertions
Blocked Goroutines and Resource Leaks
Same Address for Different Zero-sized Variables
The First Use of iota Doesn’t Always Start with Zero
Using Pointer Receiver Methods On Value Instances
Updating Map Value Fields
“nil” Interfaces and “nil” Interfaces Values
Stack and Heap Variables
GOMAXPROCS, Concurrency, and Parallelism
Read and Write Operation Reordering
Preemptive Scheduling
Import C and Multiline Import Blocks
No blank lines Between Import C and Cgo Comments
Can’t Call C Functions with Variable Arguments
←
文章目录