抽空看了一下go,顺便做了个总结。话说go的语法还真感觉有点特别,而且抽象层次更高,对初学者可能障碍更多。还是按照之前的套路,我做了一个简化版的go语言语法小结,仅供参考。
变量声明定义的三种方式
var a int a = 10 var a = 10 // 只能用在函数体内 a := 10
数据类型
bool
var b = true if b { fmt.Println("This is true") }
slice
/* Format 1 */ var p = []int{2, 3, 5, 7, 11, 13} fmt.Println("p ==", p) for i := 0; i < len(p); i++ { fmt.Printf("p[%d] == %dn", i, p[i]) } /* Format 2 */ var a []int if a == nil { fmt.Println("nil!") } a = make([]int, 5, 5) a[0] = 1 /* Format 3 */ b := make([]int, 0, 5)
map
/* Create a map */ type Vertex struct { Lat, Long float64 } var m map[string]Vertex m = make(map[string]Vertex) /* Assign the value */ m["Bell Labs"] = Vertex{ 40.68433, -74.39967, } m["AT&T Labs"] = Vertex{ 40.68433, -74.39967, } fmt.Println(m["Bell Labs"]) /* Lookup the value with key */ v, ok := m["AT&T Labs"] if ok { fmt.Println(v) } else { fmt.Println("No such element") } /* Delete a key */ delete(m, "AT&T Labs") v, ok = m["AT&T Labs"] if ok { fmt.Println(v) } else { fmt.Println("No such element") }
控制语句
for
/* same as for in c */ var sum int sum = 0 for i := 0; i < 10; i++ { sum += i } fmt.Println(sum) /* similar with while in c */ sum = 1 for sum < 1000 { sum += sum } fmt.Println(sum) /* loop on range */ var a [10]int for i, val := range a { fmt.Printf("Value[%d] %dn", i, val) } for _, val := range a { fmt.Println("Value ", val) }
if
if age > 18 { fmt.Println("Adult") } else if age > 3 { fmt.Println("Child") } else { fmt.Println("Elphan") }
函数定义
函数
func sum(a int, b int) int { return a + b }
多返回值
func swap(x, y string) (string, string) { return y, x } a, b = swap("hello", "world") fmt.Println(a, b)
多返回值2
func concat(x, y string) (int, string) { return len(x + y), x + y } length, _ = concat("hello ", "world") fmt.Println(length)
闭包函数
如果对c语言有深入研究,闭包函数其实就是函数+静态变量。
package main import "fmt" func fibonacci() func() int { /* use -1 to indicate the value is uninitialized */ gp, p, fib := -1, -1, 0 return func() int { if p == -1 { p = 0 return 0 } else if gp == -1 { p = 1 gp = 0 return 1 } fib = gp + p gp = p p = fib return fib } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }
方法
type Circle struct { radius float64 } /* Really magic */ func (c Circle) getArea() float64 { return 3.14 * c.radius * c.radius } var c1 Circle c1.radius = 10.0 fmt.Println(c1.getArea())
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论