开始入坑Go,学习来自极客时间上的Go从入门到精通。
最近不怎么更文了,有如下原因:
对于关注本公众号的同学,说声抱歉!大家可以点击公众号菜单来选择自己喜欢的文章,也欢迎后台留言!
包管理
Go中包实际上就是文件夹!
退出返回值
与其他编程语言的差异:
Go中main函数不支持任何返回值
通过os.Exit来返回状态
os.Exit(0) 正常退出
os.Exit(-1)异常退出
main函数传参
main函数不支持传入参数
func main(arg []string)错误!在程序中直接通过os.Args获取命令行参数
上述例子:
package main
import (
"fmt"
"os"
)
func main() {
/*
light@city:~/server/go_learning/src/ch1$ go run hello.go guangcheng
Hello World! guangcheng
*/
if len(os.Args) > 1 {
fmt.Println("Hello World!", os.Args[1])
}
os.Exit(0)
}
单元测试
如何编写测试程序?
xxx_test.gofunc TestXXX(t * testing.T){...}
单元测试例子:
package try_test
import "testing"
/*
编写测试程序
1.源码以_test结尾:xxx_test.go
2.测试方法名以Test开头:func TestXXX(t * testing.T){...}
*/
func TestFirst(t *testing.T) {
t.Log("My first try!")
}
类型
常量
常量定义:快速设置连续值
上述例子:
package fib
import (
"testing"
)
//go test -v fib_test.go -timeout 30s
//`-v` 打印出日志到终端。`-timeout`测试限制时间。
var c int
func TestFibList(t *testing.T) {
//初始化赋值,但没有使用这些变量,就会编译错误
// var a int = 1
// var b int = 1
// var (
// a int = 1
// b = 1 //类型推断
// )
a := 1
b := 1
c = 1 //全局变量赋值
//单元测试中一般用Log
// fmt.Print(a)
t.Log(a)
for i := 0; i < 5; i++ {
// fmt.Print(" ", b)
t.Log(" ", b)
tmp := a
a = b
b = tmp + a
}
// fmt.Println()
}
func TestExchange(t *testing.T) {
a := 1
b := 2
// tmp := a
// a = b
// b = tmp
a, b = b, a //一句对多个变量赋值
t.Log(a, b)
}
类型转化:
类型的预定义值
1.math.MaxInt64
2.math.MaxFloat64
3.math.MaxUint32
指针类型:
上述例子:
package type_test
import (
"testing"
)
type MyInt int64
func TestImplicit(t *testing.T) {
// var a int = 1
var a int32 = 1
var b int64
//不支持隐式类型转换
// b = a // cannot use a (type int) as type int64 in assignment
// b = a //cannot use a (type int32) as type int64 in assignment
//可以显式转换
b = int64(a)
var c MyInt
//别名和原有类型也不能进行隐式转换
// b = c //cannot use c (type MyInt) as type int64 in assignment
t.Log(a, b, c)
t.Log(a, b)
}
func TestPoint(t *testing.T) {
a := 1
aPtr := &a
// aPtr += 1 不支持指针运算
t.Log(a, aPtr)
t.Logf("%T %T", a, aPtr) //int *int
}
//string是值类型,其默认的初始值为空字符串,而不是nil
func TestString(t *testing.T) {
var s string
t.Log("*" + s + "*") //**
t.Log(len(s)) //0
}