golang
文章平均质量分 51
nudt_qxx
这个作者很懒,什么都没留下…
展开
-
Go语言Channel详解
Go语言中使用了CSP模型来进行线程通信,准确说,是轻量级线程goroutine之间的通信。CSP模型和Actor模型类似,也是由独立的,并发执行的实体所构成,实体之间也是通过发送消息进行通信的。一.Actor模型和CSP模型区别:Actor之间直接通讯,而CSP是通过Channel通讯,在耦合度上两者是有区别的,后者更加松耦合。 主要的区别在于:CSP模型中消息的发送者和接收者之间通过Chann原创 2017-09-16 11:24:58 · 1130 阅读 · 0 评论 -
Golang从入门到精通(九):Golang字符串
字符串介绍几乎任何程序都离不开字符串,字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。Go语言字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。Go 代码使用 UTF-8 编码(且不能带 BOM),同时标识符支持 Unicode 字符。在标准库 unicode原创 2017-12-13 00:00:05 · 7124 阅读 · 1 评论 -
Golang从入门到精通(十):Golang函数
函数函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你的代码。编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务(那就是函数)来解决。在实际编程中,我们把重复性的任务抽象成一个函数。和所有的编程语言一样,Go语言支持各种风格的函数。在Go语言中,当函数执行到代码块最原创 2017-12-13 12:38:49 · 2664 阅读 · 0 评论 -
Golang从入门到精通(十一):Golang方法
相关知识在 Go 语言中有一个概念和函数极其相似,叫做方法 。Go 语言的方法其实是作用在接收者(receiver)上的一个函数,接收者是某种非内置类型的变量。因此方法是一种特殊类型的函数。接收者类型可以是(几乎)任何类型,不仅仅是结构体类型:任何类型都可以有方法,甚至可以是函数类型,可以是 int、bool、string 或数组的别名类型。但是接收者不能是一个接口类型。方法的声明和普通函数的声明类原创 2017-12-13 12:42:12 · 17824 阅读 · 2 评论 -
Golang从入门到精通(十三):Golang复合数据之map
map概念Go 语言中 map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是key,对应的另一个元素是value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定key,对应的value可以迅速定位。map 这种数据结构在其他编程语言中也称为字典(Python)、hash 和HashTable 等。map声明和初始化map 是引用类型,可以使用如原创 2017-12-13 13:10:24 · 19279 阅读 · 0 评论 -
Golang从入门到精通(十二):Golang复合数据之slice
数组和slice的区别Go 语言中数组是具有固定长度而且拥有零个或者多个相同或相同数据类型元素的序列。由于数组长度固定,所以在Go语言比较少直接使用。而slice长度可增可减,使用场合比较多。更深入的区别在于:数组在使用的过程中都是值传递,将一个数组赋值给一个新变量或作为方法参数传递时,是将源数组在内存中完全复制了一份,而不是引用源数组在内存中的地址。为了满足内存空间的复用和数组元素的值的一致性的应原创 2017-12-13 13:06:59 · 2284 阅读 · 1 评论 -
Golang从入门到精通(十四):Golang结构体
Golang是一门很特殊的语言,虽然它出生比较晚,但是在很多地方却和现在的编程语言有所不同。现在的编程语言要么是函数式的、要么是面向对象的,而Go语言却有指针、结构体这些概念,并解决了C语言的一些坑。从这个角度上说,Golang可以看做C语言的填坑加强版。结构体简介Go 语言通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型。一个带属性的结构体试图表示一个现实世界原创 2017-12-13 15:04:19 · 3732 阅读 · 0 评论 -
Golang从入门到精通(十五):Golang指针
在Go语言中,直接砍掉了C语言指针最复杂的指针运算部分,只留下了获取指针(&运算符)和获取对象(*运算符)的运算,使用方法和C语言很类似。但不同的是,Go语言中没有 -> 操作符来调用指针所属的成员,而与一般对象一样,都是使用.来调用。指针概念一个指针可以指向任何一个值的内存地址 它指向那个值的内存地址,在 32 位机器上占用 4 个字节,在 64 位机器上占用 8 个字节,并且与它所指向的值的大小原创 2017-12-13 15:06:47 · 2672 阅读 · 0 评论 -
Golang从入门到精通(十六):Golang接口
接口简介Go 语言不是一种“传统” 的面向对象编程语言, 所以 Go 语言并没有类和继承的概念。但是 Go 语言里有非常灵活的接口概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来说明对象的行为。在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。接口是一种契约,实现类型必须满足它,它描述了类型的行为,规定类型可以做什么。接口彻底将类型能做什么,以原创 2017-12-13 19:32:37 · 2064 阅读 · 0 评论 -
Golang从入门到精通(十七):Golang反射
Go语言类型Go语言是静态类型的编程语言,所有数据的类型在编译期确定了。而且 Go 语言中即使是底层存的是一个类型,声明的类型不一样,也要强制转换才能互用。例如:type MyInt intvar i intvar j MyInt这里的 i 和 j 类型不一致 ,如果需要进行比较或者加减运算 ,需要强制转换类型。注意:在 Go 语言里面没有隐式转换,遇到不同类型想互用,只能进行强制类型转换。空接原创 2017-12-14 10:58:33 · 1812 阅读 · 0 评论 -
Golang从入门到精通(十八):Golang并发编程之Goroutine
进程,线程,并行和并发一个应用程序是运行在机器上的一个进程;进程是一个运行在自己内存地址空间里的独立执行体。一个进程由一个或多个操作系统线程组成,这些线程其实是共享同一个内存地址空间的一起工作的执行体。几乎所有’正式’的程序都是多线程的,以便让用户或计算机不必等待,或者能够同时服务多个请求(如 Web 服务器),或增加性能和吞吐量(例如,通过对不同的数据集并行执行代码)。一个并发程序可以在一个处理器原创 2017-12-14 11:02:12 · 3446 阅读 · 0 评论 -
Golang从入门到精通(十九):Golang并发编程之Channel
Go语言并发模型Go 语言中使用了CSP模型来进行线程通信,准确说,是轻量级线程goroutine之间的通信。CSP模型和Actor模型类似,也是由独立的,并发执行的实体所构成,实体之间也是通过发送消息进行通信的。Actor模型和CSP模型区别Actor之间直接通讯,而CSP是通过Channel通讯,在耦合度上两者是有区别的,后者更加松耦合。 主要的区别在于:CSP模型中消息的发送者和接收者之间通过原创 2017-12-14 11:04:14 · 1793 阅读 · 0 评论 -
Golang从入门到精通(二十):Golang错误处理之error
Golang的错误处理是一个被大家经常拿出来讨论的话题(另外一个是泛型) 。Golang中引入error接口类型作为错误处理的标准模式,如果函数要返回错误,则返回值类型列表中肯定包含error。error处理过程类似于C语言中的错误码,可逐层返回,直到被处理。error基本用法error 类型实际上是抽象了 Error() 方法的 error接口,Golang使用该接口进行标准的错误处理。error原创 2017-12-14 11:07:47 · 3040 阅读 · 0 评论 -
Golang从入门到精通(二十一):Golang错误处理之panic-recover
Go 语言没有像 Java 和 .NET 那样的 try/catch 异常机制:不能执行抛异常操作。但是有一套 defer-panic-and-recover 机制。Golang中引入两个内置函数panic和recover来触发和终止异常处理流程,同时引入关键字defer来延迟执行defer后面的函数。一直等到包含defer语句的函数执行完毕时,延迟函数(defer后的函数)才会被执行,而不管包含d原创 2017-12-14 11:10:33 · 3046 阅读 · 0 评论 -
Golang从入门到精通(二十二):Golang错误处理之defer
Golang引入关键字defer来延迟执行defer后面的函数。一直等到包含defer语句的函数执行完毕时,延迟函数(defer后的函数)才会被执行,而不管包含defer语句的函数是通过return的正常结束,还是由于panic导致的异常结束。你可以在一个函数中执行多条defer语句,它们的执行顺序与声明顺序相反。defer简介在Go语言中,可以使用关键字defer向函数注册退出调用,即主调函数退出原创 2017-12-14 11:12:50 · 1329 阅读 · 0 评论 -
Golang从入门到精通(八):Golang数组
数组定义数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类型例如整形、字符串或者自定义类型。数组长度必须是一个常量表达式,并且必须是一个非负整数。需要强调:数组长度也是数组类型的一部分。Go语言数组数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素( element),原创 2017-12-12 23:55:55 · 5075 阅读 · 0 评论 -
Golang从入门到精通(七):Golang控制语句之switch
基本结构相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式,例如:switch var1 { case val1: ... case val2: ... default: ...}变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。原创 2017-12-12 15:15:43 · 2546 阅读 · 1 评论 -
PingCAP 分布式数据库TiDB介绍
PingCAP的分布式关系型数据库 TiDB 作为 Google F1 的开源实现,目前 TiDB 的两个子项目 (TiDB + TiKV) 在 GitHub 社区上已经总共收获超过 10000 个 Stars,在分布式数据库领域也是全球顶级的开源项目,共有来自全球各地的 90 多位代码贡献者,是 HackerNews 头条的常客。 TiDB 为什么如此受关注?作为一款 NewSQL 分布式数据库转载 2017-10-21 10:25:08 · 3197 阅读 · 0 评论 -
Golang中的map的使用
map创建创建1) make(map[KeyType]ValueType, initialCapacity)2) make(map[KeyType]ValueType)3) map[KeyType]ValueType{}4) map[KeyType]ValueType{key1 : value1, key2 : value2, ... , keyN : valueN}用4种方式分别创建数组,其原创 2017-10-29 17:15:38 · 3374 阅读 · 0 评论 -
Golang结构体和指针
结构体定义定义结构体和C语言一样,使用struct关键字。在结构体内部定义它们的成员变量和类型,只是类型要放到后面,并且变量之间不用逗号。如果成员变量的类型相同的话,可以把它们写到同一行。type Student struct { name string age int weight float32 score []int}结构体初始化可以变量初始化和指原创 2017-10-29 20:40:35 · 7330 阅读 · 2 评论 -
go指南练习:循环和函数
原地址:https://tour.go-zh.org/flowcontrol/8。作为练习函数和循环的简单途径,用牛顿法实现开方函数。在这个例子中,牛顿法是通过选择一个初始点 z 然后重复这一过程求 Sqrt(x) 的近似值:为了做到这个,只需要重复计算 10 次,并且观察不同的值(1,2,3,……)是如何逐步逼近结果的。 然后,修改循环条件,使得当值停止改变(或改变非常小)的时候退出循环。观察迭代原创 2017-10-21 22:02:31 · 492 阅读 · 0 评论 -
Go语言switch语句
Golang中的switch比起其他语言的switch更灵活,除了支持常规的切换,如下:switch i { case 0: fmt.Printf("0") case 1: fmt.Printf("1") case 2: fallthrough case 3: fmt.Printf("3"原创 2017-10-21 23:00:39 · 726 阅读 · 0 评论 -
golang channel阻塞问题解决
先看一段会死锁的代码:package mainimport ( "fmt")func f1(in chan int) { fmt.Println(<-in)}func main() { out := make(chan int) out <- 2 go f1(out)}单纯的out<-和<-in都会阻塞,只有两个同时进行了,才能继续执行。 这里你看上去原创 2017-10-22 10:35:28 · 13729 阅读 · 2 评论 -
go语言实现简易ftp客户端
Go语言实现的ftp库挺多的,我在这里尝试了一个简单的版本,地址https://github.com/dutchcoders/goftp。 先安装依赖:go get -u -v github.com/dutchcoders/goftp然后配置好ftp服务器,编译执行以下代码,代码包括列出列表和上传功能:package mainimport ( "github.com/dutchcoders原创 2017-10-22 15:17:31 · 9418 阅读 · 6 评论 -
Go语言中数组和slice的区别
Go语言中数组是具有固定长度而且拥有零个或者多个相同或相同数据类型元素的序列。由于数组长度固定,所以在Go语言比较少直接使用。而slice**长度可增可减**,使用场合比较多。在理解slice之前,我们还是了解下数组。数组Go语言数组中每个元素是按照索引来访问的,索引从0到数组长度减1。Go语言内置函数len可以返回数组中的元素个数。数组初始化的方式:var a [3] int //3个整数型的原创 2017-10-26 17:20:55 · 7128 阅读 · 1 评论 -
Golang字符串函数用法
本关必读字符串介绍字符串函数包代码示例本关必读字符串介绍几乎任何程序都离不开字符串,字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。Go语言字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。Go 代码使用 UTF-8 编码(且不能带 BOM),同时标识符支原创 2017-11-22 16:19:54 · 1461 阅读 · 0 评论 -
Golang从入门到精通(一):Golang介绍
介绍Go语言是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。为了方便搜索和识别,有时会将其称为Golang。Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。2012年,Go语言的创造者们发布了它的1.0版本。Go语言的创造者们包括Unix操作系统和B语言(C语言的前身原创 2017-12-12 09:37:12 · 16853 阅读 · 3 评论 -
Golang从入门到精通(二):Golang开发环境配置
跨平台特性Go语言和Java,Python一样,也是支持跨平台的。另外,Go语言还有黑科技:支持跨平台编译。比如你手头只有Mac系统,而你的用户有Linux和Windows的,他们也想用,你可以通过交叉编译出Linux和Windows上的可执行文件给他们用。另外,你甚至可以在32位平台的机器上以编译生成64位平台上的可执行程序。Windows下安装go语言官方下载地址:https://golang.原创 2017-12-12 09:44:59 · 5310 阅读 · 0 评论 -
Golang从入门到精通(三):Golang数据类型
在Go语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。数据类型Go语言按类别有以下几种数据类型:1.bool,一个字节,值是true或者false,不可以用0或者1表示(java中boolean占用4个字节,而boolean作为数组出现时,每个boolean占用1个字节)2.int/uint(原创 2017-12-12 14:46:03 · 3815 阅读 · 1 评论 -
Golang从入门到精通(四):Golang变量定义和初始化
变量命名原则Go语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。 但是字母不限于英文字母,所有UTF-8字符都可以。声明和初始化方式1.使用var关键字 声明和初始化变量的一般形式是使用 var 关键字,例如:var a int = 9注意,Go语言变量类型放在变量名之后!如果上面的代码段没有初始化值,那么变量就会被初始化为对应类型的零值。var a int这个代码片段声明了一个in原创 2017-12-12 14:56:43 · 5358 阅读 · 1 评论 -
Golang从入门到精通(六):Golang控制语句之for
for结构介绍Go语言只有for循环这一种循环结构。基本的for循环包含三个由分号分开的组成部分:1.初始化语句:在第一次循环执行前被执行 2.循环条件表达式:每轮迭代开始前被求值 3.后置语句:每轮迭代后被执行初始化语句一般是一个短变量声明,这里声明的变量仅在整个 for 循环语句可见。如果条件表达式的值变为 false,那么迭代将终止。注意:不像 C,Java,或者 Javascript 等原创 2017-12-12 15:12:11 · 5828 阅读 · 0 评论 -
Golang从入门到精通(五):Golang控制语句之if/else
if语句if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码。if condition { // do something }if-else结构定义如果存在第二个分支,则可以在上面代码的基础上添加 else 关键字以及另一代码块,这个代码块中的代码只有在条件不满足时才会执行。if 和 else原创 2017-12-12 15:05:45 · 10323 阅读 · 3 评论 -
Go语言报错cannot define new methods on non-local type
今天在写一段Golang代码时报错:package mainimport( "fmt")func Add(a ,b int){ //函数 fmt.Println(a+b)}func (a int) Add (b int){ //方法 fmt.Println(a+b)}报错信息如下:cannot define new methods on non-local原创 2017-11-27 22:55:28 · 11223 阅读 · 4 评论