open, err := os.Open(filePath)
os.Open() 打開filePath路徑的文件,返回一個*File和err
10年積累的網站設計制作、網站設計經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有烏當免費網站建設讓你可以放心的選擇與我們合作。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中的bytevar 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)
}
}
指針類型的變量,直接輸出的是地址,要輸出內容,則在前面加*即可。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
當前標題:Go語言學習-----Gin框架項目實戰(Day3&Day4)-創新互聯
當前URL:http://vcdvsql.cn/article4/dgddie.html
成都網站建設公司_創新互聯,為您提供響應式網站、面包屑導航、網站維護、網站設計、品牌網站建設、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯