• go 学习笔记day2


    package main
    
    import (
        "fmt"
        "strconv"
        "strings"
    )
    
    //函数相关
    // type calculation func(int, int) int
    
    // func add(a, b int) int {
    //     return a + b
    // }
    
    // func operation(a, b int, op calculation) int {
    //     return op(a, b)
    // }
    // func main() {
    //     scoreMap := make(map[string]int, 8)
    //     scoreMap["cyao"] = 100
    //     scoreMap["test"] = 90
    //     fmt.Print(operation(scoreMap["cyao"], scoreMap["test"], add))
    //     // fmt.Printf("长度%v  cap: %v ", len(scoreMap), cap(scoreMap))
    //     fmt.Printf("类型为: %T 
    ", scoreMap)
    // }
    
    //函数闭包相关 闭包=函数+引用环境
    // func adder() func(int) int {
    //     var x int
    //     return func(y int) int {
    //         x += y
    //         return x
    //     }
    // }
    // func main() {
    //     var f = adder()
    //     fmt.Println(f(10)) //10
    //     fmt.Println(f(20)) //30
    //     fmt.Println(f(30)) //60
    
    //     f1 := adder()
    //     fmt.Println(f1(40)) //40
    //     fmt.Println(f1(50)) //90
    // }
    
    // func makeSuffixFunc(suffix string) func(string) string {
    //     return func(name string) string {
    //         if !strings.HasSuffix(name, suffix) {
    //             return name + suffix
    //         }
    //         return name
    //     }
    // }
    
    // func main() {
    //     jpgFunc := makeSuffixFunc(".jpg")
    //     txtFunc := makeSuffixFunc(".txt")
    //     fmt.Println(jpgFunc("test")) //test.jpg
    //     fmt.Println(jpgFunc("test")) //test.jpg
    //     fmt.Println(txtFunc("test")) //test.txt
    // }
    
    // func calc(base int) (func(int) int, func(int) int) {
    //     add := func(i int) int {
    //         base += i
    //         return base
    //     }
    
    //     sub := func(i int) int {
    //         base -= i
    //         return base
    //     }
    //     return add, sub
    // }
    
    // func main() {
    //     f1, f2 := calc(10)
    //     fmt.Println(f1(1), f2(2)) //11 9
    //     fmt.Println(f1(3), f2(4)) //12 8
    //     fmt.Println(f1(5), f2(6)) //13 7
    // }
    
    //defer 语句  最后被defer的语句,最先被执行 , 在return 之前会被执行 defer 函数  匿名函数后面跟的() 是匿名函数定义的入参
    // func f1() int {
    //     x := 1
    //     defer func() {
    //         x++
    //     }()
    //     return x
    // }
    
    // func f2() (x int) {
    //     defer func() {
    //         x++
    //     }()
    //     return 3
    // }
    
    // func f3() (y int) {
    //     defer func() {
    //         y++
    //     }()
    //     return y
    // }
    // func f4() (x int) {
    //     defer func(x int) {
    //         x++
    //     }(x)
    //     return 9
    // }
    // func main() {
    //     fmt.Println(f1())
    //     fmt.Println(f2())
    //     fmt.Println(f3()) //
    //     fmt.Println(f4()) //6
    // }
    
    // func calc(index string, a, b int) int {
    //     ret := a + b
    //     fmt.Println(index, a, b, ret)
    //     return ret
    // }
    
    // func main() {
    //     x := 1
    //     y := 2
    //     defer calc("AA", x, calc("A", x, y))
    //     x = 10
    //     defer calc("BB", x, calc("B", x, y))
    //     y = 20
    // }
    
    //异常捕获处理
    /*
    1.recover()必须搭配defer使用。
    2.defer一定要在可能引发panic的语句之前定义。
    */
    // func funcA() {
    //     fmt.Println("func A")
    // }
    
    // func funcB() {
    //     defer func() {
    //         err := recover() //finally
    //         //如果程序出出现了panic错误,可以通过recover恢复过来
    //         if err != nil { //catch
    //             fmt.Println("recover in B")
    //         }
    //     }()
    //     panic("panic in B") //throw ex
    // }
    
    // func funcC() {
    //     fmt.Println("func C")
    // }
    // func main() {
    //     funcA()
    //     funcB()
    //     funcC()
    // }
    
    /*你有50枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,Adriano,Aaron,Elizabeth。
    分配规则如下:
    a. 名字中每包含1个'e'或'E'分1枚金币
    b. 名字中每包含1个'i'或'I'分2枚金币
    c. 名字中每包含1个'o'或'O'分3枚金币
    d: 名字中每包含1个'u'或'U'分4枚金币
    写一个程序,计算每个用户分到多少金币,以及最后剩余多少金币?*/
    //程序结构如下,请实现 ‘dispatchCoin’ 函数
    // var (
    //     coins = 50
    //     users = []string{
    //         "Matthew", "Sarah", "Augustus", "Heidi", "Emilie", "Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
    //     }
    //     distribution = make(map[string]int, len(users))
    // )
    
    // //根据用户名分配 不考虑不够分的情况
    // func allot(name string) int {
    //     sumCoins := 0
    //     for _, cha := range name {
    //         switch cha {
    //         case 'e', 'E':
    //             sumCoins++
    //         case 'i', 'I':
    //             sumCoins += 2
    //         case 'o', 'O':
    //             sumCoins += 3
    //         case 'u', 'U':
    //             sumCoins += 4
    //         }
    //     }
    //     return sumCoins
    // }
    
    // //循环遍历所有用户
    // func dispatchCoin(users []string) int {
    //     for i := 0; i < len(users); i++ {
    //         allotnum := allot(users[i]) //当用户前分配的数量
    //         coins = coins - allotnum
    //         distribution[users[i]] = allotnum
    //     }
    //     return coins
    // }
    // func main() {
    //     left := dispatchCoin(users)
    //     fmt.Println(distribution)
    //     fmt.Println("剩下:", left)
    // }
    
    //time
    // func main() {
    //     now := time.Now()
    //     fmt.Println(now.Format("2006/01/02 15:04:05"))
    //     eT := time.Since(now) // 从开始到当前所消耗的时间
    //     fmt.Println(eT.Seconds() * 1000)
    // }
    
    // strconv  类型转换包 strings 包
    func main() {
        num := "1000"
        s, err := strconv.Atoi(num)
        if err != nil {
            fmt.Println("can't convert to int")
        } else {
            fmt.Printf("type:%T value:%#v
    ", s, s) //type:int value:1000
        }
        s2 := strconv.Itoa(s)
        fmt.Printf("type:%T value:%#v
    ", s2, s2)
    
        //如果有空格的话会转换成false
        str := "true  "
        b, _ := strconv.ParseBool(str)
        fmt.Printf("type:%T value:%#v
    ", b, b)
        str = strings.Replace(str, " ", "", -1)
        b, _ = strconv.ParseBool(str)
        fmt.Printf("type:%T value:%#v
    ", b, b)
    }
  • 相关阅读:
    国防科学技术大学第忘记叫啥杯了
    2015 湘潭大学程序设计比赛(Internet)--D题-最小的数 2015-05-13 20:55 51人阅读 评论(0) 收藏
    ACM的探索之Everything is Generated In Equal Probability! 后序补充丫!
    线段树进阶之模板观见
    《地狱是上帝不在的地方》
    《E=MC2或一个思想的故事》
    画图软件gliffy
    线段树进阶之递归实现
    party lamps(dfs优化+规律枚举)
    滑雪(dfs+dp)
  • 原文地址:https://www.cnblogs.com/chongyao/p/13938071.html
Copyright © 2020-2023  润新知