Go语言学习之初识

作者: 有财君 | 来源:发表于2019-05-06 23:45 被阅读11次

1. 第一个程序

作为一个DBA,我平时用的比较多的语言是Java和Python,Java用来写后端存储层代码,Python用来写一些小工具辅助工作。

我是首先学会了Java,因此Python对我来说有几点难以忍受的问题:

  • 弱类型语言,很多时候我不知道一个函数到底返回了什么,不看源码不知道;
  • 依赖不像Java一样可以用maven这样的工具整合在一个jar包里(或许是我不会)。

因此我决定学一下Go语言,其实这些和上面我是否能忍受Python没多大关系,我就是想学Go而已。

按理说我此时应该写一段Hello World代码表示我现在开始学习Go语言了,但是我偏不。

因为我又不是零基础,没有必要写一个Hello World来体验一门语言的乐趣,何况Hello World一点乐趣都没有。

用过Java的人都知道Junit,用来做单元测试的,Go也有类似的东西,那么下面我的第一段代码就要用Test来写:

package ch1

import "testing"

func TestGo(t *testing.T) {
    t.Log("Hello, World!")
}

其实我现在也不知道TestGo函数里的指针到底是干啥的,但是我以后一定会知道。这段代码很简单:

  1. 首先声明了包,这一点和Java很像;
  2. 然后引入了一个包testing,这一点和Java还是很像;
  3. 之后声明了一个函数,函数的参数t有一个Log方法,这个方法可以打印;
  4. 参数t是一个指针类型(不知道这样说对不对,我依稀对C语言有点印象,就借用一下说法)。
测试结果

上图是这段测试代码的测试结果。

2. 变量和常量

写代码哪有不操作变量的?Go语言中,使用var关键字来声明变量,比如:

var a int
var b bool

这种方式很像Java,不过就是多了var关键字并且将类型写在了最后,既然如此像Java,那么一定还支持这种形式的声明:

var a int = 1
var b bool = false

当然,Go语言还支持自动推断类型,比如:

func example() {
    a:=1
}

系统会自动推断a的类型,但是注意,我这里特意写了一个函数,不是我闲得慌,是因为自动推断类型的:=只能用于函数内部。

当然我自己很不喜欢自动推断类型,不过我还是很喜欢Go的另外一种声明方式:

var i, j int = 1, 2

这样代码能短小不少,但是我个人觉得这种声明方式如果变量多,可读性就会变得比较差。

至于Go语言的基本类型,可以查阅相关资料,我现在也没有记完全,还是不在这里献丑了。

Go是支持常量定义的,使用关键字const就可以,常量是不支持:=自动推断的。Go有一个iota的东西,在定义常量的时候异常好用:

package ch1

import "testing"

const (
    a = iota + 1
    b
    c
    d
    e
)

func TestGo(t *testing.T) {
    t.Log(a, b, c, d, e)
}

猜猜这段代码会输出什么?

答案是1 2 3 4 5,但是实际上我并没有给a以外的常量赋值,这就是iota的好处了。iota是常量计数器,出现的时候会被置为0,因此我上面那个加1操作其实就是将数值1赋值给了a。

3. 大学时程序设计课用过的例子

大学的程序设计课最喜欢的例子之一就是九九乘法表了吧,用于介绍多层循环练手用的,虽然我还没有怎么详细的看过循环,但是写一个还是没有问题的,因为我没有研究过Log的格式化输出,那么还是用命令行输出吧。

代码如下:

package ch1

import (
    "fmt"
    "testing"
)

func multiplication() {
    for i := 1; i < 10; i++ {
        for j := 1; j <= i; j++ {
            fmt.Printf("%d X %d = %d ", i, j, i*j)
        }
        fmt.Println()
    }
}

func TestGo(t *testing.T) {
    multiplication()
}

Go的循环只有for一种,但是有多种组合方式,也能做while循环,Go的初衷是减少关键字。

这里的格式化terminal输出,还是让我回忆起了C语言,和我遥远的大学岁月。

还有一道题挺有意思,就是斐波那契数列:

1, 1, 2, 3, 5, 8, 13

每一个值都是前两个值的和,那么代码如何实现呢?

package ch1

import (
    "fmt"
    "testing"
)

func fib() {
    var a, b int = 1, 1
    var fib_arr [7]int
    //fmt.Println(a, b)
    fib_arr[0], fib_arr[1] = a, b
    for i := 0; i < 5; i++ {
        tmp := a + b
        a = b
        b = tmp
        fib_arr[i+2] = tmp
    }
    for _, v := range fib_arr {
        fmt.Printf("%d ", v)
    }
}

func TestGo(t *testing.T) {
    fib()
}

这里用到了数组,数组这东西我一直不太喜欢用,Java中我更倾向于使用容器,不知道Go语言中有没有一样好用的容器。

4. 小小总结

Go,如果运气好,学习Go的时候能把我原来一直搞不懂的C指针问题搞明白,那我就真的很开心了,

思而不学则殆。

推荐一本书:《码农翻身》,真的很棒。

相关文章

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • golang的helloworld

    go语言初识 go语言的变量

  • GO语言——入门(1)

    一、初识GO语言 1.GO语言介绍 1.1 GO语言是什么 2009年11月10日,GO语言正式成为开源编程语言家...

  • 初识go语言

    title: 初识go语言tag: golang 编程语言categories: notes 简介 Go语言是一门...

  • 以太坊私有链搭建+挖矿+转账

    初识以太坊 以太坊介绍链接 以太坊官方 选择语言 选择以GO语言开发的Go-ethereum项目 GO语言安装 安...

  • go 学习笔记之初识 go 语言

    Go 是一种开源编程语言,可以轻松构建简单,可靠,高效的软件. 摘录自 github: https://githu...

  • 课程目录

    初识Go语言 Go语言的特性 环境搭建 分享人:洪波 时间:2019-6-25 17:00-18:00 Go语...

  • 初识Go语言

    Go 语言结构 初识Go语言 Go 语言结构 代码说明: ① 定义包名,必须在源文件中非注释的第一行指明这个文件...

  • 初识Go语言

    说起Go语言,我只是有所耳闻并没有过多了解,直到有一次和一个学计算机考研的学弟聊起,他说他舅舅是也是搞IT的 ,说...

  • 初识Go语言

    用途服务器编程,原来适合C或者C++做的事情,用Go也是非常合适,例如处理日志、数据打包、虚拟机处理、文件系统等。...

网友评论

    本文标题:Go语言学习之初识

    本文链接:https://www.haomeiwen.com/subject/eswjoqtx.html