golang基础语法常用包-1

58 阅读3分钟

map:

m:=make(map[string]int)
m["one"]=1
v,ok:=m["one"] //v=1,ok=true
delete(m,"one")//删除元素for k,v range m{
    ...
}//无序遍历

结构体:

func checkPassword(u user, password string) bool {
    return u.password == password
}
​
func checkPassword2(u *user, password string) bool {
    return u.password == password
} //使用结构体指针可以避免结构体拷贝

字符串:

package main
​
import (
    "fmt"
    "strings"
)
​
func main() {
    a := "hello"
    fmt.Println(strings.Contains(a, "ll"))                // true
    fmt.Println(strings.Count(a, "l"))                    // 2
    fmt.Println(strings.HasPrefix(a, "he"))               // 判断前缀,true
    fmt.Println(strings.HasSuffix(a, "llo"))              // 判断后缀,true 
    fmt.Println(strings.Index(a, "ll"))                   // 2
    fmt.Println(strings.Join([]string{"he", "llo","world"}, "-")) // he-llo-world
    fmt.Println(strings.Repeat(a, 2))                     // 复制字符串count次,hellohello
    fmt.Println(strings.Replace(a, "e", "E", -1))         // 将a中的"e"替换成"E",数字代表替换次数,为负数全部替换,hEllo
    fmt.Println(strings.Split("a-b-c", "-"))              // [a b c]
    fmt.Println(strings.ToLower(a))                       // hello
    fmt.Println(strings.ToUpper(a))                       // HELLO
    fmt.Println(len(a))                                   // 5
    b := "你好"
    fmt.Println(len(b)) // 6
}
​

格式化:

可以用%v打印任意类型变量

    fmt.Printf("s=%v\n", s)  // s=hello
    fmt.Printf("n=%v\n", n)  // n=123
    fmt.Printf("p=%v\n", p)  // p={1 2}

序列化:

type userInfo struct {
    Name  string
    Age   int `json:"Testage"` //json标签表示序列化后字段名称
    Hobby []string
}
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
    buf, err := json.Marshal(a) //返回ASCII码
    if err != nil {
        panic(err)
    }
    fmt.Println(buf)         // [123 34 78 97...]
    fmt.Println(string(buf)) // {"Name":"wang","Testage":18,"Hobby":["Golang","TypeScript"]}

时间处理:

    //time.Time
    now := time.Now() //获取当前时间
    fmt.Println(now) // 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933
    t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC) //使用time.Date构造一个time.Time
    t2 := time.Date(2022, 3, 27, 2, 30, 36, 0, time.UTC)
    fmt.Println(t)                                                  // 2022-03-27 01:25:36 +0000 UTC
    fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) // 2022 March 27 1 25
    fmt.Println(t.Format("2006-01-02 15:04:05"))   //格式化时间                 // 2022-03-27 01:25:36
    diff := t2.Sub(t)  //计算时间差
    fmt.Println(diff)                           // 1h5m0s
    fmt.Println(diff.Minutes(), diff.Seconds()) // 65 3900
    t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36") //time.Parse 函数用于将字符串解析为 time.Time 类型,layout: 解析的时间格式。Go 使用特定的时间表示法(例如,"2006-01-02 15:04:05")来定义布局,必须使用这个特定的日期和时间来表示格式。value: 要解析的时间字符串。
    if err != nil {
        panic(err)
    }
    fmt.Println(t3 == t)    // true
    fmt.Println(now.Unix()) // 1648738080,返回时间戳

数字、字符串转换:

    f, _ := strconv.ParseFloat("1.234", 64) //参数:转换字符串,转换后位数,通常为32或64
    fmt.Println(f) // 1.234
​
    n, _ := strconv.ParseInt("111", 10, 64) //参数:转换字符串,进制(2,8,10或16进制,0表示自动判断),转换后位数
    fmt.Println(n) // 111
​
    n, _ = strconv.ParseInt("0x1000", 0, 64)
    fmt.Println(n) // 4096
​
    n2, _ := strconv.Atoi("123")  //字符串转数字
    fmt.Println(n2) // 123
    
    FormatXXX:字符串转XXX,如float、intfunc FormatFloat(f float64, fmt byte, prec int, bitSize int) string //浮点数转字符串,int类似
                                                                        //fmt指定格式类型指定格式的类型,可以是以下                                                                            之一:
                                                                            'f': 以十进制形式表示浮点数。
                                                                            'e': 以科学计数法表示浮点数。
                                                                            'g': 根据值的大小自动选择格式(十进制                                                                            或科学计数法)。
                                                                        //prec表示保留小数点后几位,-1表示自动选择