彬哥Go语言笔记Golang语言社区

彬哥笔记 --12 Go语言 读取游戏配置文件 实例

2018-12-29  本文已影响49人  Golang语言社区

      大家好,我是彬哥,本节给大家讲下使用go语言服务器开发读取配置的例子,抛砖引玉了,实际需求还是按照自己熟悉的技术来做最好,彬哥只是给大家提供一个思路。
流程如下:

CSV配置文件格式 如下:


CSV配置文件

注:如果是在Linux下使用,而CSV是在window平台下配置数据,那么CSV文件一定要注意编码问题,修改编码流程如下

  1. 用记事本打开CSV文件


    记事本打开

    2 菜单栏 --【文件】--【另存为】


    另存为
    3 选择 UTF-8 编码
    UTF-8

解析代码 逻辑如下:

package conf

// csv配置表
var G_RoomList map[string]interface{} // 房间列表
var RoomListData map[string]*RoomList // 房间列表

func init() {
    G_RoomList = make(map[string]interface{})
    RoomListData = make(map[string]*RoomList)
}

//------------------------------------------------------------------------------

// 房间列表
type RoomList struct {
    RoomID    string // 房间列表
    NeedPiece string // 进场花费的金币
    NeedLev   string // 进场需要的等级
    Desc      string // 描述
    SysPiece  string // 系统抽水
    WinReward string // 每局获得
    IsTop     string // 是否置顶
    TypeICON  string // 活动的ICON
}

package csv

package csv

import (
    "LollipopGo/LollipopGo/conf"
    "encoding/csv"
    "fmt"
    "io/ioutil"
    "strings"
)

func ReadCsv_ConfigFile_RoomListST_Fun() bool {
    // 获取数据,按照文件
    fileName := "roomlist.csv"
    fileName = "./csv/" + fileName
    cntb, err := ioutil.ReadFile(fileName)
    if err != nil {
        panic("读取配置文件出错!")
        return false
    }
    // 读取文件数据
    r2 := csv.NewReader(strings.NewReader(string(cntb)))
    ss, _ := r2.ReadAll()
    sz := len(ss)
    roomidtemp := ""
    // 循环取数据
    for i := 1; i < sz; i++ {
        Infotmp := new(conf.RoomList)
        Infotmp.RoomID = ss[i][0]
        Infotmp.NeedPiece = ss[i][1]
        Infotmp.NeedLev = ss[i][2]
        Infotmp.Desc = ss[i][3]
        Infotmp.SysPiece = ss[i][4]
        Infotmp.WinReward = ss[i][5]
        Infotmp.IsTop = ss[i][6]
        Infotmp.TypeICON = ss[i][7]

        s := string([]byte(Infotmp.RoomID)[:5])
        if len(roomidtemp) == 0 {
            roomidtemp = s
            conf.RoomListData[Infotmp.RoomID] = Infotmp

        } else {
            if roomidtemp == s {
                conf.RoomListData[Infotmp.RoomID] = Infotmp
                fmt.Println("+++++++++", conf.RoomListData)
                // 仅仅有一个游戏的时候
                if i == sz-1 {
                    conf.G_RoomList[roomidtemp] = conf.RoomListData
                }
            } else {
                // 保存数据
                conf.G_RoomList[roomidtemp] = conf.RoomListData
                roomidtemp = s
                conf.RoomListData = make(map[string]*conf.RoomList)

            }
        }
    }
    return true
}

      每天坚持学习1小时Go语言,大家加油,我是彬哥,下期见!如果文章中不同观点、意见请文章下留言或者关注下方订阅号反馈!


社区交流群:221273219
Golang语言社区论坛 :
www.Golang.Ltd
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclass


Golang语言社区
上一篇下一篇

猜你喜欢

热点阅读