chaos2go1 1.0.120510 documentation

Version: 1.0.120510

整备

如果真心没有学习过 Go ,抄过了 Hollo World 也许没法儿继续了,,,

  • 不过,其实, Go 真心好学习,最多两小时,就可以完成各种常见任务了,,,
  • 但是…

前题!

有前题的吼!

  • 至少有过 C/C++/C# 什么的任何一种编译型语言的体验
  • 又或是,至少有任何一种开发语言的经验,明白计算机程序的基本元素
  • 这样才好快速复用起以往的经验

See also

教程推荐

参考: Go语言教程 - Go语言Wiki

Go 精粹

/*
    多行
    注释
*/

package main    // 每个文件,必须声明为包

import (        // 统一在头部邮件 各种包的加载
    "os"
    "flag"      // 单行注释
)

var omitNewline = flag.Bool("n", false, "don't print final newline")

/*  变量的声明,以下都是合法的 ;-)
    var s string = ""
    var s = ""
    s := ""

    常量可以是:
    var a uint64 = 0  // a的类型为uint64,值为0
    a := uint64(0)    // 与以上相同;使用了一次“转换”
    i := 0x1234       // i获得了默认的类型:int
    var j int = 1e6   // 合法的 - 1000000是一个int
    x := 1.5          // float64类型,这是浮点常量的默认类型
    i3div2 := 3/2     // 整数除法 - 结果是1
    f3div2 := 3./2.   // 浮点数除法 - 结果是1.5
*/

const (         // 容器 ;-)
    Space   = " "
    Newline = "\n"
)

func main() {   // { 必须跟在行尾,单起一行,将编译不过!-)
    flag.Parse() // Scans the arg list and sets up flags
    var s string = ""
    for i := 0; i < flag.NArg(); i++ {
    // for 是唯一的循环形式,也是唯一可能出现 ; 的语句
        if i > 0 {
            s += Space
        }
        s += flag.Arg(i)
    }
    if !*omitNewline {
        s += Newline
    }
    os.Stdout.WriteString(s)
}

另外, 参考 QCon2012北京的講演: go,互联网时代的c语言 许式伟 可以了解各种 Go 的核心特性;

就笔者的体验,最爽直的有一点就是 Go 的形式非常人性!

     +--------------------+
     | +---+              |
     | |+-+|              |
     | |^ ||              |
char *(*fp)( int, float *);
 ^   ^ ^  ||              |
 |   | +--+|              |
 |   +-----+              |
 +------------------------+
读作:
  • fp是一个指针,
  • 指向一个函数(螺旋路径被fp右边的括号封死,绕到左边的`*`)
  • 有一个整形和一个浮点指针参数(两个参数一起读因为他们被一个括号括起来了)
  • 并返回一个指针,指向一个字符

何其蛋痛!!! ~ 这才回想起当年,为毛使用 Turbo C++ 时,永远的挫败感了…

对等的 Go 声明就有爱的多…

f func(func(int,int) int, int) func(int, int) int
读作:
  • f是一个函数
  • 他的参数包括一个函数(有两个整数参数并返回一个整数),和一个整数,
  • 并且返回一个函数,他有两个整数参数并返回一个整数

这样,思想和书写统一,少了很多转化,舒服很多 ;-)