![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go学习
文章平均质量分 51
九大第一剑修
这个作者很懒,什么都没留下…
展开
-
Java转Go语言 -13
goroutine 和 channel并发,并行和协程1)协程和线程没有对应关系,协程是根据一个或多个线程的可用性,映射(多路复用,执行于)在他们之上的;协程调度器在 Go 运行时很好的完成了这个工作。2)只有 gc 编译器真正实现了协程,适当的把协程映射到操作系统线程。使用 gccgo 编译器,会为每一个协程创建操作系统线程。协程间的信道1)通道是为了避免使用共享变量来通信而创建的2)通道只能传输一种类型的数据3)通道也是引用类型4)单纯地out<-和<-in都会阻塞,只有两个原创 2021-01-25 21:30:19 · 154 阅读 · 0 评论 -
Java转Go语言 -12
The way go to go 的十三章总结错误处理与测试相对于Java的try/catchGo自己有一套 defer-panic-and-recover机制相对于java,Go对于错误的处理:1) 不会从底层抛异常到更高层(太耗费资源)2)通过在函数和方法中返回错误对象作为它们的唯一或最后一个返回值——如果返回 nil错误处理错误值是用来表示异常状态也可以自定义错误状态,fmt.Printf会自动调用String()方法所以可以打印出来。注意 你自己的错误信息不要大写字母开头如果想原创 2021-01-21 21:18:58 · 387 阅读 · 1 评论 -
Java转Go语言 -11
读写数据在Go语言中用到bufio包来处理缓冲的输入和输出。读取用户的输入Scanln扫描来自标准输入的文本,将空格分隔的值依次存放到后续的参数内,直到碰到换行。Scanf第一个参数用作格式字符串,用来决定如何读取。这一节就讲了讲如何读取输入。*注意:*Unix和Windows的行结束符是不一样的。读文件文件拷贝注意: defer的使用从命令行读取参数JSON数据格式JASON被用于web后端和浏览器之间的通讯。GO语言的json包可以在程序中更方便地读取和吸入JSON数据。注意原创 2021-01-21 16:08:00 · 108 阅读 · 0 评论 -
Java转Go语言 -10
接着第九部分总结类型判断:type-switch处理来自外部的,类型未知的数据时,比如解析XML或者JSON编码的数据,类型测试和转换很有用。测试一个值是否实现了某个接口1)在Go语言中 接口将类型能做什么和如何做分离开来,这就是多态的本质2)注意 这里的说法,测试 (一个值)是否实现了某个接口,并不是某个对象使用方法集与接口作用于变量上的方法实际上是不区分变量到底是指针还是值1)指针方法可以通过指针调用2)值方法可以通过值调用3)接收者是值的方法可以通过指针调用,因为指针会首先被解引用原创 2021-01-21 15:23:40 · 228 阅读 · 0 评论 -
Java转Go语言 -9
The way go to go 第十一章总结 接口(interface)与反射(reflection)接口是什么接口值=一个具体的类型(动态类型) 类型的值(动态值)这两部分组成对于接口的零值,类型和值的部分都是nil接口值本质是一个指针,但是指向接口值的指针是非法的。var w io.Writerw = os.Stdout// 1)将*os.File类型的值给了ww = new(bytes.Buffer)// 2)*bytes.Buffer的值付给接口值w = nil// 3)这原创 2021-01-18 15:18:45 · 550 阅读 · 0 评论 -
Java转Go语言 -8
The way go to go 第十章总结(结构和方法):结构体定义数组也是可以看做结构体的,不过它使用下标而不是具体的字段还是之前的一个注意点,创建方式有两种1) var t *T = new(T) 这种事分配内存,返回指向已分配内存的指针,t := new(T), t是指向T的指针,结构体里面是所属类型的零值;2)var t T 也会分内存,零值化,但返回的是类型T不是指针。注意: struct变量.成员 或者struct指针.成员 来访问变量(其实我这点有点不理解,为什么指针.的原创 2021-01-17 20:29:13 · 324 阅读 · 0 评论 -
Java转Go语言 -7
The way go to go 第九章总结标准库概述就是一些包的概述regexp包一般情况下,必须先将正则模式通过compile方法返回一个regexp对象锁和sync包map在Go中是不安全的跟锁的设计很像 sync.Mutx 是一个互斥锁,RWMutex是一个读写锁使用锁的情况当然会导致效率问题,goroutines和channels就要派上用场了(Go中提倡的用来实现并发的技术)精密计算和big包关注点:Go也是不支持运算符重载运算可以链式调用不必创建临时变量来存储,节省原创 2021-01-12 20:47:32 · 113 阅读 · 0 评论 -
Java转Go语言 -6
The way go to go 第八章总结之前一章总结了数组和切片。但是没有深度思考,就比如说为什么Go中数组被设计成值而不是设计成引用?像这样的问题。思考了一下,array固定长度,一旦被初始化分配好了,就固定占用那么多内存空间,是连续的,不能缩短或者加长。但是slice不一样,他实现了动态伸缩数组的需求。可以这样说,array用于底层设计,我们平时使用就使用slice就可以了(同时Go语言也一直按时“不要使用array”)Map概念申明,初始化和makemap是引用类型 内存用mak原创 2021-01-12 16:21:05 · 100 阅读 · 1 评论 -
Java转Go语言-5
The way go to go第七章总结数组与切片针对容器切片是建立在Go语言数组类型之上的抽象声明和初始化数组长度最大是2GbGo中数组是一种值类型,换句话说当数组作为参数传递给函数的时候,会发生拷贝现象(与C不同的地方),想要修改的话,利用&,或者生成数组切片。可以取任意数组常量的地址来作为指向新实例的指针切片切片是一个长度可变的数组切片是引用(类似于C中的数组类型,java中的数组同样属于引用)注意new和make之间的区别:new函数分配内存;返回指针,获原创 2021-01-11 16:36:42 · 140 阅读 · 0 评论 -
深入了解闭包思想
前几天在学习JavaScript并且复习Go语言,都看到了一个闭包的概念,因为之前一直使用的是java,同时觉得闭包应用很有趣,就想探究一下闭包在java中的使用。因为作者水平有限,如有不足之处请赐教。首先是闭包的定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境),简单来说引用环境是外部(为一个外部变量),函数是内部,这样的说法有助于我们理解之后说的内容。对于 闭 的理解:闭,封闭的不是外部空间,一个函数怎么可以封闭外部空间呢?封闭的是内部空间(举个例子,你在国内隔离,原创 2021-01-11 11:25:15 · 200 阅读 · 1 评论 -
Java转Go语言 -4
The way go to go的六章总结函数(function)介绍Go语言是编译型语言,编译成机器语言,优点是执行速度快。(C语言)Java是解释性语言,先编译成class文件,然后根据不同的操作系统再进行解释。函数参数,返回值以及返回值的类型被称为函数签名;Go中不允许函数重载;(重载需要类型匹配影响性能;这样的话,只需要函数调度)函数可以相互比较(前提是引用的是相同函数或者nil);但是不能嵌套(解决方案是会用匿名函数)Go没有泛式,最好是为每一个类型单独创建一个函数,这样代码可读性原创 2021-01-10 21:08:55 · 338 阅读 · 1 评论 -
Java转Go语言 -3
The way go to go第五章总结if-lese关键字 if 和 else之后的左大括号必须和else if关键字在同一行runtime.GOOS可以用来判断操作系统类型简短方法 := 声明的变量的作用域只存在于 if 结构,会覆盖外面的定义测试多返回值函数的错误这个叫 comma,ok模式,之前看其他书的时候没有发觉到这个的好处,以为仅仅是返回多个值而已,但是更加重要的好处是:表示是否执行成功。这个模式基于:程序应该在最接近的位置检查所有相关的错误错误发生之后,os.Exi原创 2021-01-10 15:41:29 · 400 阅读 · 0 评论 -
Java转Go语言-2
今天接着昨天看的内容往下看,看多少随缘吧,毕竟还有毕业论文要修改的。Go程序的执行顺序如下1)按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程:2)如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次。3)然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数。4)在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序。Go语言中不存在隐式类型转换,都必须是显示转化编译期间自原创 2021-01-07 13:45:43 · 210 阅读 · 0 评论 -
Java转Go语言的总结
去年9,10月份的时候,抽空学习了一下Go语言,但是后来忙于学会论文投稿的事情,最近就没有学习Go,现在用Go做做实战项目,结果发现很多都忘记了(而且之前的电脑坏掉了,写的那些代码也没有留下来),于是打算这几天抽空看一下Go语言。之下就是一些总结(这次换了一本书 the way go to go)Go编译器产生的是本地可执行代码(机器码),运行在runtime上,相当于java的虚拟机,Go的runtime嵌入到了每一个可执行文件中。Go不需要依赖其他的文件,他是静态链接的(将运行需要的函数代码都放到原创 2021-01-06 21:25:18 · 964 阅读 · 0 评论