• Let's GO(二)


    人生苦短,Let's GO

    今天我学了什么?

    1. Map

    map:映射,使用散列表(hash)实现
    map[keyType]valueType

    var a map[string]int
    var a map[string]int
    //defaule nil
    fmt.Println(a==nil)
    //init make(map,cap) 
    a = make(map[string]int,10)
    a["一"] = 1
    a["二"] = 2
    a["四"] = 4
    a["五"] = 5
    fmt.Println(a)
    fmt.Printf("a:%#v
    ",a)
    b := map[int]bool {
    		1 : true,
    		2 : false,
    	}
    fmt.Printf("b:%#v
    ",b)
    
    // 探测是否存在map[key]
    f,ok := a["三"]
    fmt.Println(f,ok)
    //ok == true
    

    map默认是无序的,怎么让它按一定的顺序操作呢

    //用slice取key
    keys := make([]string,0,100)
    for k := range c  {
    	keys = append(keys,k)
    }
    //key排序
    sort.Strings(keys)
    for _,key := range keys {
    	fmt.Println(key,c[key])
    }
    

    有点绕口的两个东西,想起了c++的指针常量和常量指针..

    //mapslice
    //init slice,then init map
    var mapSlice = make([]map[string]int,8,8)
    mapSlice[0] = make(map[string]int,10)
    mapSlice[0]["hello"] = 1
    fmt.Println(mapSlice)
    //slicemap
    //init map, then init slice
    var sliceMap = make(map[string][]int,10)
    sliceMap["hello"] = make([]int,0,10)
    sliceMap["hello"] = append(sliceMap["hello"],1,2,3,4,5)
    fmt.Println(sliceMap)
    

    map 东西还挺多的哈

    2.函数

    func name() (return) { //左大括号一定要写在同一行,不然无效
    }

    func intSum(x int, y int) int {
    	return x+y
    }
    
    //可变参数(...)
    func intsum2(a ...int) int  {
    	ret := 0
    	for _,i := range a {
    		ret += i
    	}
    	return ret
    }
    
    //go 的函数可以return 多个值
    func calc(a,b int) (sum ,sub int)  {
    	return a+b,a-b
    }
    
    //函数也可做参数
    func compute(x,y int,op func(int,int) int) int {
    	return op(x,y)
    }
    
    //函数alias?
    abc := calc
    x,y  := abc(1,2)
    
    //匿名函数:直接写在调用的地方
    func() {
    	fmt.Println("Anonymous Function")
    	}() //记得加()表示立即调用
    

    3.闭包

    引用大佬的话:闭包 = 函数 + 环境(外层变量的引用)

    //闭包 = 函数 + 环境
    //func return func
    func a() func() {
            str := "闭包"
    	return func(){
    		fmt.Println("this is a ",str)
    	}
    }
    
    func main() {
    r := a()
    r()   
    }
    
    //再来个复杂点的
    func makeSuffixFunc(suffix string) func(string) string {
    	return func(name string) string {
    		if !strings.HasSuffix(name,suffix) {
    			return name + suffix
    		}
    		return name
    	}
    }
    

    总结

    Talk is Cheap , Show me the Code

    学到的感到的都在代码和注释里了。
    今天,就先写到这里吧,结构体的内容还没学完,明天再一次性发。
    那么,人生苦短,朋友,Let's GO!

  • 相关阅读:
    fastjson的@JSONField注解
    Java 日期比较大小
    linux 查看文件显示行号
    Java double 加、减、乘、除
    Java 身份证判断性别获取年龄
    linux 查看端口被占用
    Unable to complete the scan for annotations for web application [/wrs] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies.
    nginx 返回数据不完整
    linux redis 启动 overcommit_memory
    IntelliJ IDEA 常用设置
  • 原文地址:https://www.cnblogs.com/syisyuan/p/12879455.html
Copyright © 2020-2023  润新知