天天看點

Golang特色與優勢

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) {
//}
           

繼續閱讀