package main import ( "container/list" "encoding/json" "fmt" "reflect" "strconv" "strings" ) type UserInfo struct { ID int64 `json:"id"` Name string `json:"name"` } func main() { fmt.Println("开始执行") // funcCopy() // funcCollection() // typeConversion() //funcArray() funcStruct() } /* 深浅拷贝: 深拷贝:拷贝数据的副本,对原始数据没有影响 值类型的数据,默认都是深拷贝 int, float,string,bool,array,struct 浅拷贝:拷贝的是数据的地址, 引用类型的数据,默认都是浅拷贝 slice,map,function */ func funcCopy() { //深拷贝 s2 := []int{1, 2, 3, 4} s3 := []int{7, 8, 9} copy(s2, s3) //浅拷贝 s4 := [4]int{1, 2, 3, 4} s5 := &s4 fmt.Println(s4, s5) } func StringToRuneArr(s string, arr []rune) { src := []rune(s) for i, v := range src { if i >= len(arr) { break } arr[i] = v } } //github.com/jianfengye/collection func funcCollection() { // 数组 转 list // list或者数组 转 string lists := list.New() arrays := [...]int{1, 2, 3} str1 := strings.Replace(strings.Trim(fmt.Sprint(arrays), "[]"), " ", ",", -1) str2 := strings.Replace(strings.Trim(fmt.Sprint(lists), "[]"), " ", ",", -1) fmt.Println(str1, str2) // string 转 list // list的对象 for循环 //切片 转 数组 a := [...]int{1, 2, 3} s := make([]int, 3) fmt.Println(copy(s, a[:2])) fmt.Println(s) } func funcArray() { // string 转 数组 str := "ABCDEF" var arr [6]rune StringToRuneArr(str, arr[:]) fmt.Printf("%v", arr) // 数组 转 string fmt.Println(string(arr[:])) } func typeConversion() { // string 转 byte s := "hello" var a []byte a = []byte(s) // string 转 rune var b []rune b = []rune(s) fmt.Println(a, b) // int 转 string var i int = 10 str1 := strconv.Itoa(i) str2 := fmt.Sprintf("%d", i) fmt.Println(str1, str2) // string 转 int i, err := strconv.Atoi(str2) if err != nil { fmt.Println("类型转换失败:", err) } //int64 转 string 第二个参数为基数 var i64 int64 = 10 str3 := strconv.FormatInt(i64, 10) // string 转换为 int64 //第二参数为基数,后面为位数,可以转换为int32,int64等 i64, error := strconv.ParseInt(str3, 10, 64) if error != nil { fmt.Println("类型转换失败:", error) } } func funcStruct() { str := `{"id": 1, "name": "xiong"}` var userInfo UserInfo // 将字符串反解析为结构体 json.Unmarshal([]byte(str), &userInfo) fmt.Println(userInfo) var d map[string]interface{} // 将字符串反解析为字典 json.Unmarshal([]byte(str), &d) fmt.Println(d) // 将结构体解析为字符串 b, e := json.Marshal(userInfo) fmt.Println(e) fmt.Println(string(b)) } // 反射 func funcReflect() { rv := []interface{}{"hi", 42, func() {}} for _, v := range rv { switch v := reflect.ValueOf(v); v.Kind() { case reflect.String: fmt.Println(v.String()) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: fmt.Println(v.Int()) default: fmt.Printf("unhandled kind %s", v.Kind()) } } } //判断字符串是否相等 func funcEqual() { fmt.Println("go" == "go") fmt.Println("GO" == "go") fmt.Println(strings.Compare("GO", "go")) fmt.Println(strings.Compare("go", "go")) fmt.Println(strings.EqualFold("GO", "go")) } // 字符串转布尔值 func ConvertStringToBool(str string) bool { return strings.ToLower(str) == "true" } //布尔值转字符串 func ConvertBoolToString(b bool) string { if b { return "true" } return "false" } /** 判断是否为指针 */ func IsStructPtr(t reflect.Type) bool { return t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct } //判断数组是否为空 func isArray() { var arr []string if arr == nil { fmt.Println("this is null") } if len(arr) > 0 { fmt.Println("len arr > 0") } else { fmt.Println("len this is null") } if arr[0] != "" { fmt.Println("arr 0 != null") } else { fmt.Println("[0] this is null") } }