leonardchaocc / Application

0 stars 0 forks source link

Go 包 函数 #24

Open leonardchaocc opened 4 years ago

leonardchaocc commented 4 years ago

包的引入:在其他地方调用一些函数。或者共同开发一个Go项目时 包的本质:创建不同的文件夹,用来存放程序文件。 包的基本概念:Go的每一个文件都是属于一个包的,即Go以包的形式管理文件和项目目录结构 包的三大作用:区分同名标识符;更好管理项目;控制函数和变量的访问范围。 包的使用细节: 1、在给每个文件打包时,该包对应一个文件夹,通常与所在文件夹名保持一致,小写字母 2、引入方式:import “包名”或import{多个包名} 3、package指令在文件第一行,然后是import指令 4、import时,路径始于gopath环境变量的src下, 5、为让其他包的文件可以访问本包的函数,本包函数首字母需要大写,类似于其他语言public关键字的作用,从而使得跨包访问得以实现 6、在访问其他包的函数或变量时,语法是包名.函数名/变量名 7、若包名较长,可以给包取别名:别名 “包名”,但取了别名后,原来包名在当前包中就不能使用了 8、在同一包下不能有同名函数和同名全局变量,否则将报重复定义的错。 9、若需要将文件编译成可执行文件,则包名须为main,若是一个库文件,则包名可自定义。

leonardchaocc commented 4 years ago

函数调用机制: 调用一个函数时,会为该函数分配一个新的空间。每个函数对应的栈中,数据空间是互相独立的,不会混淆。当一个函数执行完毕后,程序会销毁这个函数对应的空间。当函数有return语句时,就是将结果返回给调用者。 return: Go支持返回多个值,在函数后面用括号括起多个返回值类型,接收时若想忽略某个返回值,可以使用_占位符跳过 func 函数名 (形参列表)(返回值类型列表//单个时可以不括){ 语句 return 返回值列表 } 递归调用: 函数使用注意事项: 1、形参和返回值列表都可以是多个 2、兼容值类型和引用类型 3、函数命名首字母大写类似public效果,可使其能被本包和其他包使用;小写类似private 4、函数内定义变量为局部变量 5、基本数据类型和数组默认值传递 6、Go函数不支持重载 7、Go中函数属于数据类型的一种,可以赋值给一个变量,该变量将成为函数类型的变量,通过该变量可以实现对函数的调用;故函数也可以作为Go中函数的形参 8、Go中自定义数据类型如下实现 type 数据类型名 数据类型 9、在函数返回值列表中可以直接对函数返回值命名 10、Go支持可变参数 e.g.func sum(args... int) sum int{} //支持0到多个参数,args为动态切片`

init函数: 每个源文件都可以包含一个init函数,会在main函数之前被调用。通常在init中完成初始化给main 执行顺序:import的文件里的全局变量定义->import的文件里的init函数->main里的全局变量定义->main里的init函数->main函数

匿名函数:没有名字的函数 Go支持匿名函数。使用方式如下: 1、定义的时候即调用 2、将匿名函数赋给某个变量,再通过这个变量完成调用,就可以反复调用了 3、赋给一个全局变量则成为全局匿名函数。除此之外只能在main中声明并自调用

闭包:一个函数和与其相关的引用环境的组合实体

defer:为在完毕后及时释放资源而设计的延时机制 当执行到defer时,会将defer后的语句压入独立的栈中,暂时不执行,同时会将相应的值拷贝也压入栈中,即后续程序对语句中的变量的修改不生效;当函数执行完毕后再从栈中FILO执行,

Go中常用的字符串系统函数 1、len(str)按字节统计字符串长度//汉字占3 2、[]rune(str)字符串遍历,同时处理汉字问题 3、n,err:=strconv.Atoi(str)字符串转整数;str = strconv.Itoa(n)整数转字符串 4、进制转换:str=strconv.FormatInt(n,进制) 5、查找子串: strings.Contains(str, substring), 返回bool;统计子串:strings.Count(str, substring) 6、字符串比较:==区分字母大小写,strings.EqualFold(str1, str2)不区分大小写 7、返回子串第一次出现的坐标:strings.Index(str,substr) 8、去掉字符串两边的空格: strings.TrimSpace(str);去掉字符串两边的指定字符:strings.Trim(str, deletestr);去掉字符串左右的指定字符:string.TrimLeft/TrimRight(str, deletestr);返回的都是新的字符串,str本身不会被改变 9、判断指定前后缀:strings.HasPrefix(str, prefix); strings.HasSuffix(str, suffix);返回bool变量 时间和日期相关函数:需要导入time包 1、time.now(),获取当前时间,返回time.Time类型对象 2、xxx.Year/Month...(),xxx为Time变量,返回当前的时间具体信息 3、格式化日期时间:格式化输出Sprintf/Printf; xxx.Format(指定格式) 4、时间常量:time.Hour/Minute/Second/Millisecond/Microsecond/Nanosecond, Go里time变量精确到纳秒 5、休眠:time.Sleep(duration//可用常量表示) 6、时间戳:Unix UnixNano:获取随机数 内置函数:len new make 错误处理:defer panic recover Go中抛出一个Panic异常,再在defer中通过recover捕获异常,然后正常处理