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)
}
原文地址:https://www.cnblogs.com/chongyao/p/13938071.html