Go 基础总结
原文链接: Go 基础总结
go lib
golang 位操作
10000010 [A]
00000010 [B]
11111101 (NOT B)
00000010 ^ 11111111 = 11111101 [B XOR 0xff]
10000010 ^ 00000010 = 10000000 [A XOR B]
10000010 & 00000010 = 00000010 [A AND B]
10000010 &^00000010 = 10000000 [A 'AND NOT' B]
10000010&(^00000010)= 10000000 [A AND (NOT B)]
创建struct的几种方式
new()
这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针。
func new(t Type) *Typestrut{}
直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的
//定义一个struct
type Student struct {
id int
name string
address string
age int
}
//使用new创建一个Student对象,结果为指针类型
var s *Student = new(Student)
var s1 = new(Student)
var s2 =&Student{}
//使用T{...}创建struct,结果为value类型
var s3 Student = Student{103, "Smith", "Heping Road", 20}
tests := []struct {
name string
args args
wantErr bool
}{
{
name: "提交订单",
args: args{
order: order,
},
wantErr: false,
},
}
Google编译时依赖注入框架 wire
依赖注入: 用于解耦依赖关系;DDD:业务决定技术实现 -> 稳定易拓展的系统应该让底层依赖高层,而不是相反(高层依赖底层),一个合理的系统,应该由高层按照自己的需求,指定底层应该满足的
控制反转: 是当系统的很多东西都能够模版化的时候,如Template Method这个设计模式也体现了控制反转,父类实现一些框架方法并定义控制流如何走,控制流会按照定义好的顺序调用一些abstract方法,然后留给子类去实现这些abstract方法。
go get github.com/google/wire/cmd/wire