[TOC]
>[success] ## **1:基本介紹**
1)函數內部聲明/定義的變量叫局部變量,作用域僅限于函數內部。
2)函數外部聲明/定義的變量叫全局變量,作用域在整個包都有效,如果其首字母為大寫,則作用域在整個程序有效。

3)如果變量是在一個代碼塊,比如for/if中, 那么這個變量的的作用域就在該代碼塊
<br>
<br>
>[success] ## **練習題**
如下代碼,會報錯

<br>
<br>
>[success] ## **函數的練習**
1)在終端輸入一個整數,打印出相應的金字塔

2)打印99懲罰表

## **2 string常用的函數**
說明:字符串在我們程序開發中,使用的是非常多的,常用的函數需要掌握[帶看手冊或者官方編程指南]:
1)**統計字符串的長度**, 按字節len(str)-----(len是按照字節遍歷,并非按照字符)

2)**字符串遍歷** 同時處理有中文的問題r:= **[ ]rune(str)**;例如遍歷 a:=“hallo北京”

3)**字符串轉整數**: n, err := strconv.Atoi("12")

4)**整數轉字符串**?str = strconv.Itoa(12345)

5)字符 串轉`[]byte: var bytes = []byte("hello go")`

6)[ ]byte 轉字符串: `str = string([ ]byte{97, 98, 99})`

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的數字。

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。

9)統計一個字符串有幾個指定的子串: strings.Count("ceheese", "e") //4
func?[Count](#65 "View Source")
func Count(s, sep [string](#string)) [int](#int)
返回字符串s中有幾個不重復的sep子串。

10)不區分大小寫的字符串比較(==是區分字母大小寫的):
func?[EqualFold](#674 "View Source")
func EqualFold(s, t [string](#string)) [bool](#bool)
判斷兩個utf-8編碼字符串(將unicode大寫、小寫、標題三種格式字符視為相同)是否相同。

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。

12)返回子串在字符串最后一次出現的index, 如沒有返回-1 : strings LastIndex("go golang". "go")(**求字符串最后出現的位置是第幾個**)
func?[LastIndex](#164 "View Source")
func LastIndex(s, sep [string](#string)) [int](#int)
子串sep在字符串s中最后一次出現的位置,不存在則返回-1。

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子串。

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碼值一個字符串。

15)將字符串的字母進行大小寫的轉換: strings ToLower("Go") // go strings.ToUppr("Go") // GO

16)將字符串左右兩邊的空格去掉: strings.TrimSpace(" tn a lone gopher ntm ")
func?[TrimSpace](#613 "View Source")
func TrimSpace(s [string](#string)) [string](#string)
返回將s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。

17)將字符串左右兩邊指定的字符去掉: strings.Trim("! hello!", " !") // ["hello"] /將左右兩邊!
和”"去掉
func?[Trim](#586 "View Source")
func Trim(s [string](#string), cutset [string](#string)) [string](#string)
返回將s前后端所有cutset包含的utf-8碼值都去掉的字符串。

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。

<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。

- 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
- 第一節:反射基本介紹
- 第二節:反射重要的函數和概念
- 第三節:反射快速入門案例
- 第四節:反射注意事項
- 第五節:反射練習題
- 第六節:反射最佳實踐