The master has failed more times than the beginner has tried.
- 多核硬件架构
- 超大规模分布式计算集群
- web 模式下的新开发规模和迭代速度
- Rob Pike
- Ken Thompson
- Robert Griesemer
- 简单(关键字很少)
- 高效(gc,指针,原生支持并发)
- 云计算语言
- 区块链语言
- package 必须为 main 包
- func 必须为 main 函数
- main 函数无参数无返回值
- 通过
os.Exit
返回状态 - 通过
os.Args
获取命令行参数
- go 语言不允许隐式类型转换
- 自定义类型别名也不能隐式转换
- 字符串是数值类型
- 字符串默认值为空字符,不是nil
简单可以理解为可变长度的数组
- len 表示切片内可访问的元素长度
- cap 表示切片的可拓展容量,
cap = cap \* 2
- slice只能与nil比较
- 键值对的数据结构
- 初始化 len 没有意义,因为
key-value
结构并不能是默认值 Map
不能使用cap()
函数求容量 Map 声明:
Map 声明:
// 1.var 关键字
var m = map[string]int{}
// 2.简写
m1 := map[string]int{}
// 3.声明并初始化
m2 := map[string]int{"one":1,"two":2}
// 4.make关键字 适合已知容量
m3 := make(map[string]int,10,/*cap*/)
Map 实现 Set:
func TestMapForSet(t *testing.T) {
mySet := map[int]string{1: "true", 2: "true", 0: "false"}
n := 5
if v, ok := mySet[n]; ok {
t.Logf("%s is existing", v)
} else {
// 添加k-v
t.Log("k-v no existing...")
t.Logf("append myset[%d]=%s...", n, "hello")
mySet[n] = "hello"
t.Log("append finish...")
}
t.Log(mySet)
}
- string 是数值类型,不是引用或指针类型
- string 默认值为空字符 不是 nil
- string 是只读的 byte slice, len 函数可以获取它所包含的 byte 数
- string 的 byte 数组可以存放任意数据, 包括但不限于 英文,汉字,特殊字符,二进制数据...
字符串底层编码逻辑: