![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
iRich_全栈
这个作者很懒,什么都没留下…
展开
-
golang-切片slice的创建
在创建一个新的切片是都会先创建一个长度为len的数组,并为其开辟一个cap长度为cap的额外空间,所以在cap范围类增加元素,数组的起始地址不会改变,否则会创建一个新的数组,即起始的位置发生改变数组创建代码intArr:=[...]int{1,2,3,4,5,6,7,9}//方式一指定开始和结束s:=intArr[1:3]//方式er指定开始和结束+容量s:=intArr[1:3:6...原创 2019-01-24 11:39:42 · 15517 阅读 · 0 评论 -
golang基础教程(十一)、方法
一、基本介绍在某些情况下,我们要需要声明(定义)方法。比如 Person 结构体:除了有一些字段外( 年龄,姓名…),Person 结构体还有一些行为比如:可以说话、跑步…,通过学习,还可以做算术题。这时就要用方法才能完成。Golang 中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是 struct二、方法的声明和调用type ...原创 2019-02-19 09:59:15 · 12000 阅读 · 0 评论 -
golang基础教程(四)、基本数据类型
一、整型1、基本介绍简单的说,就是用于存放整数值的,比如 0, -1, 2345 等等。2、分类int 的无符号的类型:即不区分正负数3、整型的使用细节Golang 各整数类型分:有符号和无符号,int uint 的大小和系统有关。Golang 的整型默认声明为 int 型func main() { var i int = 100 fmt.Printf("i 的类型%...原创 2019-02-13 17:20:03 · 15412 阅读 · 0 评论 -
golang基础教程(五)、基本数据类型的转换
Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换。一、数值类型转换1、基本语法表达式 T(v) 将值 v 转换为类型 TT: 就是数据类型,比如 int32,int64,float32 等等v: 就是需要转换的变量注意事项Go 中,数据类型的转换可以是从 表示范围小–>表示范围大,也...原创 2019-02-13 17:48:14 · 14115 阅读 · 0 评论 -
golang基础教程(六)、指针
基本数据类型,变量存的就是值,也叫值类型获取变量的地址,用&,比如: var num int, 获取 num 的地址:&num分析一下基本数据类型在内存的布局指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值比如:var ptr *int = &num举例说明:指针在内存的布局获取指针类型所指向的值,使用:*,比如:var ptr int, 使...原创 2019-02-13 17:53:21 · 13958 阅读 · 0 评论 -
golang基础教程(七)、数组
数组可以存放多个同一类型数据。数组也是一种数据类型,在 Go 中,数组是值类型。数组的快速入门我们使用数组的方法来解决养鸡场的问题对上面代码的总结使用数组来解决问题,程序的可维护性增加.而且方法代码更加清晰,也容易扩展数组定义和内存布局1、数组的定义var 数组名 [数组大小]数据类型var a [5]int赋初值 a[0] = 1 a[1] = 30 …2、数组在...原创 2019-02-13 18:23:21 · 13984 阅读 · 0 评论 -
golang基础教程
目录golang基础教程(一)、环境搭建golang基础教程(二)、开发规范及APIgolang基础教程(三)、变量与数据类型概述golang基础教程(四)、基本数据类型golang基础教程(五)、基本数据类型的转换golang基础教程(六)、指针golang基础教程(七)、数组golang基础教程(八)、切片未完待续…...原创 2019-02-14 15:31:00 · 32507 阅读 · 5 评论 -
golang基础教程(十八)、反射
一、基本介绍反射可以在运行时动态获取变量的各种信息, 比如变量的类型(type),类别(kind)如果是结构体变量,还可以获取到结构体本身的信息(包括结构体的字段、方法)通过反射,可以修改变量的值,可以调用关联的方法。使用反射,需要 import (“reflect”)反射重要的函数和概念重要的两个概念:Type 和 ValueType: 类型用来表示一个go类型。不是所有...原创 2019-03-02 15:47:57 · 8620 阅读 · 0 评论 -
golang基础教程(二十)、单元测试
golang基础教程一、基本介绍Go 语言中自带有一个轻量级的测试框架 testing 和自带的 go test 命令来实现单元测试和性能测试,testing 框架和其他语言中的测试框架类似,可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例。通过单元测试,可以解决如下问题:确保每个函数是可运行,并且运行结果是正确的确保写出来的代码性能是好的,单元测试能及时...原创 2019-03-02 16:23:18 · 8895 阅读 · 0 评论 -
go并发编程
目录Go并发编程之美(一)、go与java并发编程对比go并发编程之美(二)、go内存模型Go并发编程之美(三)、互斥锁Go并发编程之美(四)、条件变量Go并发编程之美(五)、CAS操作...原创 2019-03-06 09:19:23 · 6982 阅读 · 0 评论 -
go并发编程之美(一)、go与java并发编程对比
一、前言在Java中多线程之间是通过共享内存进行通信的,在go中多线程之间通信是基于消息的,go中的通道是go中多线程通信的基石。在java中创建的线程是与OS线程一一对应的,而在go中多个协程(goroutine)对应一个逻辑处理器,每个逻辑处理器与OS线程一一对应。每个线程要运行必须要在就绪状态情况下获取cpu,而操作系统是基于时间片轮转算法来调度线程占用cpu来执行任务的,每个OS线程...转载 2019-03-04 16:45:25 · 14514 阅读 · 1 评论 -
Go并发编程之美(三)、互斥锁
一、前言go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中互斥锁.二、互斥锁互斥锁是独占锁,同时只有一个线程可以获取该锁,其他线程则会被阻塞挂起,等获取锁的线程释放锁后,阻塞的线程中的一个才可以被唤醒并获取锁。本节我们使用独占锁来实现一个线程安...转载 2019-03-04 16:48:00 · 7018 阅读 · 0 评论 -
Go并发编程之美(四)、条件变量
一、前言go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中与锁相关的条件变量二、条件变量在java中条件变量是与具体的锁想关联的,在go中也是这样的。package mainimport ( "fmt" "sync" ...转载 2019-03-04 16:53:10 · 7105 阅读 · 0 评论 -
Go并发编程之美(五)、CAS操作
一、前言go语言类似Java JUC包也提供了一些列用于多线程之间进行同步的措施,比如低级的同步措施有 锁、CAS、原子变量操作类。相比Java来说go提供了独特的基于通道的同步措施。本节我们先来看看go中CAS操作二、CAS操作go中的Cas操作与java中类似,都是借用了CPU提供的原子性指令来实现。CAS操作修改共享变量时候不需要对共享变量加锁,而是通过类似乐观锁的方式进行检查,本质还...转载 2019-03-04 16:56:46 · 7157 阅读 · 0 评论 -
go并发编程之美(二)、go内存模型
一、前言Go语言的内存模型规定了一个goroutine可以看到另外一个goroutine修改同一个变量的值的条件,这类似java内存模型中内存可见性问题(Java内存可见性问题可以参考拙作:Java并发编程之美一书)。当多个goroutine并发同时存取同一个数据时候必须把并发的存取的操作顺序化,在go中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如sync包中的Mu...转载 2019-03-04 17:11:51 · 7223 阅读 · 0 评论 -
golang基础教程(十六)goroutine 和 channel使用
golang基础教程一、Go 协程和 Go 主线程Go 主线程(有程序员直接称为线程/也可以理解成进程): 一个 Go 线程上,可以起多个协程,你可以这样理解,协程是轻量级的线程[编译器做优化]Go 协程的特点有独立的栈空间共享程序堆空间调度由用户控制协程是轻量级的线程二、goroutine使用1、一个简单的案例在主线程(可以理解成进程)中,开启一个 goroutine...原创 2019-02-23 18:14:08 · 11854 阅读 · 1 评论 -
golang基础教程(十七)GO并发原理
golang基础教程一、GO并发原理1、并发(CONCURRENCY)和并行(PARALLELLISM)并发(CONCURRENCY):两个或两个以上的任务在一段时间内被执行。我们不必care这些任务在某一个时间点是否是同时执行,可能同时执行,也可能不是,我们只关心在一段时间内,哪怕是很短的时间(一秒或者两秒)是否执行解决了两个或两个以上任务。并行(PARALLELLISM):两个或两个...原创 2019-02-23 14:32:02 · 11175 阅读 · 1 评论 -
golang基础教程(十二)、继承
属性继承在go中使用的是匿名属性,来实现继承的;即将父类作为子类的匿名属性package mainimport "fmt"type Person struct { id int name string age int}type Student struct { Person id int score int className string}func...原创 2019-01-25 11:39:13 · 14786 阅读 · 2 评论 -
golang基础教程(十三)、接口、多态
空接口先看个fmt包中的方法 Println,(经常用来打印输出的)func Println(a ...interface{}) (n int, err error) { return Fprintln(os.Stdout, a...)}这里的 interface{} 就是一个空接口,它表示可以接受任意对象;在go中空接口也是一中数据类型(有点类似java中的Object)func ...原创 2019-01-25 14:09:53 · 17144 阅读 · 2 评论 -
golang基础教程(十四)异常处理
编写的程序难免有异常,异常分为:编译时异常:在编译时抛出的异常,编译不通过,语法使用错误,符号填写错误等等。。。运行时异常:在程序运行时抛出的异常,这个才是我们将要说的,程序运行时,有很多状况发生,例如:让用户输入一个数字,可用户偏偏输入一个字符串,导致的异常,数组的下标越界,空指针等等。。。。简单的异常案例一个简单的运行时异常场景…package mainimport "fmt...原创 2019-01-25 22:09:09 · 15062 阅读 · 0 评论 -
golang基础教程(一)、环境搭建
一、安装和配置 SDK推荐安装1.11+版本,这个版本支持vgo包管理;教程中的是1.9.2的Windows 安装和配置 SDK1. 下载 SDK 工具包Go 语言的官网为:golang.org , 因为各种原因,可能无法访问。SDK 下载地址:Golang 中国 https://studygolang.com/dl如何选择对应的 sdk 版本Windows 下:根据自己系统是 ...原创 2019-01-28 11:42:31 · 20415 阅读 · 2 评论 -
golang基础教程(二)、开发规范及API
在go语言中代码的规范很重要,符号的位置,无用的包等官方都有严格的要求(其实goland在编写代码时就会提醒的!!)一、注释用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性;注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。1、行注释基本语法// 注释内容举例:package mainimport "fmt"fu...原创 2019-01-28 12:07:30 · 17175 阅读 · 5 评论 -
golang-协程(累加小案例)
之前有写一个java版本得,异步执行需要150ms左右,go则只需要100毫秒相当于加一次,这里的异步得效率比java要好很多啊java版本的累加原始版本:func add(a int) int { //假设处理业务逻辑需要100ms time.Sleep(time.Millisecond * 100) return a}func main() { sum := 0 sta...原创 2019-01-28 13:42:21 · 14967 阅读 · 1 评论 -
golang基础教程(十九)、tcp网络编程
利用go的tcp网络编程Api实现一个简单的http服务器,直接上代码(涉及的概念较多)package mainimport ( "fmt" "net" "strconv")//用来转化int为stringtype Int intfu原创 2019-01-28 16:46:08 · 14522 阅读 · 0 评论 -
golang基础教程(八)、切片
一、切片的基本介绍切片的英文是 slice切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度 len(slice)都一样。切片的长度是可以变化的,因此切片是一个可以动态变化数组。切片定义的基本语法:var 切片名 []类型比如:var a [] int示例:func main() { var...原创 2019-02-14 20:34:07 · 13626 阅读 · 0 评论 -
golang基础教程(九)、map
一、map 的基本介绍map 是 key-value 数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到二、map 的声明1、基本语法var map 变量名 map[keytype]valuetypekey 可以是什么类型golang 中的 map,的 key 可以是很多种类型,比如 bool, 数字,string, 指针, channel , 还...原创 2019-02-15 18:39:12 · 13051 阅读 · 0 评论 -
golang基础教程(十)、结构体
一、Golang 语言面向对象编程说明Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。Golang 没有类(class),Go 语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解 Golang 是基于 struct 来实现 OOP 特性...原创 2019-02-15 19:27:17 · 13534 阅读 · 0 评论 -
golang基础教程(三)、变量与数据类型概述
一、变量变量的介绍变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量(值)变量的使用步骤声明变量(也叫:定义变量)非变量赋值使用变量二、go中变量的使用1、变量的声明,初始化和赋值2、三种使用方式2.1 指定变量类型,声明后若不赋值,使用默认值package maini...原创 2019-01-30 11:52:59 · 15787 阅读 · 1 评论 -
golang基础教程(十五)文件操作
golang基础教程一、文件的基本介绍文件的概念文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的 word 文档,txt 文件,excel 文件…都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音…输入流和输出流os.File 封装所有文件相关操作,File 是一个结构体二、文件的基本操作1、打开文...原创 2019-02-23 12:38:19 · 10988 阅读 · 0 评论 -
golang基础教程(附录一)Golang代理配置,解决google包无法下载的问题
前言在开发go项目时经常会用到 golang.org/x下的包,但这个通常无法下载,例如:go get golang.org/x/net: unrecognized import path "golang.org/x/net" (https fetch: Get https://golang.org/x/net?go-get=1: dial tcp 216.239.37.1:443: conn...原创 2019-05-16 20:32:52 · 2789 阅读 · 0 评论