话不多说,开学Go

开学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学习,后续继续更新,敬请期待,欢迎转发,收藏,留言!

640?wx_fmt=png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值