goplus.org | Docs | Go+ vs. Go | Tutorials | Playground | iGo+ Playground | Contributing & compiler design
Our vision is to enable everyone to create production-level applications.
- Simple and easy to understand
- Smaller syntax set than Python in best practices
- Derived from Go and easy to build large projects from its good engineering foundation
The Go+ programming language is designed for engineering, STEM education, and data science.
- For engineering: working in the simplest language that can be mastered by children.
- For STEM education: studying an engineering language that can be used for work in the future.
- For data science: communicating with engineers in the same language.
For more details, see Quick Start.
Different from the function call style of most languages, Go+ recommends command style code:
println "Hello world"
To emphasize our preference for command style, we introduce echo
as an alias for println
:
echo "Hello world"
For more discussion on coding style, see https://tutorial.goplus.org/hello-world.
One language can change the whole world.
Go+ is a "DSL" for all domains.
Rob Pike once said that if he could only introduce one feature to Go, he would choose interface
instead of goroutine
. classfile
is as important to Go+ as interface
is to Go.
In the design philosophy of Go+, we do not recommend DSL
(Domain Specific Language). But SDF
(Specific Domain Friendliness) is very important. The Go+ philosophy about SDF
is:
Don't define a language for specific domain.
Abstract domain knowledge for it.
Go+ introduces classfile
to abstract domain knowledge.
Sound a bit abstract? Let's see some Go+ classfiles.
- STEM Education: spx: A Go+ 2D Game Engine
- Web Programming: yap: Yet Another HTTP Web Framework
- Web Programming: yaptest: HTTP Test Framework
- Web Programming: ydb: Database Framework
- DevOps: gsh: Go+ DevOps Tools
- Unit Test: classfile: Unit Test
- Mechanism: What's Classfile
- Mechanism: Go+ Classfiles
Through this example you can learn how to implement dialogues between multiple actors.
Here are some codes in Kai.spx:
onStart => {
say "Where do you come from?", 2
broadcast "1"
}
onMsg "2", => {
say "What's the climate like in your country?", 3
broadcast "3"
}
We call onStart
and onMsg
to listen events. onStart
is called when the program is started. And onMsg
is called when someone calls broadcast
to broadcast a message.
When the program starts, Kai says Where do you come from?
, and then broadcasts the message 1
. Who will recieve this message? Let's see codes in Jaime.spx:
onMsg "1", => {
say "I come from England.", 2
broadcast "2"
}
Yes, Jaime recieves the message 1
and says I come from England.
. Then he broadcasts the message 2
. Kai recieves it and says What's the climate like in your country?
.
The following procedures are very similar. In this way you can implement dialogues between multiple actors.
See spx: A Go+ 2D Game Engine for more details.
Demo of serving static files and ability to handle dynamic GET/POST requests:
static "/foo", FS("public")
static "/" # Equivalent to static "/", FS("static")
get "/p/:id", ctx => {
ctx.json {
"id": ctx.param("id"),
}
}
run ":8080"
If you run it and visit http://localhost:8080/p/123, you will get:
{"id":"123"}
See yap: Yet Another HTTP Web Framework for more details.
Yes, now you can write shell script
in Go+. It supports all shell commands.
Let's create a file named ./example.gsh
and write the following code:
mkdir "testgsh"
Don't need a go.mod
file, just enter gop run ./example.gsh
directly to run.
See gsh: Go+ DevOps Tools for more details.
- A static typed language.
- The simplest engineering language that can be mastered by children (script-like style).
- Performance: as fast as Go (Go+'s main backend compiles to human-readable Go).
- Fully compatible with Go and can mix Go/Go+ code in the same package (see Go/Go+ hybrid programming).
- No DSL (Domain Specific Language) support, but SDF (Specific Domain Friendliness).
- Support Go code generation (main backend) and bytecode backend (REPL: see iGo+).
- Simplest way to interaction with C (cgo is supported but not recommended).
- Powerful built-in data processing capabilities.
winget install goplus.gop
sudo bash -c ' echo "deb [trusted=yes] https://pkgs.goplus.org/apt/ /" > /etc/apt/sources.list.d/goplus.list'
sudo apt update
sudo apt install gop
sudo bash -c 'echo -e "[goplus]\nname=Go+ Repo\nbaseurl=https://pkgs.goplus.org/yum/\nenabled=1\ngpgcheck=0" > /etc/yum.repos.d/goplus.repo'
sudo yum install gop
Install via brew
$ brew install goplus
Note: Requires go1.18 or later
git clone https://github.com/goplus/gop.git
cd gop
# On mac/linux run:
./all.bash
# On Windows run:
all.bat
- vscode: Go/Go+ for Visual Studio Code
The Go+ project welcomes all contributors. We appreciate your help!
For more details, see Contributing & compiler design.
If you like or are using Go+ to learn or start your projects, please give it a star. Thanks!