1. 支援多CPU架構,友善部署.
2. 支援協程goroutine,效率比程序/線程要高許多。
3. 自動垃圾回收
4. 函數多傳回值
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "Runoob")
fmt.Println(a, b)
}
5. 匿名函數和閉包
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i++
return i
}
}
func main(){
nextNumber := getSequence()
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
}
6. 類型和接口
package main
import "fmt"
type User struct {
Id int
Name string
Amount float64
}
func main() {
var i interface{}
i = "string"
fmt.Println(i)
i = 1
fmt.Println(i)
i = User{Id: 2, Name: "Greg", Amount: 30.0}
fmt.Println("Name=",i.(User).Name,",Amount=",i.(User).Amount)
i = &User{Id: 2}
i.(*User).Id = 15
fmt.Println("Id=",i.(*User).Id)
}
7. Array,slice,map等内置基本資料結構,支援清單和字典更為輕松。
8. 支援遞歸函數
9. 支援函數作為參數
Go 語言可以很靈活的建立函數,并作為另外一個函數的實參。
package main
import (
"fmt"
"math"
)
func main(){
/* 聲明函數變量 */
getSquareRoot := func(x float64) float64 {
return math.Sqrt(x)
}
/* 使用函數作為參數 */
fmt.Println(getSquareRoot(9))
}
10. 指針和C一樣
package main
import "fmt"
func main() {
var a int= 20 /* 聲明實際變量 */
var ip *int /* 聲明指針變量 */
ip = &a /* 指針變量的存儲位址 */
fmt.Printf("a's address: %x\n", &a )
/* 指針變量的存儲位址 */
fmt.Printf("ip: %x\n", ip )
/* 使用指針通路值 */
fmt.Printf("ip's value: %d\n", *ip )
}
//指針數組:var ptr [MAX]*int;
//指針的指針:var pptr **int;
//指針參數:
//func swap(x *int, y *int) {
//}