美文网首页
GO的第三天

GO的第三天

作者: 秃头小公主 | 来源:发表于2020-11-09 15:32 被阅读0次

今天就是继续学习https://gobyexample.com/,我发现网上下载go套件都是linux命令,才疏学浅的我真的是没明白为啥~(弄明白了,那个是在goland命令行打的命令,可以做一些事情)

这一篇就是简单的笔记,大致都能看懂没什么问题,此外今天老大还说了一下用到的插件啊,包啊,框架啊啥的。

数据库:mysql、redis(没接触过)

go套件:gorilla/mux(问了问好像是类似java控制层的东西,因为没看也没深问,后续明白了会再写写)

gorm(这个类似于mybatis相对于我来说好理解一点)

jwt-go(http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html这个网站好像挺好的,还没看,后续肯定会看完如果有总结会再说)

gorilla/websocket(https://www.jianshu.com/p/b5e289be5fa1使用这块还没看,后续也会看)

shopspring/decimal(没找到相关资料,如果我后期明白了我再补吧)

排序:sort包实现了内建及用户自定义数据类型的排序功能(针对内置数据类型),直接改变切片而不是返回新的切片。需要import stort

    sort.Strings(strs)//排序,从小->大

    s := sort.IntsAreSorted(ints)//检查切片是否有序,返回t/f

    使用函数自定义排序:自然顺序以外的排序,例如按字符串长度进行排序

                      type byLength []string//创建了一个byLength类型(内建类型[]string的别名),之后main中的切片会被强转成这个类型的切片

                      大概就是说有三个函数Len、Swap、 Less前面两个都差不多,重写Less (Less控制实际的自定义排序逻辑)

                      这样我们再在main下面是用sort就可以实现重写方法的排序了(那为啥不写一个方法调用呢,这样多麻烦???)

Panic:意想不到的错误,说白了就是不想搭理的错误(与java不同的是,用返回来标错误,不捕捉异常)

    panic("a problem")//就这么写!非0状态退出程序

Defer:清理工作有点像finally

      f := createFile("/tmp/defer.txt")//创建一个文件

      defer closeFile(f)//创建之后defer会在main结束时执行close(关闭文件通常会进行错误检查)

组合函数:泛型(go不支持)≈组合函数

        func Include(vs []string, t string) bool {

            return Index(vs, t) >= 0

        } //t在切片vs中返回t,否则返回f

        func Any(vs []string, f func(string) bool) bool {

            for _, v := range vs {

                  if f(v) {

                      return true

                  }

            }

            return false

        }//切片vs中满足条件f返回t,否则返回f

        fmt.Println(Any(strs, func(v string) bool {

            return strings.HasPrefix(v, "p")

        }))//组合函数这不就来了

字符串函数:老朋友了,和java中应该差不多

          fmt.Println("Contains:  ", s.Contains("test", "es"))//test包含es:t

          fmt.Println("Count:    ", s.Count("test", "t"))//test包含t的个数:2

          fmt.Println("HasPrefix: ", s.HasPrefix("test", "te"))//te是不是teset的前缀:t

          fmt.Println("HasSuffix: ", s.HasSuffix("test", "st"))//st是不是test的后缀:t

          fmt.Println("Index:    ", s.Index("test", "e"))//e在teset的位置:1(从0开始,不存在返回-1)

          fmt.Println("Join:      ", s.Join([]string{"a", "b"}, "-"))//用-链接a和b:a-b

          fmt.Println("Repeat:    ", s.Repeat("a", 5))//a重复5次:aaaaa

          fmt.Println("Replace:  ", s.Replace("foo", "o", "0", -1))//替换foo中所有存在的o为0:f00

          fmt.Println("Replace:  ", s.Replace("foo", "o", "0", 1))//替换foo中存在的o为0一次:f0o

          fmt.Println("Split:    ", s.Split("a-b-c-d-e", "-"))//指定的-字符分割字符串:a b c d e

          fmt.Println("ToLower:  ", s.ToLower("TEST"))//换成小写:test

          fmt.Println("ToUpper:  ", s.ToUpper("test"))//换成大写:TEST

          fmt.Println("Len: ", len("hello"))//字符串长度:5

          fmt.Println("to []string:",s.Fields("hello"))//字符串变成数组

          fmt.Println(s.TrimSpace("  hell o  "))//去除首位空格:hello o

字符串格式化:    p := point{1, 2}//假装有一个结构体

                fmt.Printf("%v\n", p)//正常输出:{1,2}

                fmt.Printf("%+v\n", p)//输出包括结构体字段:{x:1,y:2}

                fmt.Printf("%#v\n", p)//源码片段:main.point{x:1, y:2}

                fmt.Printf("%T\n", p)//需要打印值的类型:main.point

                fmt.Printf("%t\n", true)//格式化布尔:true

                fmt.Printf("%d\n", 123)//十进制:123

                fmt.Printf("%b\n", 14)//二进制:1110

                fmt.Printf("%c\n", 33)//对应的字符:!

                fmt.Printf("%x\n", 456)//十六进制:1c8

                fmt.Printf("%f\n", 78.9)//浮点十进制:78.900000

                fmt.Printf("%e\n", 123400000.0)//科学计数法:1.234000e+08

                fmt.Printf("%E\n", 123400000.0)//科学计数法:1.234000E+08

                fmt.Printf("%s\n", "\"string\"")//字符串:"string"

                fmt.Printf("%q\n", "\"string\"")//带有双引号:"\"string\""

                fmt.Printf("%x\n", "hex this")//base-16编码的字符串:6865782074686973

                fmt.Printf("%p\n", &p)//指针:0x42135100

                fmt.Printf("|%6d|%6d|\n", 12, 345)//整数指定宽度:|    12|  345|

                fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)//浮点数指定宽度(%宽度.精度):|  1.20|  3.45|

                fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)//-表示左对齐:|1.20  |3.45  |

                fmt.Printf("|%6s|%6s|\n", "foo", "b")//基本宽度右对齐:|  foo|    b|

                fmt.Printf("|%-6s|%-6s|\n", "foo", "b")//左对齐字符:|foo  |b    |

正则表达式:https://gobyexample-cn.github.io/regular-expressions

JSON:数据交互格式

      type response1 struct { Page  int Fruits []string }//来个结构体,可导出被编码/解码(大写字母开头可导出)

      type response2 struct {  Page  int      `json:"page"` Fruits []string `json:"fruits"`}//打上`json:"name"`这样的标签,变成jason key就为name

      bolB, _ := json.Marshal(true)//这种形式进行个种转换,int、flt、str、slc(多个)甚至map、切片也可

XML:通过encoding.xml包  (import "encoding/xml")

    https://gobyexample-cn.github.io/xml

Time(时间)和Duration(时间段): (import "time")

                            now := time.Now()//获取当前时间

                            then := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)//提供信息创建一个时间,时间和时区联系

                            then.Year/Month/Day/...()//获取时间的组成部分

                            then.Weekday()//获取星期几

                            then.Before(now)//比较then是否为now之前(精确到s)

                            then.After(now)//比较then是否为now之后(精确到s)

                            then.Equal(now)//比较then和now是否相同(精确到s)

                            diff := now.Sub(then)//now和then的时间间隔

                            fmt.Println(diff.Hours/Minutes/Seconds/...())//可以以不同的单位输出时间间隔

                            then.Add(diff)//增加时间间隔,若(-diff)则为向前推移时间间隔

时间戳:1970年1月1日开始所经过的秒/毫秒/微秒数,不考虑闰秒

      secs := now.Unix()//1970年1月1日开始所经过的秒

      nanos := now.UnixNano()//1970年1月1日开始所经过的纳秒

      millis := nanos / 1000000//得到毫秒,UnixMillis不存在需要手动转换

时间的格式化和解析:https://gobyexample-cn.github.io/time-formatting-parsing

随机数: math/rand 包提供随机数生成器

      rand.Intn/Float64(100)//随机的0-100整数/浮点数

      默认情况下,种子确定产生最数列也相同。只有给定不同的种子数列才不同。如果随机数加密,则使用crypto/rand

数字解析: (import"strcnv")

        f, _ := strconv.ParseFloat("1.234", 64)//64解析数的位数

        i, _ := strconv.ParseInt("123", 0, 64)//0:自动推断字符串数字的进制  64:以64位储存(ParseInt/ParseUint可以自动识别字符为16进制)

        k, _ := strconv.Atoi("135")// 10 进制整型数转换函数,输入"wat"(输入错误)会返回一个错误排序:sort包实现了内建及用户自定义数据类型的排序功能(针对内置数据类型),直接改变切片而不是返回新的切片。需要import stort

    sort.Strings(strs)//排序,从小->大

    s := sort.IntsAreSorted(ints)//检查切片是否有序,返回t/f

    使用函数自定义排序:自然顺序以外的排序,例如按字符串长度进行排序

                      type byLength []string//创建了一个byLength类型(内建类型[]string的别名),之后main中的切片会被强转成这个类型的切片

                      大概就是说有三个函数Len、Swap、 Less前面两个都差不多,重写Less (Less控制实际的自定义排序逻辑)

                      这样我们再在main下面是用sort就可以实现重写方法的排序了(那为啥不写一个方法调用呢,这样多麻烦???)

Panic:意想不到的错误,说白了就是不想搭理的错误(与java不同的是,用返回来标错误,不捕捉异常)

    panic("a problem")//就这么写!非0状态退出程序

Defer:清理工作有点像finally

      f := createFile("/tmp/defer.txt")//创建一个文件

      defer closeFile(f)//创建之后defer会在main结束时执行close(关闭文件通常会进行错误检查)

组合函数:泛型(go不支持)≈组合函数

        func Include(vs []string, t string) bool {

            return Index(vs, t) >= 0

        } //t在切片vs中返回t,否则返回f

        func Any(vs []string, f func(string) bool) bool {

            for _, v := range vs {

                  if f(v) {

                      return true

                  }

            }

            return false

        }//切片vs中满足条件f返回t,否则返回f

        fmt.Println(Any(strs, func(v string) bool {

            return strings.HasPrefix(v, "p")

        }))//组合函数这不就来了

字符串函数:老朋友了,和java中应该差不多

          fmt.Println("Contains:  ", s.Contains("test", "es"))//test包含es:t

          fmt.Println("Count:    ", s.Count("test", "t"))//test包含t的个数:2

          fmt.Println("HasPrefix: ", s.HasPrefix("test", "te"))//te是不是teset的前缀:t

          fmt.Println("HasSuffix: ", s.HasSuffix("test", "st"))//st是不是test的后缀:t

          fmt.Println("Index:    ", s.Index("test", "e"))//e在teset的位置:1(从0开始,不存在返回-1)

          fmt.Println("Join:      ", s.Join([]string{"a", "b"}, "-"))//用-链接a和b:a-b

          fmt.Println("Repeat:    ", s.Repeat("a", 5))//a重复5次:aaaaa

          fmt.Println("Replace:  ", s.Replace("foo", "o", "0", -1))//替换foo中所有存在的o为0:f00

          fmt.Println("Replace:  ", s.Replace("foo", "o", "0", 1))//替换foo中存在的o为0一次:f0o

          fmt.Println("Split:    ", s.Split("a-b-c-d-e", "-"))//指定的-字符分割字符串:a b c d e

          fmt.Println("ToLower:  ", s.ToLower("TEST"))//换成小写:test

          fmt.Println("ToUpper:  ", s.ToUpper("test"))//换成大写:TEST

          fmt.Println("Len: ", len("hello"))//字符串长度:5

          fmt.Println("to []string:",s.Fields("hello"))//字符串变成数组

          fmt.Println(s.TrimSpace("  hell o  "))//去除首位空格:hello o

字符串格式化:    p := point{1, 2}//假装有一个结构体

                fmt.Printf("%v\n", p)//正常输出:{1,2}

                fmt.Printf("%+v\n", p)//输出包括结构体字段:{x:1,y:2}

                fmt.Printf("%#v\n", p)//源码片段:main.point{x:1, y:2}

                fmt.Printf("%T\n", p)//需要打印值的类型:main.point

                fmt.Printf("%t\n", true)//格式化布尔:true

                fmt.Printf("%d\n", 123)//十进制:123

                fmt.Printf("%b\n", 14)//二进制:1110

                fmt.Printf("%c\n", 33)//对应的字符:!

                fmt.Printf("%x\n", 456)//十六进制:1c8

                fmt.Printf("%f\n", 78.9)//浮点十进制:78.900000

                fmt.Printf("%e\n", 123400000.0)//科学计数法:1.234000e+08

                fmt.Printf("%E\n", 123400000.0)//科学计数法:1.234000E+08

                fmt.Printf("%s\n", "\"string\"")//字符串:"string"

                fmt.Printf("%q\n", "\"string\"")//带有双引号:"\"string\""

                fmt.Printf("%x\n", "hex this")//base-16编码的字符串:6865782074686973

                fmt.Printf("%p\n", &p)//指针:0x42135100

                fmt.Printf("|%6d|%6d|\n", 12, 345)//整数指定宽度:|    12|  345|

                fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)//浮点数指定宽度(%宽度.精度):|  1.20|  3.45|

                fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)//-表示左对齐:|1.20  |3.45  |

                fmt.Printf("|%6s|%6s|\n", "foo", "b")//基本宽度右对齐:|  foo|    b|

                fmt.Printf("|%-6s|%-6s|\n", "foo", "b")//左对齐字符:|foo  |b    |

正则表达式:https://gobyexample-cn.github.io/regular-expressions

JSON:数据交互格式

      type response1 struct { Page  int Fruits []string }//来个结构体,可导出被编码/解码(大写字母开头可导出)

      type response2 struct {  Page  int      `json:"page"` Fruits []string `json:"fruits"`}//打上`json:"name"`这样的标签,变成jason key就为name

      bolB, _ := json.Marshal(true)//这种形式进行个种转换,int、flt、str、slc(多个)甚至map、切片也可

XML:通过encoding.xml包  (import "encoding/xml")

    https://gobyexample-cn.github.io/xml

Time(时间)和Duration(时间段): (import "time")

                            now := time.Now()//获取当前时间

                            then := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)//提供信息创建一个时间,时间和时区联系

                            then.Year/Month/Day/...()//获取时间的组成部分

                            then.Weekday()//获取星期几

                            then.Before(now)//比较then是否为now之前(精确到s)

                            then.After(now)//比较then是否为now之后(精确到s)

                            then.Equal(now)//比较then和now是否相同(精确到s)

                            diff := now.Sub(then)//now和then的时间间隔

                            fmt.Println(diff.Hours/Minutes/Seconds/...())//可以以不同的单位输出时间间隔

                            then.Add(diff)//增加时间间隔,若(-diff)则为向前推移时间间隔

时间戳:1970年1月1日开始所经过的秒/毫秒/微秒数,不考虑闰秒

      secs := now.Unix()//1970年1月1日开始所经过的秒

      nanos := now.UnixNano()//1970年1月1日开始所经过的纳秒

      millis := nanos / 1000000//得到毫秒,UnixMillis不存在需要手动转换

时间的格式化和解析:https://gobyexample-cn.github.io/time-formatting-parsing

随机数: math/rand 包提供随机数生成器

      rand.Intn/Float64(100)//随机的0-100整数/浮点数

      默认情况下,种子确定产生最数列也相同。只有给定不同的种子数列才不同。如果随机数加密,则使用crypto/rand

数字解析: (import"strcnv")

        f, _ := strconv.ParseFloat("1.234", 64)//64解析数的位数

        i, _ := strconv.ParseInt("123", 0, 64)//0:自动推断字符串数字的进制  64:以64位储存(ParseInt/ParseUint可以自动识别字符为16进制)

        k, _ := strconv.Atoi("135")// 10 进制整型数转换函数,输入"wat"(输入错误)会返回一个错误

相关文章

网友评论

      本文标题:GO的第三天

      本文链接:https://www.haomeiwen.com/subject/emtxbktx.html