Golang实践录:简单的代码片段

本文列出简单的代码片段及基础知识。

简单说明


  • import的包从src算,如果在子目录,一定要添加子目录路径。如import “a”,则a一定在src目录下。
    同一个目录只能有一个包名。但可以有多个文件(使用同一包名)。
    没有被使用的包,要删除或注释,否则编译不通过。
    包目录不能与系统包名相同,如系统有sync包,不能再创建sync目录。
    除for等外,逗号不是必须的,看个人习惯。
    没有使用的变量,编译不通过。

  • 测试
    文件名带_test的是测试专用,不能用go run来执行。

编码小结

右大括号{在行尾,如在新一行,编译不通过。
一般使用小写+大写方式。
函数:大写 导出,小写 包内(跨文件)可见。
变量:大写导出,小写包内可见。专用名称,可大写或小写。
接口、结构体:大写(一说小+大)。
文件名、包名:小写。

可带可不带分号,习惯性带分号(;)亦可。
大括号在行尾、if/for/没有小括号,但必须添加大括号。
如果引入的包不使用,又不想删除(后面可能会用到),可以注释掉,也可以调用这些包的函数,放到函数中,但不调用这个函数。
格式要求严格,如a为uint16, b为[]bytea = b[0]出错,需要转换a = uint16(b[0])。另外,a = -1也出错,因为是无符号的。

打印:

1
2
fmt.Printfln("Hello world");
fmt.Printf("Hello %v\n", "world");

代码片段(用以切换语言时看):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

有传入、输出参数
func sqrt(x float64) float64 {
ret := 1.0
for i := 0; i < 10; i++ {
ret = ret - (ret*ret - x) / 2 / ret
}

return ret
}

"类"
package class

import (
true"fmt"
)

// 空结构体
type SimpleClass struct {
// nothing
}

// "类"的形式
func (p *SimpleClass) printf() {
truefmt.Printf("%v\n", "hello world");
}

// 大写,包外可见
func SimpleTest() {

c := SimpleClass{};
c.printf();
}

主函数文件:
package main

import (
"class"
)
func main() {
class.SimpleTest();
}


if bit0 == 0 { // 注释
return 'I';
} else if bit0 == 1 && bit1 == 0 {
return 'S';
} else if bit0 == 1 && bit1 == 1 { // 注释
return 'U';
} else { // 其它
return 0;
}


打印变量类型:
"reflect"
fmt.Println(reflect.TypeOf(var))

组装字符串示例:

1
2
3
4
5
// 要点:补齐字段的用法
// 年月日时分秒
return fmt.Sprintf("%.4v%.2v%.2v%.2v%.2v%.2v",
year, month, day,
hour, minute, seconds);

同一程序代码,生成不同文件执行不同函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import (
"fmt"
"os"
"path/filepath"
"strings"
)

func main() {
filename := filepath.Base(os.Args[0])
if strings.Contains(filename, "send") {
send()
} else if strings.Contains(filename, "recv") {
recv()
} else {
fmt.Println("do nothing")
}
}

八、小实验

自实现模块A,存入github.com,A使用到第三方库,go get获取A会自动检测第三方库,如无则自动下载。

九、常见错误

1
main.go:8:5: found packages a (a.go) and main (a1.go) in e:\project\golang\src\hello\a

原因:同一个目录下,有2个包名。
解决:只保留一个包名,如必须有2个,则移到另一目录。

PS:工作中切换语言时,先看几眼本文件,以便于思维的切换。