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

Golang语言社区 · · 1174 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

      大家好,我是彬哥,本节给大家讲下使用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语言,大家加油,我是彬哥,下期见!如果文章中不同观点、意见请文章下留言或者关注下方订阅号反馈!


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


Golang语言社区

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Golang语言社区

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1174 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传