一、GO与GO+的直观区别
GO+在Go的基础上做了很多优化,Go+ 提供了更简单优雅的语法,比 Go 更接近自然语言。
下面是两者打印"hello world"的区别:
Go
package main import "fmt" func main() { fmt.Println("hello world") }
Go+
println "hello world"
一下就有了python的感觉了,是不是很方便! 下面简单讲解一下GO+的字面量
二、GO+的字面量
1. 什么是字面量
字面量也就是我们常说的变量的值。
比如int a=1
那1
就是字面量;string b="ab"
;ab
就是字面量。
在整型、字符、浮点这些字面量中,GO+的字面量和Go的字面量区别不大
在复数字面量(列表、map、切片等)中他们差别就体现出来了
2. 切片字面量两者区别
GO
x := [2]float{1, 3.4} // []float64 y := [1]int{1} // []int z := [2]interface{}{1+2i, "xsw"} // []interface{}
GO+
x := [1, 3.4] // []float64 y := [1] // []int z := [1+2i, "xsw"] // []interface{}
3. map字面量两者区别
x :=map[string] float64 {"Hello": 1, "xsw": 3.4} // map[string]float64 y := map[string] interface{}{"Hello": 1, "xsw": "Go+"} // map[string]interface{} z := map[string] int{"Hello": 1, "xsw": 3} // map[string]int empty := map[string]interface{}{} // map[string]interface{}
GO+
x := {"Hello": 1, "xsw": 3.4} // map[string]float64 y := {"Hello": 1, "xsw": "Go+"} // map[string]interface{} z := {"Hello": 1, "xsw": 3} // map[string]int empty := {} // map[string]interface{}
4. 列表
GO
a :=list.New() a.PushBack(1) a.PushBack(2) a.PushBack(3)
GO+
arr := [1, 2,3 ]
5. 结构体
GO+
type Config struct { Dir string Level int } func foo(conf *Config) { // ... } foo({Dir: "/foo/bar", Level: 1})
这里 foo({Dir: "/foo/bar", Level: 1}) 相当于foo(&Config{Dir: "/foo/bar", Level: 1}) ,但是,您不能替换foo(&Config{"/foo/bar", 1})为foo({"/foo/bar", 1}),因为将其视为 {"/foo/bar", 1} 结构文字会令人困惑。
您还可以在 return 语句中省略结构类型。例如:
type Result struct { Text string } func foo() *Result { return {Text: "Hi, Go+"} // return &Result{Text: "Hi, Go+"} }
GO+在线练习地址:https://play.goplus.org/