
Go
9命怪猫
10+年技术团队管理经验,依旧撸码
擅长云计算、大数据;AWS-SAP
热爱数学,粗通算法。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Golang中printf()常用的几个格式化输出
Golang中printf()常用的几个格式化输出,一句话描述:%X,这里的X到底有多少种,都是什么含义。Printf 格式化输出通用占位符:v 值的默认格式。%+v 添加字段名(如结构体)%#v 相应值的Go语法表示%T 相应值的类型的Go语法表示%% 字面上的百分号,并非值的占位符布尔值:%t true 或 false整数值:%b 二进制表示%c 相应Unicode码点所表示的字符%d 十进制表示%o 八进制表示%q 单引号围绕的字符字面值,由Go语法...原创 2020-11-04 01:03:38 · 7274 阅读 · 0 评论 -
Golang中nil不得不说的事
Golang中的nil是个神奇的存在,典型的故事多,各位看官,小板凳坐好,瓜子花生茶水摆上,我们聊聊。1. nil不是保留字、关键字比如:可以用nil当变量名package mainimport "fmt"func main() { nil := 100 fmt.Print("nil could be a variable: ", nil)}//结果:nil could be a variable: 1002. nil不能比较...原创 2020-10-23 18:57:28 · 528 阅读 · 0 评论 -
Golang的new和make
new是Golang里的内存分配语句,大致可以new任何类型。new的作用是:1. 按照数据类型,分配一块相应大小的内存空间,2. 置为空值。new作用是返回一个地址,类似C/C++里面的 malloc,但是多了一步置空值。TypeName *p;p = malloc(sizeof(TypeName));具体看Golang代码例子:package mainimport "fmt"func main() { mybool := new(bool) myint := ne原创 2020-10-23 17:04:24 · 263 阅读 · 0 评论 -
Golang中int, int8, int16, int32, int64区别
猫哥写Golang过程中,遇到整数常用int,因为可以少打至少一个字符。 T_T一直没有意识到其实各个int还是有区别的,起码是内存空间上的区别。一段简单粗暴的程序,描述一下区别:package mainimport ( "fmt" "unsafe")func main() { var i1 int = 1 var i2 int8 = 2 var i3 int16...原创 2019-11-21 20:45:49 · 17330 阅读 · 8 评论 -
Golang三种引号详解:单引号、双引号、反引号
引子:Golang借鉴了不少C语言内容。处理字符串是编程几乎绕不过去的一个问题。Golang限定字符或者字符串一共三种引号,单引号(''),双引号("") 以及反引号(``)。反引号就是标准键盘“Esc”按钮下面的那个键。Golang中的单引号,更类似于C语言中的char类型,其实不能算字符串,因为只能是单个的字符。Golang中的双引号,才是字符串,单行的,多个字符(字母数字)。...原创 2019-11-21 00:04:55 · 5752 阅读 · 0 评论 -
Golang异常处理之panic、recover、defer
Golang不是面向对象语言,也没有try ... catch... 或者 try ... exception... 结构。Golang语言使用panic、recover,配合着defer,来完成类似功能。defer本身用处很多,比如延后执行(函数结束时候才执行)。看个例子:package mainimport "fmt"func main() { var i int d...原创 2019-11-20 22:20:14 · 308 阅读 · 0 评论 -
Golang中的println和fmt.Println
Golang中常用于打印的是 fmt.Println,就是说要引用fmt包。Golang同时存在着一对println()和print()。都是小写字符!记住!!(Golang严格区分大小写)看起来,用不用fmt都没关系。毕竟打“hello world”没区别。真这么认为,就图样图森破了!以下代码执行验证于 go 12.5 版本。看个例子:package mainimpor...原创 2019-11-19 15:45:58 · 7209 阅读 · 3 评论 -
Golang中type有没有等号的区别
Golang语言里type有没有等号“=”,就是用不用aliastype myInt inttype myIntAilas = int即使不严格来说,两者也是不一样的... 来看个例子:package mainimport ( "fmt" "reflect")type myInt inttype myIntAilas = intfunc main() {...原创 2019-10-19 17:49:17 · 1911 阅读 · 1 评论 -
Golang常量自动生成器之iota
iota,不是itoa。自动继续下去,类似Excel里面,鼠标移到单元格右下角,变成一个十字,再拖下去的效果。举个例子:package mainimport "fmt"const ( Sunday int = iota Monday Tuesday Wednesday Thursday Friday Saturday)func main() { f...原创 2019-10-19 16:56:07 · 452 阅读 · 2 评论 -
Golang变量逃逸(Escape Analysis)
在 C/C++ 语言中,开发者需要学习如何进行内存分配,选用合适的内存分配方式来适应不同的算法需求。比如:函数局部变量尽量使用栈(Stack);全局变量、结构体成员使用堆(Heap)分配等。Golang将这个过程整合到了编译器中,命名为“变量逃逸分析”(Escape Analysis)。通过编译器分析代码的特征和代码的生命周期,决定应该使用堆还是栈来进行内存分配。来段示例代码:pa...原创 2019-10-19 16:07:56 · 868 阅读 · 1 评论 -
Golang里面的三个点 ...
Golang有很多自己特殊的语法,学习时候,让我觉得很无奈,比如三个点“...”。很多时候我们只用“...”表示无奈。这次我们不无奈,讲讲Golang里面“...”的作用。第一个用法,函数不定量参数,举个例子:package mainimport "fmt"func printall(args ... string) { for _,v := range args { ...原创 2019-04-14 19:00:43 · 1544 阅读 · 2 评论 -
Golang字符串类型——byte、rune、string
字符串处理,一般是可以单独立一章讲解的。看看Golang的字符串处理。一、string、byte这两个都常见。Golang的string,底层是[]byte。对于ASCII字符,Golang默认用1字节;对于汉字,Golang使用UTF-8字符集存储,默认用三个字节。看个例子,下面的“我爱学习”三个汉字就各占3字节。package mainimport "fmt"func m...原创 2019-04-25 19:48:57 · 4927 阅读 · 0 评论 -
Golang踩坑 - Slice作为函数参数传递
不是Golang坑太多,是自己水平不够强! —— 9命怪猫Slice对应着C/C++是个类似指针的存在。在Golang里面,Slice很好用,很灵活。但是,所有“很灵活”,在计算机世界里也意味着“很多坑”。来看一个例子:package mainimport "fmt"func Add2Slice(s []int, t int) { s[0]++ s = append(s,...原创 2019-04-15 19:25:36 · 3688 阅读 · 7 评论 -
Golang 获取当前系统架构和操作系统
runtime.GOARCH 返回当前的系统架构;runtime.GOOS 返回当前的操作系统。原创 2017-04-13 14:15:22 · 19236 阅读 · 2 评论 -
跟着猫哥学Golang 18 - select控制并发
猫哥在实际项目中,会遇到在一个goroutine中处理多个channel的情况。一般情况下,可以用select关键字来控制channel。golang中select可以等待/处理多个channel。对于无法识别的,还有default关键字。看下面的例子:package mainimport ( "fmt" "time")func main(){ ch1 := m原创 2016-10-05 13:20:07 · 1844 阅读 · 0 评论 -
跟着猫哥学Golang 17 - Channel 进阶
上一章降到了Golang的channel有队列的特性,那么逻辑上很自然地可以引出两个操作:循环channel元素;关闭channel;依次循环channel中的内容是很容易理解的,先进先出。举个栗子:package mainimport "fmt"func main() { var pow = []int{1, 2, 4, 8, 16} c := make(chan i原创 2016-10-02 23:31:54 · 1236 阅读 · 0 评论 -
跟着猫哥学Golang 16 - Channel
goroutine和channel是Golang之所以被称之为“天生并发”的两个核心原因。 channel是goroutine之间进行通信的一种方式。与Unix中的管道功能非常类似。猫哥说:其实就是数据结构里面的队列嘛~ 先进先出~channel声明:ChannelType = ( "chan" | "chan" "channel是类型相关的,换言之原创 2016-09-28 13:32:59 · 450 阅读 · 1 评论 -
跟着猫哥学Golang 15 - goroutine
Goroutine是go语言在语言级别支持并发的一种特性。“天生并发”是Go语言的最大亮点!import "runtime"是首要条件!关键字go去执行,从而开启一个新routine去执行。goroutine在相同的地址空间中运行要多线程执行的函数里,记得加上runtime.Gosched()。原创 2016-02-12 12:20:05 · 525 阅读 · 0 评论 -
跟着猫哥学Golang 14 - error
在Golang中,错误处理机制一般是函数返回时使用的,是对外的接口。error 类型实际上是抽象了 Error() 方法的 error 接口,Golang 使用该接口进行标准的错误处理。原创 2016-02-11 15:36:41 · 1293 阅读 · 0 评论 -
跟着猫哥学Golang 13 - 接口 interface
接口(interface),绝对是Golang的一大特色!定义:接口类型是由一组方法定义的集合,接口类型的值可以存放实现这些方法的任何值。原创 2016-02-11 14:56:41 · 692 阅读 · 0 评论 -
跟着猫哥学Golang[1] - Hello World!
Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言。为了避免歧义,也可以写作 golang。学什么语言,首先要来个Hello world。来吧,Golang版的package mainimport "fmt"func main() { fmt.Println("Hello world!")}第一行,package原创 2015-10-23 20:36:25 · 648 阅读 · 0 评论 -
跟着猫哥学Golang[2] - 变量
Go语言中变量声明大致分两种方法:1. 使用前声明:1.1 声明一类变量(单个、多个)方法:var 变量名 类型。例如: var i int.package mainimport "fmt"var a, b, c intvar d, e, f float32var x, y, z boolfunc main() { fmt.Println(a, b, c) fm原创 2015-10-26 11:04:46 · 554 阅读 · 0 评论 -
跟着猫哥学Golang[3] - if else
Golang是一门很有个性的语言,我们会慢慢体会到的。比如:这次我们要用到的if ... else... if 语句看起来跟 C 或者 Java 中的一样,除了没有了 ( ) 之外(甚至强制不能使用它们),而 { } 是必须的。 package mainimport "fmt"func main() { var i, j int i, j = 100, 200 f原创 2015-10-26 11:22:10 · 870 阅读 · 0 评论 -
跟着猫哥学Golang[4] - switch
一般来说程序分支用if...else或者switch来表示。作为一门个性十足的语言,Golang的switch也很个性!一起来看看:package mainimport ( "fmt" "runtime")func main() { fmt.Print("Go runs on ") switch myos := runtime.GOOS; myos { case "wi原创 2015-10-26 20:27:33 · 443 阅读 · 0 评论 -
跟着猫哥学Golang[5] - 循环
Golang的个性在循环这里得到了突出的体现——木有while、木有do...while,木有until...对的,Golang只有for,究竟怎么用,且看下文详解。1. 最最基本的for基本的 for 循环看起来跟 C/C++ 或者 Java 一样,除了木有 ( ) 之外(甚至强制不能使用它们),而{ } 是必须的。必须木有()!必须木有()!必须木有()!重要的事情说三遍!!!原创 2015-11-01 12:30:38 · 692 阅读 · 0 评论 -
跟着猫哥学Golang[7] - Map
大多数现代化的编程语言都有个类似map的概念,大意就是映射,Go语言也不能例外。1. Golang里,map映射键到值,以猫哥的粗浅认识,map的作用类似于哈希表或者Python里的字典,只不过比后两者用得更广泛。map在Golang里是一种数据类型,与Golang的结构体类似,map必须先声明“键值”类型,然后在使用之前必须用 make 来创建。来看个例子:package main原创 2015-11-08 22:46:03 · 502 阅读 · 0 评论 -
跟着猫哥学Golang[6] - 结构体
Golang变量声明,两种办法:1. 使用前声明:方法: var 变量名 变量类型,例如: var i, j intpackage mainimport "fmt"var x, y, z intvar c, python, java boolfunc main() { fmt.Println(x, y, z, c, python, java)}2.原创 2015-10-26 10:57:00 · 644 阅读 · 0 评论 -
Windows7配置Go和Beego
【前言】猫哥因为项目需要,初学乍练Go语言及Beego框架,请各位高人指正。0. 提前装好git,具体步骤不必赘述。1. Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。Go语言可以用于网络服务器、存储系统和数据库开发中。Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复原创 2015-10-12 16:12:39 · 4413 阅读 · 0 评论 -
跟着猫哥学Golang[8] - 函数
所有编程语言都有函数的概念。Golang里面,函数有些特殊。1. 首先,函数也是值。函数可以拿来当参数,当变量,当... 这些猫哥第一遇到的时候是在JavaScript里。没想到在Golang里又遇到了。感觉Go借鉴了C,借鉴了JavaScript,然而是一种脚本语言。抑或无名函数类似Python中的 lamda?来看个例子:package mainimport "fmt"...原创 2015-11-09 09:16:32 · 482 阅读 · 0 评论 -
Golang学习笔记 - 【杂项】格式化时间成datetime
用Golang或者Beego,总需要往数据库里写datetime时间戳。Golang对时间格式支持并不理想。先看一个例子:package main import ( "fmt" "time")func main() { t := time.Now() fmt.Println(t) t1 := time.Now().Format("2006-01-02 15:04:原创 2015-10-29 09:54:25 · 1304 阅读 · 0 评论 -
Golang import 三种特殊形式:下划线、点、别名
如同其它语言,Golang里面的import作用是引用其它package。除了直接import,常见的import有三种特殊形式(或者叫前缀),分别是前面加下划线(_),加点(.),加别名。一、加下划线:import 下划线(如:_ "github.com/go-sql-driver/mysql")的作用:当导入一个包时,该包下的文件里所有init()函数 都会被执行。然而,有些时...原创 2015-10-14 17:18:05 · 8091 阅读 · 1 评论 -
跟着猫哥学Golang[11] - range关键字
for 循环的 range 格式可以对 slice 或者 map 进行迭代循环。原创 2015-11-12 23:14:01 · 704 阅读 · 0 评论 -
跟着猫哥学Golang[10] - new & 指针
Golang的指针和new是结合在一起的,不过没有指针运算,new也不生成对象实例。原创 2015-11-12 23:12:29 · 5778 阅读 · 1 评论 -
Go小计 - 可见性规则
可见性规则Go语言中,使用大小写来决定该常量、变量、类型、接口、结构或者函数是否可以被外部包所调用根据约定,函数名首字母小写为private,大写为public。最简单的,想想hello world。package mainimport fmtfunc main { fmt.Println("Hello world!!!!!\n");原创 2015-10-16 09:32:03 · 729 阅读 · 0 评论 -
跟着猫哥学Golang[9] - slice
Golang的Slice类似于其它语言的数组操作,但是也有它自身的特点,如:容量,重新切片。原创 2015-11-12 23:08:36 · 547 阅读 · 0 评论 -
Beego 连接 MongoDB主从
MongoDB一主两从,Beego框架里连接方法。原创 2015-12-17 11:50:02 · 4144 阅读 · 0 评论 -
跟着猫哥学Golang[12] - 结构体的方法
Golang只有结构体,但可以定义结构体方法,其实就是配合结构体的函数。方法和之前讲过的函数的区别在于:方法接受者出现在方法定义中,函数没有“接受者”。有Golang特色的方法。原创 2015-11-23 15:19:41 · 1145 阅读 · 0 评论 -
Go的MongoDB包
官网: http://labix.org/mgo原创 2015-11-04 17:43:48 · 644 阅读 · 0 评论