1. 变量
var <名称> 类型
2. 初始化
var v1 int = 10
v3 := 10 // v3 不可以是已经声明过的变量
3. 忽略返回值
_, _, Nick = GetName()
4. 常量 & iota
const Pi float64 = 3.1415
const (
size int64 = 1024
eof = -1
)
const a, b, c = 3, 5, "XX"
const (
v1 = 1 << iota
v2
v3
) // iota 在下一个 const 之前, 从 0 开始递增
5. os.GetEnv("HOME")
6.大写开头,包外可见
7. uintptr
浮点比较 -- 使用精度差
8. 复数
v = Complex(3.1, 3.2)
real(v) == 3.1
imag(v) == 3.2
9.字符串,不能以 [x] 的方式赋值
10. 字符串类型
byte --- uint8
rune ---- Unicode 字符
11. 数组声明
var array_ex [32]byte = [32]byte { 1, 2, ... }
len()
为值类型,在 fun 内部修改,不影响 fun 外部值
12. 数组切片
var myS []int = array_ex[:5]
var mySl = make([]int, 5)
mySli := []int{1, 2, 3}
13. len / cap / append
len(slice) = 元素个数
cap(slice) = 已经分配的内存
.append()
myS = append(myS, 1, 2, 3)
myS2 := []int{8, 9, 10}
myS3 = append(myS, myS2...) /// 打散 myS2 , 以多个元素加入 , append 参数需求
14.copy()
copy(s1, s2) // 以较小者来决定复制的大小
15.
map
var personDB map[string] PersonInfo
personDB = make(map[string] PersonInfo)
personDB["123"] = PersonInfo{"123", "Tom", "Room 203"}
person, ok := personDB["123"]
if ok XXX
myMap = make(map[string] PersonInfo, 100)
delete(myMap, "123")
16.
if return else return
需要一个最终的 return
17. fallthrough
switch X {
case 0:
....
fallthrough // 继续 case
default:
}
18. for { 无限循环
没有 while 语句
19. goto
20. 函数
func <func-name> (var ...) (ret ...) { ...
21. 不定参数
func myFunc(args ...int) {
for _, arg := range args {
}
}
调用
myFun ( [] int {1, 2, 3, 5} )
参数传递:
fun A ( args ...int) {
B(args...)
C(args[1:]...)
}
22. 任意类型
func Printf(format string, args ...interface{}) {
func MyPrint ( args ...interface {} ) {
for _, arg := range args {
switch arg.(type) {
case int:
case string:
default:
}
}
}
23. 多返回值
携带 Error
_ : 忽略返回值
24. 匿名函数
f := func ( a, b int, z float64) bool {
}
func ( ch chan int) {
ch <- ACK
}( reply_chan)
25. 闭包
func main() {
var j int = 5
a := func( ) ( func() ) { // 参数为空,返回值为一个函数
var i int = 10
return fun() {
} ()
}
a ()
j *= 2
a ()
26. errno
27. defer fun () { // 做复杂的清理工作
// 无论怎样都会被调用
28. panic () recover()
panic () 立即终止,返回调用 , defer 会被调用
recover() 处理 panic 异常
defer func() {
if r := recover(); r != nil {
log.Printf("Return : %v", r)
} ( )
}
29. flag 包 : 命令行参数解析
X = flag.String(" ... ")
flag.Parse() // 在 main 里调用, 参数解析到的值到 X 里
30. file, err := os.Open( )
defer file.Close()
values = make( []int, 0)
for {
line, isPrefix, err1 := br.ReadLine()
err1 != nil; err1 != io.EOF
}
str := string(line)
value, err1 := strconv.Atoi(str)
if err1 != nil ...
values = append(values, value)
31. func writeValues( values [] int, outfile string)
file, err := os.Create( outfile )
str := strconv.Itoa( value)
32. file, err := os.Open(infile)
defer file.Close()
br := bufio.NewReader(file)
line, isPrefix, err1 := br.ReadLine()
err1 != nil, err1 != io.EOF
t1 := time.Now()