原创 lightcity 光城 2019-03-22
开学Go
0.导语
开始入坑Go,学习来自极客时间上的Go从入门到精通。
最近不怎么更文了,有如下原因:
一个大的项目
一个算法
机器学习与深度学习特殊原因暂缓
其他等等
对于关注本公众号的同学,说声抱歉!大家可以点击公众号菜单来选择自己喜欢的文章,也欢迎后台留言!
1.Go学习
包管理
Go中包实际上就是文件夹!
1.必须是main包 package main
2.必须是main方法:func main
3.文件名不一定是main.go
退出返回值
与其他编程语言的差异:
Go中main函数不支持任何返回值
通过os.Exit来返回状态
os.Exit(0) 正常退出
os.Exit(-1)异常退出
main函数传参
main函数不支持传入参数
func main(arg []string)
错误!在程序中直接通过os.Args获取命令行参数
上述例子:
1package main
2import (
3 "fmt"
4 "os"
5)
6func main() {
7 /*
8 light@city:~/server/go_learning/src/ch1$ go run hello.go guangcheng
9 Hello World! guangcheng
10 */
11 if len(os.Args) > 1 {
12 fmt.Println("Hello World!", os.Args[1])
13 }
14 os.Exit(0)
15}
单元测试
如何编写测试程序?
源码以_test结尾:
xxx_test.go
测试方法名以Test开头:
1func TestXXX(t * testing.T){...}
单元测试例子:
1package try_test
2import "testing"
3/*
4编写测试程序
51.源码以_test结尾:xxx_test.go
62.测试方法名以Test开头:func TestXXX(t * testing.T){...}
7*/
8func TestFirst(t *testing.T) {
9 t.Log("My first try!")
10}
类型
赋值可以自动类型推断
在一个赋值语句中可以对多个变量进行同时赋值
常量
常量定义:快速设置连续值
上述例子:
1package fib
2
3import (
4 "testing"
5)
6//go test -v fib_test.go -timeout 30s
7//`-v` 打印出日志到终端。`-timeout`测试限制时间。
8var c int
9
10func TestFibList(t *testing.T) {
11 //初始化赋值,但没有使用这些变量,就会编译错误
12 // var a int = 1
13 // var b int = 1
14 // var (
15 // a int = 1
16 // b = 1 //类型推断
17 // )
18 a := 1
19 b := 1
20 c = 1 //全局变量赋值
21 //单元测试中一般用Log
22 // fmt.Print(a)
23 t.Log(a)
24 for i := 0; i < 5; i++ {
25 // fmt.Print(" ", b)
26 t.Log(" ", b)
27
28 tmp := a
29 a = b
30 b = tmp + a
31 }
32 // fmt.Println()
33}
34func TestExchange(t *testing.T) {
35 a := 1
36 b := 2
37 // tmp := a
38 // a = b
39 // b = tmp
40 a, b = b, a //一句对多个变量赋值
41 t.Log(a, b)
42}
类型转化:
1.Go语言不允许隐式类型转换
2.别名和原有类型也不能进行隐式转换
类型的预定义值
11.math.MaxInt64
22.math.MaxFloat64
33.math.MaxUint32
指针类型:
1.不支持指针运算
2.string是值类型,其默认的初始值为空字符串,而不是nil
上述例子:
1package type_test
2import (
3 "testing"
4)
5type MyInt int64
6func TestImplicit(t *testing.T) {
7 // var a int = 1
8 var a int32 = 1
9 var b int64
10 //不支持隐式类型转换
11 // b = a // cannot use a (type int) as type int64 in assignment
12 // b = a //cannot use a (type int32) as type int64 in assignment
13 //可以显式转换
14 b = int64(a)
15 var c MyInt
16 //别名和原有类型也不能进行隐式转换
17 // b = c //cannot use c (type MyInt) as type int64 in assignment
18 t.Log(a, b, c)
19 t.Log(a, b)
20}
21func TestPoint(t *testing.T) {
22 a := 1
23 aPtr := &a
24 // aPtr += 1 不支持指针运算
25 t.Log(a, aPtr)
26 t.Logf("%T %T", a, aPtr) //int *int
27}
28//string是值类型,其默认的初始值为空字符串,而不是nil
29func TestString(t *testing.T) {
30 var s string
31 t.Log("*" + s + "*") //**
32 t.Log(len(s)) //0
33}
2.作者的话
关于Go学习,后续继续更新,敬请期待,欢迎转发,收藏,留言!
有疑问加站长微信联系(非本文作者)