![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
tom和cat
知识的搬运工
展开
-
Go语言并发之美
简介 多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes。随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式需要有一个极其简洁的内核,还有在此之 上丰富的外延,可以解决现实世界中各种各样的问题。本文以GO语言为例,解释其中内核、外延。 并发模式之...转载 2018-06-12 21:39:11 · 149 阅读 · 0 评论 -
go语言学习笔记(二)——命令源码文件
注:命令源码文件:如果一个源码文件声明属于main包,并且包含一个无参数声明的main函数,那么他就是命令源码文件。将代码拆分到多个文件,甚至拆分到不同的代码包中。但是,命令源文件永远只有一个,也就是只有一个main函数入口。如果有与命令源文件同包的源码文件,那么他们也应该声明属于main包(package main) 1.命令源码文件怎样接收参数 知识点:Go标准库中,...原创 2018-08-17 17:29:50 · 566 阅读 · 0 评论 -
protobuf3
Protobuf消息定义消息由至少一个字段组合而成,类似于C语言中的结构。每个字段都有一定的格式。字段格式:限定修饰符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤]①.限定修饰符包含 required\optional\repeated Required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必...原创 2018-08-20 14:22:03 · 319 阅读 · 0 评论 -
go语言学习笔记(三)——库源码文件
前言 注:库源码文件:不具有声明自己属于main代码包、包含无参数声明和结果声明的main函数的源码文件库源码文件不能直接被运行,它仅用于存放程序实体。这些程序实体可以被其他代码使用,两者可以带同一源码文件中也可以在其他源码文件,甚至其他代码包中,一般我们是先声明(或者说定义)程序实体,然后再去使用注:程序实体:变量,常量,函数,结构体和接口的统称。 怎样把命令源码中的代码...原创 2018-08-20 18:12:43 · 803 阅读 · 0 评论 -
go语言学习笔记(六)——变量类型检查
问题:怎样判断一个变量的类型 以demo11为示例// demo11.gopackage main import ( "fmt") var container = []string{"zero", "one", "two"}func main() { container:=map[int]string{0:"zero", 1:"one", 2:"t原创 2018-08-28 17:06:36 · 1335 阅读 · 0 评论 -
go语言学习笔记(七)——数组和切片
前言 Go语言的数组(array)类型和切片(slice)类型都可以用来存储某一种类型的值(元素),不过他们最重要的不同是:数组类型的值的长度是固定的,而切片类型的值是可变长的。数组的长度必须再声明时就给定,并且在之后不会再改变,而切片声明时只有其元素的类型,没有其长度。可以把切片看作是对数组的一层简单的封装,因为在每个切片的底层数据结构中,一定会包含一个数组。后者被叫做前者的底层数组,前...原创 2018-08-31 14:23:57 · 240 阅读 · 0 评论 -
go语言学习笔记(四)——变量声明和重声明
Go语言中的程序实体包括变量,常量,函数,结构体和接口。Go语言是静态类型的编程语言,所以我们在声明变量或常量的时候都需要指定它们的类型,或者给予足够的信息以使Go语言能够推导出他们的类型。 声明变量有几种方式 1.声明变量且声明变量类型先看如下代码 如上var name string是基本的变量声明语法2.不声明变量类型,直接=赋值var name = *flag...原创 2018-08-21 14:42:37 · 1379 阅读 · 0 评论 -
go语言学习笔记(八)——List和Element
前言 Go语言的链表实现在其标准库的container/list代码包中。这个包包含了两个公开的程序实体:List和Element。前者实现了一个双向链表,而后者代表了链表中元素的结构链表特点:1.链表元素不是连续存储的,相邻元素之间需要互相保存对方的指针,所以链表所占用的内存空间,往往要比包含相同元素的数组所占的内存大得多2.每个元素存有它所属的那个链表的指针,...原创 2018-09-04 16:55:05 · 4132 阅读 · 0 评论 -
go语言学习笔记(九)——map
前言 map是键值对的集合,在Go语言规范中,我们也可以将其称为“键-元素对”。Go语言中map是一个哈希表(hash table)实现的。在这个实现中,键的类型是受限的,而元素却可以是任意类型的。键和元素对映射过程的第一步就是把键值转换为hash值 问题:map的键类型不能是哪些类型 在Go语言规范中,规定Map键类型不可以是函数类型,map类型和...原创 2018-09-04 18:06:15 · 186 阅读 · 0 评论 -
go语言学习笔记(十二)——结构体
前言 结构体类型表示的是数据结构,可以包含若干个具有确切的名字和类型的字段。我们可以为这些类型关联上一些方法,这里可以把方法看做函数的特殊版本。函数可以没有名字,可以当作值来看待,而方法没有这两个特性,最重要的是方法必须隶属于某一个方法。方法所属的类型会通过其声明中的接收者声明体现出来。我们可以把结构体类型(struct)中的一个字段看做是该结构体类型的一个属性或一项数据,再把隶属于它...原创 2018-09-17 10:29:50 · 265 阅读 · 0 评论 -
go语言学习笔记(十)——channel
介绍 channel作为goroutine间通信和同步的重要途径,是Go runtime层实现CSP并发模型重要的成员。channel 提供了一种通信机制,通过它,一个 goroutine 可以想另一 goroutine 发送消息。 初始化 在声明并初始化一个通道的时候,我们需要用到Go语言的内建函数make。我们传给make的第一个参数是代表了通道的具体类型的类型字面量。如例...原创 2018-09-07 18:03:30 · 483 阅读 · 0 评论 -
go语言学习笔记(五)——代码块和变量重名
前言 代码块和作用域:作用域简单来说就是变量作用的范围,变量在哪些函数哪些范围可以使用,而在其他部分不可以,要用得重新定义。一个程序实体的作用域总是会被限制在某个代码块中,而这个作用域最大的用处就是对程序实体的访问权限的控制。对”高内聚,低耦合“这种程序设计思想的实践恰恰可以从这里开始 如果一个变量与其外层代码块中的变量重名会出现什么状况 下面的命令源码文件有四个代码块,它...原创 2018-08-27 14:58:43 · 1792 阅读 · 0 评论 -
go语言学习笔记(一)——GoPath
windows下安装go和设置多个工作区:https://segmentfault.com/a/1190000013795920Linux下安装go和配置工作区:https://studygolang.com/articles/4841环境变量介绍GOROOT:Golang的安装路径GOPATH:可以理解为工作目录或者工作区,也是平时接触最多的一个变量。它可以是一个目录,可以是多个...原创 2018-08-16 17:35:20 · 1038 阅读 · 1 评论 -
进程和线程、协程的区别
现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,py web框架tornado中也用了gevent封装好的协程。本文主要介绍进程、线程和协程三者之间的区别。一、概念 1、进程进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程...转载 2018-06-12 21:40:51 · 111 阅读 · 0 评论 -
GoLang中面向对象的三大特性
有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的;继承,就是指 class 之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了。 作为集大成者的 Go 语言,自然不会在面向对象上面无所作...转载 2018-06-12 22:09:28 · 171 阅读 · 0 评论 -
Golang学习 - fmt 包
golang fmt格式“占位符” 参考https://studygolang.com/articles/2644// Print 将参数列表 a 中的各个参数转换为字符串并写入到标准输出中。// 非字符串参数之间会添加空格,返回写入的字节数。func Print(a ...interface{}) (n int, err error)// Println 功能类似 Print,只不...原创 2018-06-21 14:15:23 · 152 阅读 · 0 评论 -
go中方法的接收者是值或者指针的区别
值类型的变量和指针类型的变量先声明一个结构体:type T struct { Name string}func (t T) M1() { t.Name = "name1"}func (t *T) M2() { t.Name = "name2"}12345678910111234567891011M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T...原创 2018-06-22 16:27:51 · 424 阅读 · 0 评论 -
解决:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
在win下用Go语言的cgo时(比如下面场景)我们会用到的GCC编译器,Win下我们一般用MinGW。Golang连接Oracle数据库;win下 golang 跨平台编译MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集...转载 2018-06-20 15:42:45 · 5289 阅读 · 0 评论 -
GoLang获取struct的tag内容(结构体中``的作用)
GoLang获取struct的tag内容;beego的ORM中也通过tag来定义参数的。获取tag的内容是利用反射包来实现的。示例代码能清楚的看懂! 1 package main 2 import ( 3 "fmt" 4 "reflect" // 这里引入reflect模块 5 ) 6 type User struct { 7 Name string "us...转载 2018-07-16 11:45:14 · 10717 阅读 · 0 评论 -
Go语言的方法接受者类型用值类型还是指针类型?
概述很多人(特别是新手)在写 Go 语言代码时经常会问一个问题,那就是一个方法的接受者类型到底应该是值类型还是指针类型呢,Go 的 wiki 上对这点做了很好的解释,我来翻译一下。何时使用值类型1.如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型)。2.如果接受者是一个 slice,并且方法不执行 reslice 操作,也不重新分配内存给 slice,使用值...转载 2018-07-10 15:29:45 · 603 阅读 · 0 评论 -
golang在windows下安装和使用protobuf
安装部分1.在windows下安装好GO包,下载地址http://www.golangtc.com/download 2.设置GOPATH的环境变量,从github上获取的protobuf会下载到GOPATH目录下 3.安装GIT包,https://git-scm.com/downloads/ 4.在PATH变量中添加GIT.exe的路径D:\Program Files...转载 2018-08-07 16:16:20 · 691 阅读 · 0 评论 -
go语言学习笔记(十一)——函数
前言 在Go语言中,函数是一等的公民,函数类型也是一等的数据类型。 函数不但可以用于封装代码、分割功能、解耦逻辑,还可以作为参数值在函数间传递、赋给变量、做类型判断和转换等, 函数值可以由此成为能够被随意传播的独立逻辑组件 函数类型 函数类型是一种对一组输入、输出进行模板化的工具,使得函数值变成了可被热替换的逻辑组件,如例pac...原创 2018-09-14 11:53:53 · 286 阅读 · 0 评论