专栏首页光城(guangcity)话不多说,开学Go

话不多说,开学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获取命令行参数

上述例子:

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)
}

单元测试

如何编写测试程序?

  • 源码以_test结尾:xxx_test.go
  • 测试方法名以Test开头:
func 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.Go语言不允许隐式类型转换
  • 2.别名和原有类型也不能进行隐式转换

类型的预定义值

1.math.MaxInt64
2.math.MaxFloat64
3.math.MaxUint32

指针类型:

  • 1.不支持指针运算
  • 2.string是值类型,其默认的初始值为空字符串,而不是nil

上述例子:

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
}

本文分享自微信公众号 - 光城(guangcity),作者:lightcity

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面向对象之this指针与类中的枚举类型

    相信在坐的很多人,都在学Python,对于Python来说有self,类比到C++中就是this指针,那么下面一起来深入分析this指针在类中的使用!

    公众号guangcity
  • Hive部署及两种启动方式

    Facebook解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会。

    公众号guangcity
  • Go那些事之HelloWorld结构

    本节主要阐述一个HelloWorld例子与C/C++、JAVA的不同之处,并加深学习理解。

    公众号guangcity
  • go 学习笔记之值得特别关注的基础语法有哪些

    在上篇文章中,我们动手亲自编写了第一个 Go 语言版本的 Hello World,并且认识了 Go 语言中有意思的变量和不安分的常量.

    雪之梦技术驿站
  • Go语言学习(六)| 函数

    如果有连续若干个参数,它们的类型一致,那么我们无须一一罗列,只需在最后一个参数后添加该类型。例:

    Mervyn
  • 【云架构】云安全和隐私:法律合规与风险管理指南,第2部分

    在这个由两部分组成的系列文章中,法律专家Robert McHale是“数据安全和身份盗窃:影响您的业务的新隐私法规”的作者,它提供了与云计算相关的法律安全和隐私...

    首席架构师智库
  • Android基础-Bitmap加载

    Android开发中比较需要注意的是内存的消耗,而在平时开发中经常会遇到内存占用大的情况是对Bitmap的处理。 其中的基础之一是如何在保证不消耗过大内存的情况...

    PhoenixZheng
  • 三星牵手Verizon于明年6月推5G智能手机,“首发”之战蓄势待发

    据外媒报道,美国运营商Verizon和三星宣布,双方计划在2019年6月份推出一款5G智能手机。

    镁客网
  • Python 列表解析 字典解析

    简单、
  • spark streaming消费指定的topic和partition并手动更新offset

    shengjk1

扫码关注云+社区

领取腾讯云代金券