Go中的nil解析

定义 nil是标识符 nil 为预声明的标示符,定义在builtin/builtin.go, 1 2 3 4 5 6 7 8 9 // nil is a predeclared identifier representing the zero value for a // pointer, channel, func, interface, map, or slice

Go处理数据库的NULL

golang是强类型语言,在赋值和解析过程中需要先定义好数据类型,否在会报类型错误,下面总结在处理数据库表时遇到字段为空或零值的情况 场景 假如

Go项目如何工程化

MVC代码分层 阿里规范 在阿里的编码规范中约束的分层如下: 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行 网关安全控制、流量

Go语言在Linux终端输出彩色字符

Linux终端输出颜色 开发工作中经常见到终端中各种命令输出的彩色文字,例如 ls 命令就以不同颜色表示文件的不同类型。 而在我们自己写的程序输出的信

如何优雅处理Go错误

Error vs Exception error的定义 Go error 就是普通的一个接口,普通的值。 1 2 3 4 5 // The error built-in interface type is the conventional interface for // representing an error condition, with the nil value representing no error. type error interface { Error() string } 只要实现了Er

Go中的内置函数

func new 1 func new(Type) *Type 内建函数new分配内存。其第一个实参为类型,而非值。其返回值为指向该类型的新分配的零值的指针。 在调用new函数时,将类型名作为参

神奇的2006-01-02 15:04:05

神奇的日期 刚接触Golang时,阅读代码的时候总会在代码中发现这么一个日期, 1 2006-01-02 15:04:05 刚看到这段代码的时候,我当时想:这个人好随便啊,随便写一个

Go中接口的类型转换与判断

类型转换和类型断言 Go语言的类型转换和类型断言: 类型转换在编译期完成,包括强制转换和隐式转换 类型断言在运行时确定,包括安全类型断言和非安全类

Go中的内置类型转换

隐型转换 转换是T(x)形式的表达式,其中T是类型,x是可以转换为类型T的表达式。 1 Conversion = Type "(" Expression [ "," ] ")" . 如果类型以operator *或<

Go中获取程序所在目录

代码1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "fmt" "log" "os" "path/filepath" ) func main() { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal(err) } fmt.Println(dir) } 代码2: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "fmt"

Go实现重入锁

重入锁 接下来,我们来讨论“重入”这个问题。在说这个问题前,我先解释一下个概念,叫“可重入锁”。 当一个线程获取锁时,如果没有其它线程拥有这个锁

Go语言的可变参数详解

什么是可变参数函数? 可变参数函数即其参数数量是可变的 —— 0 个或多个。声明可变参数函数的方式是在其参数类型前带上省略符(三个点)前缀。 译者注:

在GO中用名字调用函数

Golang 中的函数跟 C 的一样,是个代码块,由于golong中函数也是类型,它可以像其他类型那样赋值给一个变量。 在 Golang 中,你不能这样做: 1 2 3 4 5 func foobar() {

append的陷阱

背景 问题代码如下: 1 2 3 4 5 6 7 8 9 10 11 package main import "fmt" func main() { s := []byte("") s1 := append(s, 'a') s2 := append(s, 'b') //fmt.Println(s1, "==========", s2) fmt.Println(string(s1), "==========", string(s2)) } // 出现个让我理解不了的现象, 注释时候输出是 b ========== b //

Gin实现自动注册路由

因为在使用gin框架,在配置路由的时候需要手动配置,如下: 1 2 r.GET("/page",controller.Page) r.GET("/index",controller.Index) 其中controller是包名,如果在controller包中再增加方法,