This blog is dedicated to learning the Go programming language (golang). Most likely there'll be golang tutorials, discussions on golang idioms and golang programming techniques. We will also follow the development of golang as it matures.
Written by Allister Sanchez.
After some reflection, what I want to have is in fact to be able to auto-generate a Go package or packages, which can be imported into any Go code later, given an XML EDIFACT grammar file that is generated by some tool, such as (my current employer) Amadeus' Visual Services tool.
The format of this XML EDIFACT grammar file is
Visual Services 5 - XML Generator
1...list of transactions......list of messages......list of groups......list of segments......list of composites...
The resulting package codes could then be stored in a folder named after the interface name (in the above example "skd") as composites.go, segments.go, groups.go, etc. Every time there's a new version of the grammar XML file, edigo must be used to regenerate the said files.
That's all for now. I will write more on this later.
Oh, and by the way, I've created a new repository on GitHub for this.
It's been sometime since I've written anything on this blog. A few weeks back I realized that my syntax highlighting brush for golang wasn't available online anymore and so I decided to put it on Github.
Anyway, I've been thinking about what I could do to improve my understanding of the Go programming language. Earlier today it dawned on me that since I've been working a lot with EDIFACT messages, why not a Go package for handling EDIFACT messages?
So, what do I want to make? I haven't really seen an EDIFACT grammar parser that takes an XML file that defines the grammar and converts a valid EDIFACT message into a Go data structure. Conversely, it should allow the user to fill the Go data structure and generates the corresponding EDIFACT message from it.
Okay, it's time to hack. I'll post updates on this project later. Cheers!
I got some feedback from the Go Nuts mailing list, particularly from Russ Cox who pointed out that predefined identifiers like true, nil, int, and float are not reserved keywords. So I decided to have two kinds of highlighted keywords:
those that start a type or start a declaration, including for packages:
struct func interface map chan package import type const var
those that control the flow of the code:
goto break continue if else switch default case for range go select return fallthrough defer
Then I use the code from $GOROOT/test/rename.go and rename1.go to see the effect of this color scheme:
// $G $D/$F.go && $L $F.$A && ./$A.out
// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import "fmt"
func main() {
n :=
bool +
byte +
float +
float32 +
float64 +
int +
int8 +
int16 +
int32 +
int64 +
uint +
uint8 +
uint16 +
uint32 +
uint64 +
uintptr +
true +
false +
iota +
nil +
cap +
len +
make +
new +
panic +
print +
println
if n != 27*28/2 {
fmt.Println("BUG: wrong n", n, 27*28/2)
}
var n byte // ERROR "not a type|expected type"
var y = float(0) // ERROR "cannot call|expected function"
const (
a = 1 + iota // ERROR "string|incompatible types"
)
}
const (
bool = 1
byte = 2
float = 3
float32 = 4
float64 = 5
int = 6
int8 = 7
int16 = 8
int32 = 9
int64 = 10
uint = 11
uint8 = 12
uint16 = 13
uint32 = 14
uint64 = 15
uintptr = 16
true = 17
false = 18
iota = 19
nil = 20
cap = 21
len = 22
make = 23
new = 24
panic = 25
print = 26
println = 27
)
In the end, if it doesn't suit your aesthetic tastes, you could always download the script and tweak it.
Hi everyone! I've just learned about Google's Go language and I think it'll be interesting to write software with it. I'm using this blog to record my experiences with Golang, so check it out from time to time!