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.gopsudo bash -c ' echo "deb [trusted=yes] https://pkgs.goplus.org/apt/ /" > /etc/apt/sources.list.d/goplus.list'
sudo apt update
sudo apt install gopsudo 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 gopInstall via brew
$ brew install goplusNote: 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!