Go语言编程(一)介绍

2017-01-06  本文已影响0人  jeepshen

语言特性

Go语言作为一门静态类型语言,有很多新的特性
1. 自动垃圾回收
2. 更丰富的内置类型,增加了字典map ,数组切片slice
3. 函数多返回值
4. 错误处理: defer panic recover
5. 匿名函数和闭包
6. 并发编程
7. 反射
8. 语言交互性

虽然不太了解这些特性,但是之后应该会逐步深入,此处先记下。

第一个程序

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

环境:debian 8.6 + vscode,安装golang apt isntall golang

程序注意的地方:
- package 声明: 表示该代码所属的包,go 语言中最基本的分发单位
- import 导入改程序所依赖的所有包
- main : 主函数既不能有参数,也不能有返回值

编译环境

`go version`

`go version go1.3.3 linux/amd64`

`go build hello.go`

`go run hello.go`

工程管理

开发一个计算器的工程项目:


- src: 源码文件夹
- pkg: 包被安装到这里
- bin: 生成的二进制文件

源码

1. calc.go
//Package main
package main

import "os"
import "fmt"

import "./simplemath"
import "strconv"

//Usage 匿名函数?
var Usage = func() {
    fmt.Println("USAGE: calc command [arguments] ...")
    fmt.Println("\nThe command are:\n\tadd\tAddition of two values.\n\tsqrt\tSquare")
}

func main() {
    args := os.Args
    if args == nil || len(args) < 2 {
        Usage()
        return
    }

    switch args[1] {
    case "add":
        if len(args) != 4 {
            fmt.Println("Usage: calc add <integer1> <integer2>")
            return
        }
        v1, err1 := strconv.Atoi(args[2])
        v2, err2 := strconv.Atoi(args[3])
        if err1 != nil || err2 != nil {
            fmt.Println("Usage: calc add <integer1> <integer2>")
            return
        }
        ret := simplemath.Add(v1, v2)
        fmt.Println("Result: ", ret)
    default:
        //Usage()
    }
}

2. /simplemath/add.go
//Package simplemath...

package simplemath

// Add a and b
func Add(a int, b int) int {
    return a + b
}

3. /simplemath/add_test.go
//Package simplemath
package simplemath

import "testing"

func TestAdd(t *testing.T) {
    r := Add(1, 2)
    if r != 3 {
        t.Errorf("Add(1,2) failed. Got %d, expecrted 3.\r", r)
    }
}
4. 生成,运行。注:生成的二进制文件,不依赖开发环境,一次编译到处运行?

问题追踪和调试

go使用尽量简单的语法,和尽量完善的库。如果出现了问题,需要调试,主要两种跟踪方法:打印日志和GDB逐步调试。
  1. 打印日志
    fmt.Printf 和 fmt.Println
  2. GDB 调试
上一篇下一篇

猜你喜欢

热点阅读