小言_互联网的博客

源码阅读:SST (beego.me/产品案例)

430人阅读  评论(0)

源码阅读一:SST

说明

最近这段时间在尝试使用beego做web开发,学习的差不多了,现在开始阅读源码。beego.me–产品案例 在这里找到了一些使用beego开发的项目,在阅读源码的过程中 ,发现不足,进行细化,针对性学习;下列是该项目SST的一些信息:
github:https://github.com/duliang123/SST
产品案例:https://beego.me/products

收获

1.用户登陆场景模型

#####

2.标准库bytes:
bytes库是go用来操作byte切片的工具包,包括对这种数据类型的查询,截取,替换,拼接,读取等方法

package main

import (
	"bytes"
	"fmt"
)

func main()  {
	readAndWrete()
	test01()
}

//写入和读取数据
func readAndWrete()  {
	var a bytes.Buffer    //创建一个缓冲区,buffer是一个结构体,这里相当于声明了一个结构体
	var info map[string]string = make(map[string]string)
	info["name"] = "aaaaa"
	info["age"]  = "bbbbbb"
	info["aa"] = "ccccc"
	info["bb"] = "ddddd"
	for k,v := range info{
		//fmt.Println(fmt.Sprintf("%s:%s",k,v))
		a.WriteString(fmt.Sprintf("%s:%s\n",k,v))     //向缓冲区内写入内容
	}
	fmt.Println("a.String()--------:",a.String())     //打印缓冲区内的内容
}

func test01()  {
	var info string = "AaBwQqqZZZ"
	fmt.Println("[]byte(info):",)
	tmp01 := []byte(info)  //将字符串转换为一个byte切片
	fmt.Println("tmp01:",tmp01)

	//tmp02 := bytes.ToLower(tmp01)    //将切片内字符转换为小写
	//tmp02 := bytes.ToUpper(tmp01)    //将切片内字符传唤为大写
	tmp02 := bytes.Title(tmp01)       //转换为标题
	fmt.Println("tmp02:",tmp02)

	tmp03 := string(tmp02)       //将byte类型转换为string类型
	fmt.Println("tmp03:",tmp03)

	var info01 string = "    aa bb cc e         1            "
	atmp01 := []byte(info01)
	fmt.Println("atmp01:",atmp01)
	fmt.Println(string(bytes.TrimSpace(atmp01)))   //去除左右两边空白字符

	fmt.Println(string(bytes.Join(    //字符串拼接,以-拼接
		[][]byte{
			[]byte("aa"),
			[]byte("bb"),
			[]byte("cc"),
		},
		[]byte("-"),
	)));

	var hostname string = "caransible.mgr.prod.bj1 中"
	tmp04 := []byte(hostname)
	bj := []byte("中")
	fmt.Println(bytes.Contains(tmp04,bj))     //判断字符串中是否包含该字符,包含则返回true
	fmt.Println(bytes.Contains([]byte("caransible.mgr.prod.bj1"), []byte("bj1")));

	fmt.Println(bytes.Count([]byte("a|b|c"), []byte("|")));    //关键字在字符串中出现的次数;
	fmt.Println([]byte("a|b|c"))   //[]byte("a|b|c") 是将字符串每个字符作为一个元素进行分割,组合成一个切片
}
//总结:如果要对string操作,需要先将string类型转换为[]byte类型,然后通过bytes提供的方法进行操作,完成后使用string()函数进行将[]byte内容转换为string类型,便于阅读;

3.标准库sync:
sync库是解决协程之间通信的一种方式,协程执行期间用于阻塞父线程;

package main
import (
	"fmt"
	"sync"
)

func main()  {
	wg := sync.WaitGroup{}
	var numList []int64 = []int64{22,32,12,2,667,44,23}
	wg.Add(len(numList))      //将要循环的次数添加到这里,协程没执行一次则从中减少一个数值,直至读取完,父进程才会退出
	for i := 0; i < len(numList); i++ {
		tmp := numList[i]
		go test03(tmp,&wg)
	}
	wg.Wait()     //add添加的没有执行完成时,父进程不会退出;这里设置阻塞;
}

func test03(num int64,wg *sync.WaitGroup){
	tmp := num * num
	fmt.Println(tmp)
	wg.Done()        //每个协程执行一次则减少一次;
}

//总结:sync在父进程设置wg := sync.WaitGroup{}  wg.Add(len(numList)) wg.Wait()  在协程内执行wg.Done()

4.ssh库

#########

5.###

#####

6.###

#####

7.###

#####

源码解读

从路由入手:


转载:https://blog.csdn.net/qq_17472959/article/details/102491050
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场