Go语言学习笔记------字符串练习实例

Base64编码—电子邮件的基础编码格式

Base64编码是常见的对8bit字节码的编码方式之一。
Base64编码可以使用64个可打印字符来表示二进制数据,电子邮件就是使用这种编码。
Go语言标准库自带了Base64编码算法。示例如下:

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	//发送消息的内容
	message := "ni hao a "
	//进行Base64编码
	encodeMessage := base64.StdEncoding.EncodeToString([]byte(message))
	//打印编码后的内容
	fmt.Println(encodeMessage)
	//解码消息
	data, err := base64.StdEncoding.DecodeString(encodeMessage)

	//出错处理
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(string(data))
	}

}

输出:
在这里插入图片描述

从INI配置文件中查询需要的值

INI文件格式是一种古老的配置文件格式。一些操作系统、虚幻游戏引擎、GIT版本管理都在使用INI文件格式。

  • INI文件由多行文本组成,整个配置由"[]“拆分为多个“段”。每个段中又以”="分割为键和值。
  • 文件格式如下

[setion]
key1=value1
key2=value2

文件内容示例:

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote “origin”]
url = https://github.com/davyxu/cellnet
fetch = +refs/heads/:refs/remotes/origin/
[branch “master”]
remote = origin
merge = refs/heads/master

从INI文件中取值的函数
熟悉了INI文件格式之后,开始准备读取INI文件,并从文件中获取需要的数据。下面我们创建一个 example.ini 文件,并将从 GIT 版本管理配置文件中截取的一部分内容复制到该文件中。

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

//根据文件名,段名,键名获取ini的值
func getValue(filename, expectSection, expectKey string) string {
	//打开文件
	file, err := os.Open(filename)
	//文件找不到,返回空
	if err != nil {
		return ""
	}
	//在函数结束时,关闭文件
	defer file.Close()
	/*defer是延迟执行函数,defer并不会在这一行执行,而是延迟在任何一个
	  getValue()函数的返回点,也就是函数退出的地方,调用file.Close()函数后,打开的文件
	  就会被关闭并释放系统资源*/
	//使用读取器来读取文件
	reader := bufio.NewReader(file)
	//当前读取的段的名字
	var sectionName string
	for {
		//读取文件的一行,从文件中读取,直到碰到"\n"
		linestr, err := reader.ReadString('\n')
		if err != nil {
			break
		}
		//切掉行两边的空白字符
		linestr = strings.TrimSpace(linestr)
		//忽略空行
		if linestr == "" {
			continue
		}
		//忽略注释
		if linestr[0] == ';' {
			continue
		}
		//读取段和键值
		//行首和尾巴分别是方括号的,说明是段标记的起止符
		if linestr[0] == '[' && linestr[len(linestr)-1] == ']' {
			//将段名取出
			sectionName = linestr[1 : len(linestr)-1]
			//这个段是希望读取的
		} else if sectionName == expectSection {
			//切开等号分割的键值对
			//string.Spit()函数会返回字符串切片,类型为[]string.
			//因此被分割后,string.Split()函数返回的字符串切片有2个元素
			pair := strings.Split(linestr, "=")
			//保证切开只有1个等号分割的简直情况
			if len(pair) == 2 {
				//去掉键的多余空白符
				key := strings.TrimSpace(pair[0])
				if key == expectKey {
					//返回去掉空白字符的值
					return strings.TrimSpace(pair[1])
				}
			}
		}

	}
	return ""
}
func main() {
	fmt.Println(getValue("example.ini", "remote \"origin\"", "fetch"))

}

输出结果:
在这里插入图片描述

发布了40 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/suoyudong/article/details/104933405