• Go语言异常处理机制

    Go 语言程序错误分为两种:

    • error ,程序员可以预料到的,安错误种类加以处理;
    • panic ,无法预料到的;

    典型原因

    引起 panic 的常见操作包括:

    • 数组越界访问
    • 类型断言失败
    • 访问空指针
    • 互斥锁错误调用
    • 向已关闭的 channel 发送数据
    • etc
    阅读全文
  • 基于反射的Go依赖注入工具——dig

    diguber 开源的一个依赖注入组件,内部基于反射实现,适用于:

    • 为程序框架(如 Fx )提供依赖注入能力;
    • 在进程启动阶段,解决对象依赖图;

    但不适用于以下场景:

    • 它只提供依赖注入功能,无法替代程序框架(如 Fx );
    • 在进程启动阶段后的依赖解决;
    • 作为服务发现组件,暴露给其他用户代码;

    安装

    开始使用 dig 解决依赖问题前,我们需要先安装,推荐安装主版本 1

    1
    2
    3
    
    $ glide get 'go.uber.org/dig#^1'
    $ dep ensure -add "go.uber.org/dig@v1"
    $ go get 'go.uber.org/dig@v1'
    
    阅读全文
  • Linux系统下Go语言编程环境安装,快速起步!

    二进制包

    Linux 下,推荐通过二进制包部署 Go 语言开发环境。首先,从 Go 官网 下载页面 下载二进制包。

    下载完毕后,将压缩包解压到家目录的 opt 目录中,以 1.10.3 版本为例:

    1
    2
    
    $ mkdir -p ~/opt
    $ tar -xf go1.10.3.linux-amd64.tar.gz -C ~/opt
    

    解压完毕后,我们可以看到这些目录和文件:

    1
    2
    3
    
    $ ls ~/opt/go
    api      bin   CONTRIBUTING.md  doc          lib      misc     pkg        robots.txt  test
    AUTHORS  blog  CONTRIBUTORS     favicon.ico  LICENSE  PATENTS  README.md  src         VERSION
    

    其中, Go 语言开发工具就位于 bin 目录下。 尝试运行 go 命令:

    1
    2
    
    $ ~/opt/go/bin/go version
    go version go1.10.3 linux/amd64
    

    至此, Go 已经安装完毕!但等等! ~/opt/go/bin/go 这是什么鬼?

    阅读全文
  • Go语言包简介

    每个 Go 程序都是由一些包组成的,程序从 main 包中的 main 函数开始执行。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    package main
    
    import (
        "fmt"
        "math/rand"
    )
    
    
    func main() {
        fmt.Println("My favorite number is", rand.Intn(10))
    }
    

    在这个程序,通过 import 导入两个包, fmtmath/rand (包路径)。

    阅读全文
  • Go语言学习资料

    官方文档

    免费资料

    Go by Example

    Go by Example 是一个 Go 语言 动手实践 教程,提供大量 例子 并附带 注释

    阅读全文
  • Go语言函数入门

    Go 语言中,函数可以接受零或多个参数:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    package main
    
    import "fmt"
    
    func add(x int, y int) int {
        return x + y
    }
    
    func main() {
        fmt.Println(add(43, 13))
    }
    

    在这个例子中, add 函数接受两个 整型int )参数。注意到,类型申明紧跟在参数名之后,这跟其他语言有些区别。

    阅读全文
  • Go语言变量概述

    var 语句 申明declare )变量列表; 跟 函数 参数列表一样,类型在最后指定。

    var 语句的作用域(可见范围)可以是 包级别 或者 函数级别 。 下面这个例子同时包含这两种级别:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    package main
    
    import "fmt"
    
    var c, python, java bool
    
    
    func main() {
        var i int
        fmt.Println(i, c, python, java)
    }
    

    作用域是啥意思呢?

    阅读全文
  • Go语言基本类型

    Go 内置了以下基本类型:

    • 布尔
      • bool
    • 字符串
      • string
    • 整数
      • int int8 int16 int32 int64
      • uint uint8 uint16 uint32 uint64
    • 字节
      • byteuint8 的别名
    • Unicode
      • runeint32 的别名
    • 浮点
      • float32 float64
    • 复数
      • complex64 complex128
    阅读全文
  • Go语言常量定义

    常量( constant )申明与变量一样,只不过换成 const 关键字。常量可以是字符、字符串、布尔,或者数值类型。另外,常量不能使用 := 语法申明。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    package main
    
    import "fmt"
    
    const Pi = 3.14
    
    func main() {
        const World = "世界"
        fmt.Println("Hello", World)
        fmt.Println("Happy", Pi, "Day")
    
        const Truth = true
        fmt.Println("Go rules?", Truth)
    }
    
    阅读全文
  • Go语言for循环语句

    Go 语言只有一种循环结构—— for 循环。

    最基本的 for 语句包含 3 部分,以分号 ; 分隔:

    • 初始语句 :在第一次迭代判断之前;
    • 条件语句(表达式) :在每次迭代前求值并判断;
    • 迭代后语句 :在每次迭代后执行;
    1
    2
    3
    
    for 初始语句; 条件语句; 迭代后语句 {
        代码体
    }
    

    当条件表达式求值为 false 时,循环将停止迭代并退出。

    阅读全文