Go語言編程(一)介紹

語言特性

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 調試
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 01.{ 換行: Opening Brace Can't Be Placed on a Separate Lin...
    碼農不器閱讀 2,425評論 0 14
  • 概述 GDB是一個由GNU開源組織發布的、UNIX/Linux操作系統下的、基于命令行的、功能強大的程序調試工具。...
    咕咕鷄閱讀 20,980評論 0 8
  • 第一章五個程序 都很好!但是初學編程/沒有其他語言基礎的不容易看懂。 記一遍不熟悉的東西: who = strin...
    暗黑破壞球嘿哈閱讀 1,449評論 0 10
  • fmt格式化字符串 格式:%[旗標][寬度][.精度][arg索引]動詞旗標有以下幾種:+: 對于數值類型總是輸出...
    皮皮v閱讀 1,132評論 0 3
  • 經常被問:讀書有什么用?這很難回答,好像真的沒什么用,不會給你黃金屋和顏如玉,只能給你近視眼和頸椎病,所以才有窮書...
    冰紅茶麻麻閱讀 377評論 0 16