diff --git a/7.5.md b/7.5.md index dba718e5..146b86cd 100644 --- a/7.5.md +++ b/7.5.md @@ -150,4 +150,4 @@ Go语言里面删除文件和删除文件夹是同一个函数 ## links * [目录]() * 上一节: [模板处理](<7.4.md>) - * 下一节: [小结](<7.6.md>) \ No newline at end of file + * 下一节: [字符串处理](<7.6.md>) \ No newline at end of file diff --git a/7.6.md b/7.6.md index 170770c8..7ce08270 100644 --- a/7.6.md +++ b/7.6.md @@ -1,7 +1,157 @@ -# 7.5 小结 -这一章给大家介绍了一些文本处理的工具,包括XML、JSON、正则和模板技术,XML和JSON是数据交互的工具,通过XML和JSON你可以表达各种含义,通过正则你可以处理文本(搜索、替换、截取),通过模板技术你可以展现这些数据给用户。这些都是你开发Web应用过程中需要用到的技术,通过这个小节的介绍你能够了解如何处理文本、展现文本。 +# 7.6 字符串处理 +字符串在我们平常的Web开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割、连接、转换等操作,本小节讲通过Go标准库中的strings和strconv两个包中的函数来讲解如何进行有效快速的操作。 +## 字符串操作 +下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档。 + +- func Contains(s, substr string) bool + + 字符串s中是否包含substr,返回bool值 + + fmt.Println(strings.Contains("seafood", "foo")) + fmt.Println(strings.Contains("seafood", "bar")) + fmt.Println(strings.Contains("seafood", "")) + fmt.Println(strings.Contains("", "")) + //Output: + //true + //false + //true + //true + +- func Join(a []string, sep string) string + + 字符串链接,把slice a通过sep链接起来 + + s := []string{"foo", "bar", "baz"} + fmt.Println(strings.Join(s, ", ")) + //Output:foo, bar, baz + +- func Index(s, sep string) int + + 在字符串s中查找sep所在的位置,返回位置值,找不到返回-1 + + fmt.Println(strings.Index("chicken", "ken")) + fmt.Println(strings.Index("chicken", "dmr")) + //Output:4 + //-1 + +- func Repeat(s string, count int) string + + 重复s字符串count次,最后返回重复的字符串 + + fmt.Println("ba" + strings.Repeat("na", 2)) + //Output:banana + +- func Replace(s, old, new string, n int) string + + 在s字符串中,把old字符串替换为new字符串,n表示替换的次数,小于0表示全部替换 + + fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) + fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) + //Output:oinky oinky oink + //moo moo moo + +- func Split(s, sep string) []string + + 把s字符串按照sep分割,返回slice + + fmt.Printf("%q\n", strings.Split("a,b,c", ",")) + fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) + fmt.Printf("%q\n", strings.Split(" xyz ", "")) + fmt.Printf("%q\n", strings.Split("", "Bernardo O'Higgins")) + //Output:["a" "b" "c"] + //["" "man " "plan " "canal panama"] + //[" " "x" "y" "z" " "] + //[""] + +- func Trim(s string, cutset string) string + + 在s字符串中去除cutset指定的字符串 + + fmt.Printf("[%q]", strings.Trim(" !!! Achtung !!! ", "! ")) + Output:["Achtung"] + +- func Fields(s string) []string + + 去除s字符串的空格符,并且按照空格分割返回slice + + fmt.Printf("Fields are: %q", strings.Fields(" foo bar baz ")) + //Output:Fields are: ["foo" "bar" "baz"] + + +## 字符串转换 +字符串转化的函数在strconv中,如下也只是列表一些常用的: + +- Append 系列函数将整数等转换为字符串后,添加到现有的字节数组中。 + + package main + + import ( + "fmt" + "strconv" + ) + + func main() { + str := make([]byte, 0, 100) + str = strconv.AppendInt(str, 4567, 10) + str = strconv.AppendBool(str, false) + str = strconv.AppendQuote(str, "abcdefg") + str = strconv.AppendQuoteRune(str, '单') + fmt.Println(string(str)) + } + +- Format 系列函数把其他类型的转换为字符串 + + package main + + import ( + "fmt" + "strconv" + ) + + func main() { + a := strconv.FormatBool(false) + b := strconv.FormatFloat(123.23, 'g', 12, 64) + c := strconv.FormatInt(1234, 10) + d := strconv.FormatUint(12345, 10) + e := strconv.Itoa(1023) + fmt.Println(a, b, c, d, e) + } + +- Parse 系列函数把字符串转换为其他类型 + + package main + + import ( + "fmt" + "strconv" + ) + + func main() { + a, err := strconv.ParseBool("false") + if err != nil { + fmt.Println(err) + } + b, err := strconv.ParseFloat("123.23", 64) + if err != nil { + fmt.Println(err) + } + c, err := strconv.ParseInt("1234", 10, 64) + if err != nil { + fmt.Println(err) + } + d, err := strconv.ParseUint("12345", 10, 64) + if err != nil { + fmt.Println(err) + } + e, err := strconv.Itoa("1023") + if err != nil { + fmt.Println(err) + } + fmt.Println(a, b, c, d, e) + } + ## links * [目录]() * 上一节: [文件操作](<7.5.md>) - * 下一节: [Web服务](<8.md>) + * 下一节: [小结](<7.7.md>) \ No newline at end of file diff --git a/7.7.md b/7.7.md new file mode 100644 index 00000000..07412264 --- /dev/null +++ b/7.7.md @@ -0,0 +1,7 @@ +# 7.5 小结 +这一章给大家介绍了一些文本处理的工具,包括XML、JSON、正则和模板技术,XML和JSON是数据交互的工具,通过XML和JSON你可以表达各种含义,通过正则你可以处理文本(搜索、替换、截取),通过模板技术你可以展现这些数据给用户。这些都是你开发Web应用过程中需要用到的技术,通过这个小节的介绍你能够了解如何处理文本、展现文本。 + +## links + * [目录]() + * 上一节: [字符串处理](<7.6.md>) + * 下一节: [Web服务](<8.md>) diff --git a/7.md b/7.md index ef27c5a0..e1652c45 100644 --- a/7.md +++ b/7.md @@ -1,14 +1,16 @@ # 7 文本处理 Web开发中对于文本处理是非常重要的一部分,我们往往需要对输出或者输入的内容进行处理,这里的文本包括字符串、数字、Json、XMl等等。Go语言作为一门高性能的语言,对这些文本的处理都有官方的标准库来支持。而且在你使用中你会发现Go标准库的一些设计相当的巧妙,而且对于使用者来说也很方便就能处理这些文本。本章我们将通过四个小节的介绍,让用户对Go语言处理文本有一个很好的认识。 -XML是目前很多标准接口的交互语言,很多时候和一些Java编写的webserver进行交互都是基于XML标准进行交互,7.1小节将介绍如何处理XML文本,我们使用XML之后发现它太复杂了,现在很多互联网企业对外的API大多数采用了JSON格式,这种格式描述简单,但是又能很好的表达意思,7.2小节我们将讲述如何来处理这样的JSON格式数据。正则是一个让人又爱又恨的工具,它处理文本的能力非常强大,我们在前面表单验证里面已经有所领略它的强大,7.3小节将详细的更深入的讲解如何利用好Go的正则。Web开发中一个很重要的部分就是MVC分离,在Go语言的Web开发中V有一个专门的包来支持`template`,7.4小节将详细的讲解如何使用模版来进行输出内容。7.5小节讲详细介绍如何进行文件和文件夹的操作。 +XML是目前很多标准接口的交互语言,很多时候和一些Java编写的webserver进行交互都是基于XML标准进行交互,7.1小节将介绍如何处理XML文本,我们使用XML之后发现它太复杂了,现在很多互联网企业对外的API大多数采用了JSON格式,这种格式描述简单,但是又能很好的表达意思,7.2小节我们将讲述如何来处理这样的JSON格式数据。正则是一个让人又爱又恨的工具,它处理文本的能力非常强大,我们在前面表单验证里面已经有所领略它的强大,7.3小节将详细的更深入的讲解如何利用好Go的正则。Web开发中一个很重要的部分就是MVC分离,在Go语言的Web开发中V有一个专门的包来支持`template`,7.4小节将详细的讲解如何使用模版来进行输出内容。7.5小节讲详细介绍如何进行文件和文件夹的操作。7.6小结介绍了字符串的相关操作。 ## 目录 * 1. [XML处理](7.1.md) * 2. [JSON处理](7.2.md) * 3. [正则处理](7.3.md) * 4. [模板处理](7.4.md) - * 5. [小结](7.5.md) + * 5. [文件操作](7.5.md) + * 6. [字符串处理](7.6.md) + * 7. [小结](7.7.md) ## links * [目录]() diff --git a/preface.md b/preface.md index 11623a49..b95ef286 100644 --- a/preface.md +++ b/preface.md @@ -46,7 +46,8 @@ - 7.3 [正则处理](7.3.md) - 7.4 [模板处理](7.4.md) - 7.5 [文件操作](7.5.md) - - 7.6 [小结](7.6.md) + - 7.6 [字符串处理](7.6.md) + - 7.7 [小结](7.7.md) * 8.[Web服务](8.md) - 8.1 [Socket编程](8.1.md) - 8.2 [WebSocket](8.2.md)