Go语言学习-----Gin框架项目实战(Day3&Day4)

一.不会的函数方法以及用途作用


open, err := os.Open(filePath)

os.Open() 打开filePath路径的文件,返回一个*File和err

scanner := bufio.NewScanner(open)

bufio.NewScanner() open即为*File,返回scanner,

for scanner.Scan() {
		text := scanner.Text()
		var topic Topic
		if err := json.Unmarshal([]byte(text), &topic); err != nil {
			return err
		}

for scanner.Scan(){}可以遍历文件的每一行,即每次调用scanner,Scan()可以读入下一行,读取的内容可以调用scanner.Text()得到,Scan函数在读到一行时返回true,不再有输入时返回false。json.Unmarshal(传入[]byte(byte数组), 传入一个结构体指针)

Go中的byte

var a byte = 'a' 其实就是一个字符。

byte数组 []byte,可以与string之间互相转换

[]byte转string

    var a byte = 'a'
	fmt.Println(a)
	var b [10]byte
	b[0] = 'a'
	b[1] = 'b'
	b[2] = 'c'
	var str string
	str = string(b[:])
	fmt.Println(str)
运行结果
97
abc

string转[]byte

    str := "abc"
	var data []byte = []byte(str)
	fmt.Println(data)
运行结果
[97 98 99]

二.读写输入

package repository

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
)

type Topic struct {
	Id         int    `json:"id"`
	Title      string `json:"title"`
	Content    string `json:"content"`
	CreateTime int64  `json:"create_time"`
}
type Post struct {
	Id        int64  `json:"id"`
	ParentId  int64  `json:"parent_id"`
	Content   string `json:"content"`
	CreatTime int64  `json:"creat_time"`
}

var (
	topicIndexMap map[int64]*Topic
	postIndexMap  map[int64][]*Post
)

func InitTopicIndexMap() error {
	open, err := os.Open("./data/topic")
	if err != nil {
		return err
	}
	scanner := bufio.NewScanner(open)
	topicTmpMap := make(map[int64]*Topic)
	for scanner.Scan() {
		text := scanner.Text()
		var topic Topic
		if err := json.Unmarshal([]byte(text), &topic); err != nil {
			return err
		}
		topicTmpMap[int64(topic.Id)] = &topic

	}
	topicIndexMap = topicTmpMap
	for k, v := range topicIndexMap {
		fmt.Println(k, *v)
		//fmt.Printf("%#v")
	}
	return nil
}

func InitPostIndexMap() error {
	open, err := os.Open("./data/post")
	if err != nil {
		return err
	}
	scanner := bufio.NewScanner(open)
	postTmpMap := make(map[int64][]*Post)
	for scanner.Scan() {
		text := scanner.Text()
		var post Post
		err := json.Unmarshal([]byte(text), &post)
		if err != nil {
			return err
		}
        // 判断该帖子是否存在在postTmpMap中
		// 如果存在则posts接受的是一个结构体指针切片,若不存在,则是空,则需要给他这个key创建一                
           个结构体指针切片
		// value, true/false := map[key]
		//用来判断此key在map中有没有value
		posts, ok := postTmpMap[post.ParentId]
        // 如果不存在,则添加一个[]*Post结构体指针切片,结构体指针切片指的是只能在切片中存放结构    
           体指针
		if !ok {
			postTmpMap[post.ParentId] = []*Post{&post}
			continue
		}
        // 切片append,因为是结构体指针切片,所以要放结构体指针
		posts = append(posts, &post)
		postTmpMap[post.ParentId] = posts
	}
	postIndexMap = postTmpMap
	for k, v := range postIndexMap {
		fmt.Println(k)
		for i := 0; i < len(v); i++ {
			fmt.Println(*v[i])
		}
	}
	return nil
}
package main

import (
	"Gin_project/repository"
	"fmt"
)

func main() {
	if err := repository.InitTopicIndexMap(); err != nil {
		fmt.Println(err)
	}
	if err := repository.InitPostIndexMap(); err != nil {
		fmt.Println(err)
	}
}

 

 

 指针类型的变量,直接输出的是地址,要输出内容,则在前面加*即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值