go语言加法 (go语言如何操作数据库)

财务报表处理,和财务报表分析当中有大量的数据,如果用excel实在是效率太低了.

现在尝试用go语言进行程序化分析判断.

会计分录的数据通常是这样的.(存储于excel表或数据库sql)

go语言如何操作数据库,go语言加法

转化为数据结构为

//会计分录entry

type Entry struct{

Index string //该会计分录在该excel表或sql数据库中的索引位置

Id string //唯一识别码

Describe string //业务描述

Dr float64 //借方

Cr float64 //贷方

}

//一笔会计record记录由2笔或2笔以上会计分录组成,故有数据结构

type Record []Entry

如何用go语言实现 借:原材料 贷:银行存款?

// 借记

func (record Record) Debit (item string) bool{

for _,entry := range record {

if entry.Item == item && entry.Dr > 0 {

return true

}

}

return false

}

//贷记

func (record Record) Credit (item string) bool{

for _,entry := range record {

if entry.Item == item && entry.Cr > 0 {

return true

}

}

return false

}

思考:很多时候,会计分录有二级甚至三级分录,如借:预付账款-预付XX-XX款,不同的二级或三级分录,会有不同的业务判断.

所以进一步改进上述代码,利用正则表达式进行模糊逻辑判断.

//改进后的 借记

func (record Record) Debit (item string) bool{

for _,entry := range record {

matched,_ := regexp.MatchString( item, entry.Item )

if matched && entry.Dr > 0 {

return true

}

}

return false

}

同样对贷记Credit增加正则表达式的改进.

如此一来,会计分录

借:原材料 贷:银行存款

go语言代码表述:

if record.Debit("原材料") && record.Credit("银行存款")

借:预付账款-预付XX-XX款 贷:银行存款

go语言代码表述:

if record.Debit("预付账款.*XX.*") && record.Credit("银行存款")

而后就可以进行后续一系列逻辑判断,从而得出对报表影响.