type
status
date
slug
summary
tags
category
icon
password
 
🔔
Prelude: 没必要挖大坑了 — 能用即可!
 

简而言之的 Go 语言


Go 是

  1. 一门很像 C 语言的现代高级编程语言
  1. 开源的、编译型、静态类型、内存安全的语言

Go 有

  1. 简单强大的包管理(可以直接从 GitHub 拉取依赖)
  1. 内置的并发原语
  1. 垃圾回收机制(GC)
  1. 超快的编译速度
  1. 简洁的语法
  1. 跨平台编译能力

Go 没有

  1. 类和继承
  1. 函数重载
  1. 隐式类型转换

我使用 Go 是为了

  1. 跟 Java 的繁冗语法 say goodbye
  1. 写网络服务和微服务
  1. 处理高并发场景

Go 特别适合

  1. Web 服务和 RESTful API
  1. 微服务架构
  1. 网络编程和分布式系统

Go 可能不适合

  1. GUI 桌面应用
  1. 系统内核开发
  1. 机器学习(Python的生态更强大)
 

安装 Go

  1. 使用 OS 提供的包管理器
      • Linux: apt, yum, snap
      • macOS: brew
      • Windows: choco, scoop
  1. 下载官方提供的压缩文件
      • 已经预编译,可以直接使用
      • 自行设置 path 和 link
  1. 使用 go version 进行确认

Hello world

类型

变量和函数

数组、切片和 map

流程控制

延迟执行和通道

指针

占位符

说明
举例
输出
%v (value)
相应值的默认格式。
Printf("%v", people)
{zhangsan}
%+v
打印结构体时,会添加字段名
Printf("%+v", people)
{Name:zhangsan}
%#v
相应值的Go语法表示
Printf("%#v", people)
main.Human{Name:"zhangsan"}
%T (type)
相应值的类型的 Go 语法表示
Printf("%T", people)
main.Human
%%
百分号
Printf("%%")
%
%t (true)
true 或 false
Printf("%t", true)
true
%b (binary)
二进制表示
Printf("%b", 5)
101
%c (char)
相应 Unicode 码点所表示的字符
Printf("%c", 0x4E2D)
%d (decimal)
十进制表示
Printf("%d", 0x12)
18
%o (octal)
八进制表示
Printf("%o", 10)
12
%q (quote)
单引号围绕的字符字面值,由 Go 语法安全地转义
Printf("%q", 0x4E2D)
'中'
%x
十六进制表示,字母形式为小写 a-f
Printf("%x", 13)
d
%X
十六进制表示,字母形式为大写 A-F
Printf("%X", 13)
D
%U (unicode)
Unicode 格式:U+1234,等同于 "U+%04X"
Printf("%U", 0x4E2D)
U+4E2D
%b
无小数部分的,指数为二的幂的科学计数法, 与 strconv.FormatFloat 的 'b' 转换格式一致。例如 -123456p-78
Printf("%b", 10.5)
5835037194198p-49
%e
科学计数法,例如 -1234.456e+78
Printf("%e", 10.2)
1.020000e+01
%E
科学计数法,例如 -1234.456E+78
Printf("%E", 10.2)
1.020000E+01
%f (float)
有小数点而无指数,例如 123.456
Printf("%f", 10.2)
10.200000
%g
根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的 0)输出
Printf("%g", 10.20)
10.2
%G
根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的 0)输出
Printf("%G", 10.20)
10.2
%s (string)
输出字符串表示(string 类型或 []byte)
Printf("%s", []byte("Go 语言"))
Go 语言
%q
双引号围绕的字符串,由 Go 语法安全地转义
Printf("%q", "Go 语言")
"Go 语言"
%x
十六进制,小写字母,每字节两个字符
Printf("%x", "golang")
676f6c616e67
%X
十六进制,大写字母,每字节两个字符
Printf("%X", "golang")
676F6C616E67
%p (pointer)
十六进制表示,前缀 0x
Printf("%p", &people)
0x4f57f0
+
总打印数值的正负号;对于%q(%+q)保证只输出 ASCII 编码的字符。
Printf("%+q", "中文")
"\u4e2d\u6587"
-
在右侧而非左侧填充空格(左对齐该区域)
#
备用格式:为八进制添加前导 0(%#o) 为十六进制添加前导 0x(%#x)或 0X(%#X),为 %p(%#p)去掉前导 0x; 如果可能的话,%q(%#q)会打印原始 (即反引号围绕的)字符串; 如果是可打印字符,%U(%#U)会写出该字符的 Unicode 编码形式(如字符 x 会被打印成 U+0078 'x')。
Printf("%#U", '中')
U+4E2D '中'
' '
(空格) 为数值中省略的正负号留出空白(% d); 以十六进制(% x, % X)打印字符串或切片时,在字节之间用空格隔开
0
填充前导的 0 而非空格;对于数字,这会将填充移到正负号之后

字符串格式化

结构体

接口

错误处理

并发

各种魔法🪄

...

注意:
  1. 可变参数必须是最后一个参数
  1. 函数内部,可变参数是切片类型
  1. 展开时类型必须匹配

初始化技巧

iota 枚举

类型别名与类型定义

make vs new

Go 语言的坑和注意事项

切片的底层数组共享

map 的随机性

字符串的字节与字符

接口的 nil 判断陷阱

循环变量的陷阱

方法调用的自动转换

结构体嵌入(匿名字段)

init 函数和包导入

简而言之的 Result 和 OptionMakefile 基础
Loading...