Golang基础

切片的底层实现

map的底层实现

如何实现并发

1、go

2、waitgroup

3、context

反射完成Json

func MyJson(x interface{}) string {
	rTyp := reflect.TypeOf(x)
	rVal := reflect.ValueOf(x)

	num := rTyp.Elem().NumField()
	sb := strings.Builder{}
	sb.WriteString("{\n")
    
	for i := 0; i < num; i++ {

		f := rVal.Elem().Field(i)

		// tag
		fName := rTyp.Elem().Field(i).Tag.Get("conn")

        if fName == "" {
			continue
		}

		//kind
		k := f.Kind()

		//value
		str := fmt.Sprintf("  ")
		if k == reflect.Int {
			str = fmt.Sprintf("%s\"%s\": %d,\n", str, fName, f.Int())
			sb.WriteString(str)
		} else if k == reflect.String {
			str = fmt.Sprintf("%s\"%s\": \"%s\",\n", str, fName, f.String())
			sb.WriteString(str)
		} else if k == reflect.Struct {
			fmt.Println("将要递归还未完成")
		}
	}
	sb.WriteString("}\n")
	return sb.String()
}