[TOC]
>[success] ## **1:基本介绍**
1)函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部。
2)函数外部声明/定义的变量叫全局变量,作用域在整个包都有效,如果其首字母为大写,则作用域在整个程序有效。
![](https://img.kancloud.cn/e3/0d/e30d0c9d345e627324deeb2e2742bde1_1053x720.png)
3)如果变量是在一个代码块,比如for/if中, 那么这个变量的的作用域就在该代码块
<br>
<br>
>[success] ## **练习题**
如下代码,会报错
![](https://img.kancloud.cn/c7/74/c7742f4d938d7bdafdbd92fa44706ed2_1280x317.png)
<br>
<br>
>[success] ## **函数的练习**
1)在终端输入一个整数,打印出相应的金字塔
![](https://img.kancloud.cn/6f/12/6f12666016fe35a372b5202e426c4ff2_1002x720.png)
2)打印99惩罚表
![](https://img.kancloud.cn/d8/fb/d8fb797dca68fc1a5f14b2bfe66ffb91_1280x591.png)
## **2 string常用的函数**
说明:字符串在我们程序开发中,使用的是非常多的,常用的函数需要掌握[带看手册或者官方编程指南]:
1)**统计字符串的长度**, 按字节len(str)-----(len是按照字节遍历,并非按照字符)
![](https://img.kancloud.cn/f2/8e/f28e7c493ae8e27fc4f03d819280228a_1280x331.png)
2)**字符串遍历** 同时处理有中文的问题r:= **[ ]rune(str)**;例如遍历 a:=“hallo北京”
![](https://img.kancloud.cn/0d/be/0dbe996fd95406b647859a737836507e_1193x720.png)
3)**字符串转整数**: n, err := strconv.Atoi("12")
![](https://img.kancloud.cn/3e/b7/3eb7e452359830d0aaa90d61c2945e97_1280x525.png)
4)**整数转字符串** str = strconv.Itoa(12345)
![](https://img.kancloud.cn/3f/2d/3f2de9554d369cd38034ee046deb44ba_1280x309.png)
5)字符 串转`[]byte: var bytes = []byte("hello go")`
![](https://img.kancloud.cn/bf/c6/bfc6e16cb8d1725a6517d0f8a615172b_1280x280.png)
6)[ ]byte 转字符串: `str = string([ ]byte{97, 98, 99})`
![](https://img.kancloud.cn/d0/47/d04727349865403fc5930a8dd56f0783_1280x207.png)
7)10进制转2, 8, 16进制: str = strconv.FormatInt(123, 2)//2->8,16
[strconv](https://studygolang.com/static/pkgdoc/pkg/strconv.htm)**:包**
func [FormatInt](#18 "View Source")
func FormatInt( i [int64](#int64), base [int](#int)) [string](#string)
返回i的base进制的字符串表示。base 必须在2到36之间,结果中会使用小写字母'a'到'z'表示大于10的数字。
![](https://img.kancloud.cn/c6/c6/c6c6b87979b9c4da54966a2e944df624_1095x720.png)
8)查找子串是否在指定的字符串中: strings.Contains("seafood", "foo") //true
[strings](https://studygolang.com/static/pkgdoc/pkg/strings.htm)**:包**
func [Contains](#112 "View Source")
func Contains(s, substr [string](#string)) [bool](#bool)
判断字符串s是否包含子串substr。
![](https://img.kancloud.cn/ec/b9/ecb91fac92126c05035607d3c2a5bcb8_1280x328.png)
9)统计一个字符串有几个指定的子串: strings.Count("ceheese", "e") //4
func [Count](#65 "View Source")
func Count(s, sep [string](#string)) [int](#int)
返回字符串s中有几个不重复的sep子串。
![](https://img.kancloud.cn/75/1f/751fc3591f6a8d8aefd9843a9e0d6391_1280x268.png)
10)不区分大小写的字符串比较(==是区分字母大小写的):
func [EqualFold](#674 "View Source")
func EqualFold(s, t [string](#string)) [bool](#bool)
判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。
![](https://img.kancloud.cn/2d/1d/2d1dd68d425361fbc1322b690c410c0f_1280x318.png)
11)返回子串在字符串第一次出现的index值,如果没有返回-1 :strings.Index("NLT_ abc", "abc")//4
func [Index](#127 "View Source")
func Index(s, sep [string](#string)) [int](#int)
子串sep在字符串s中第一次出现的位置,不存在则返回-1。
![](https://img.kancloud.cn/95/d6/95d6a8d50db1d91459e0052a22366294_1280x419.png)
12)返回子串在字符串最后一次出现的index, 如没有返回-1 : strings LastIndex("go golang". "go")(**求字符串最后出现的位置是第几个**)
func [LastIndex](#164 "View Source")
func LastIndex(s, sep [string](#string)) [int](#int)
子串sep在字符串s中最后一次出现的位置,不存在则返回-1。
![](https://img.kancloud.cn/a7/f6/a7f6f57f96ddbf7e4d016989d03af2e8_1280x277.png)
13)将指定的子串替换成另外一个子串:
strings Replace("go go hello", "go", "go 语言", n)n可以指定你希望替换几个,如果n=-1表示全部替换
func [Replace](#638 "View Source")
func Replace(s, old, new [string](#string), n [int](#int)) [string](#string)
返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。
![](https://img.kancloud.cn/46/6f/466f7059c3046d6af0ccbe70d4d5aff4_1280x305.png)
14)按照指定的某个字符,为分割标识,将一个字符串拆分成字符串数组:strings.Split("hello,wrold,ok". "")
func [Split](#294 "View Source")
func Split(s, sep [string](#string)) [ ][string](#string)
用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。
![](https://img.kancloud.cn/ee/d9/eed93f4ef2179a41d8440803b885b1ab_1280x580.png)
15)将字符串的字母进行大小写的转换: strings ToLower("Go") // go strings.ToUppr("Go") // GO
![](https://img.kancloud.cn/b8/6a/b86aefa3dd97b7e8a177f28d01675f5f_1280x557.png)
16)将字符串左右两边的空格去掉: strings.TrimSpace(" tn a lone gopher ntm ")
func [TrimSpace](#613 "View Source")
func TrimSpace(s [string](#string)) [string](#string)
返回将s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。
![](https://img.kancloud.cn/b9/21/b921694e47c7efb3001b946887a3a2bf_1280x227.png)
17)将字符串左右两边指定的字符去掉: strings.Trim("! hello!", " !") // ["hello"] /将左右两边!
和”"去掉
func [Trim](#586 "View Source")
func Trim(s [string](#string), cutset [string](#string)) [string](#string)
返回将s前后端所有cutset包含的utf-8码值都去掉的字符串。
![](https://img.kancloud.cn/0e/62/0e622c56dc24f58490375fbe7cf33189_1280x369.png)
18)将字符串左边指定的字符去掉: strings.TimLeft("! hello!", "!") // ["hello"]//将左边!和"
"去掉
func [TrimLeft](#595 "View Source")
func TrimLeft(s [string](#string), cutset [string](#string)) [string](#string)
返回将s前端所有cutset包含的utf-8码值都去掉的字符串。
<br>
<br>
19)将字符串右边指定的字符去掉: strings.TrimRight("! hello!", "!") // [hello"]将右边! 和"
"去掉
func [TrimRight](#604 "View Source")
func TrimRight(s [string](#string), cutset [string](#string)) [string](#string)
返回将s后端所有cutset包含的utf-8码值都去掉的字符串。
<br>
<br>
20)判断字符串是否以指定的字符串开头: stings .HasPrefix(" fp://192168.10.1". "ftp") //true
func [HasPrefix](#371 "View Source")
func HasPrefix(s, prefix [string](#string)) [bool](#bool)
判断s是否有前缀字符串prefix。
![](https://img.kancloud.cn/94/5c/945cb201cd5eac6424504b7de630e1f8_1280x192.png)
<br>
<br>
21)判断字符串是否以指定的字符串结束: strings HasSuffix("NLT_ abc.jpg"; "abc") /false
func [HasSuffix](#376 "View Source")
func HasSuffix(s, suffix [string](#string)) [bool](#bool)
判断s是否有后缀字符串suffix。
![](https://img.kancloud.cn/c1/c8/c1c85dc29542da99b804c677eded6a2a_1280x214.png)
- Golang语言之旅
- 第一章:初始小节以及安装
- 一:Golang语言特性
- 二:Windows上安装Go语言开发包
- 三:在Mac OS上安装Go语言开发包
- 第二章:GO语言注意事项
- 一:Dos的常用指令
- 第三章:Go初识小菜
- 一:Go语言之变量与常量
- 二:Go内置值-引用类型
- 三:基本的数据类型
- 四:字符串(char)
- 五:布尔类型(bool)
- 六:字符串类型(string)
- 七:基本数据类型的默认值
- 八:基本数据类型的互相转换
- 九:基本数据类型和string类型的相互转换
- 十:Golang指针
- 十一:值类型和引用类型
- 十二:标识符和命名规范
- 十三:系统保留关键字and预定义标识符
- 十四:fmt常用方法解析
- 第四章:Go运算符
- 一:运算符的基本介绍
- 二:算术运算符
- 2.1:算数运算符细节
- 三:关系运算符
- 3.1:关系运算符细节
- 四:逻辑运算符
- 4.1:逻辑运算符细节及案例
- 五:Go赋值运算符
- 5.1:案例演示赋值运算符的基本使用
- 5.2:赋值运算符的特点
- 六:Go位运算符
- 七:其他运算符
- 八:运算符的优先级
- 九:控制台输入语句
- 十:进制
- 十一:位运算
- 第五章:流程控制大纲
- 一:if语句
- 二:switch语句
- 三:for循环
- 第六章:函数-包-错误处理
- 一:Go函数
- 二:Go包
- 三:匿名函数
- 四:闭包
- 五:函数defer
- 六:函数参数的传递方式
- 七:变量的作用域
- 八:时间和日期相关函数
- 九:new和recover异常
- 十:数组(Array)切片(Section)
- 十一:切片(slice)
- 十二:3 数组的排序和查找
- 第七章:Map
- 第一节:Map基础认识
- 第二节:Map初始化和make
- 第三节:Map增删改查
- 第四节:Map的切片
- 第五节:Map的注意事项
- 第八章:面向对象(上)
- 第一节:结构体(值类型)
- 第二节:方法
- 第三节:面向对象编程应用实例
- 第九章:面向对象(下)
- 第一节:面向对象之抽象
- 第二节:面向对象之继承
- 第三节:面向对象之多态
- 第四节:接口
- 第十章:文件操作
- 第一节:文件基本介绍
- 第二季:写文件实例操作
- 第三节:JSON
- 第十一章:单元测试
- 第一节:单元测试介绍
- 第二节:单元测试案例
- 第三节:单元测试总结
- 第四节:单元测试案例
- 第十二章:goroutine和channel
- 第一节:goroutine基本介绍
- 第二节:goroutine入门案例
- 第三节:goroutione调度模型
- 第四节:Golang设置运行的CPU数量
- 第十二章:channel
- 第一节:channel基本介绍
- 第二节:channel基本使用
- 第三节:channel案例演示
- 第四节:channel 使用的注意事项
- 第五节:channel练习题
- 第六节:channel的遍历和关闭
- 第七节:goroutione和channel结合
- 第八节:channel细节处理
- 第十二章:并发模式
- 第十三章:反射reflect
- 第一节:反射基本介绍
- 第二节:反射重要的函数和概念
- 第三节:反射快速入门案例
- 第四节:反射注意事项
- 第五节:反射练习题
- 第六节:反射最佳实践