golang

使用Sublime 2 配置GoLang语言

人盡茶涼 提交于 2020-02-16 01:50:02
一、准备工作: 1、下载Go语言包: https://code.google.com/p/go/downloads/list 2、下载Git: https://code.google.com/p/msysgit/downloads/list 3、下载Sublime 2: http://www.sublimetext.com/2 二、安装: 1、安装go(一路next),他会自动帮你配置环境变量 2、安装sublime(一路next) 3、安装git(一路next) 三、配置: 1、安装 Package Control ,在打开 Sublime Text 2以后,按下快捷键 Ctrl + ` ,打开命令窗行,`这个按键在Tab键的上面,我刚开始还没找到,呵呵。输入以下内容,并回车:    import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb')

sublime text 配置golang开发环境

女生的网名这么多〃 提交于 2020-02-16 01:48:33
一、准备工作: 1、下载Go语言包: https://code.google.com/p/go/downloads/list 2、下载Git: https://code.google.com/p/msysgit/downloads/list 3、下载Sublime 2: http://www.sublimetext.com/2 二、安装: 1、安装go(一路next),他会自动帮你配置环境变量 2、安装sublime(一路next) 3、安装git(一路next) 三、配置: 1、安装 Package Control ,在打开 Sublime Text 2以后,按下快捷键 Ctrl + ` ,打开命令窗行,`这个按键在Tab键的上面,我刚开始还没找到,呵呵。输入以下内容,并回车:   import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb')

Linux环境安装Golang

不羁的心 提交于 2020-02-15 19:12:57
命令行安装 yum install golang 默认安装目录/usr/lib/golang/ (不同系统不一样,可通过搜索golang关键字查找: find / -name golang) 卸载 yum remove golang 配置环境变量 手动安装 官网下载安装包: 链接 解压到 /usr/local/go 配置环境变量 # 打开 vim /etc/profile # 添加 export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin # 编译 source /etc/profile 是否需要配置GOPATH Go的1.11版本之后,已不再推荐使用GOPATH来构建应用了,使用Module方式构建 来源: https://www.cnblogs.com/kaituorensheng/p/12313067.html

【Golang】LeetCode-剑指Offer-面试题24-反转链表

♀尐吖头ヾ 提交于 2020-02-15 19:04:18
题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof 解法一:双指针迭代 我们可以申请两个指针: 第一个指针叫 pre,最初指向 null / nil 。 第二个指针 cur 指向 head,然后不断遍历 cur。 每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。 都迭代完了(cur 变成 null / nil了),pre 就是最后一个节点了。 动画演示如下: 引用自作者:wang_ni_ma 解法一代码 –执行时间:0 ms --消耗内存:2.5 MB /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func reverseList ( head * ListNode ) * ListNode { //cur:=head,这里省略了cur变量的定义

golang学习笔记(一):包,变量,函数

旧街凉风 提交于 2020-02-15 00:23:29
欢迎访问我的 博客 和 github ! go 语言学习笔记第一弹,来自 gotour ,以后要常写笔记,把自己学习笔记记录下来,就算只是笔记也要多写。 好记性不如烂笔头,也要多锻炼自己的写作能力。 说实话,今天很累了,最近在折腾操作系统内核,因为原先写了个bootloader,现在想要转向 grub 来,遇到坑太多了,已经两天了😭。 还是接触一点新知识简单的东西,来缓冲一下,脑子迷迷糊糊的。 package 每个Go程序由很多包组成。 程序都是从 main 包开始运行。 该程序正在使用导入路径为“ fmt”和“ math / rand”的软件包。 按照约定,程序包名称与导入路径的最后一个元素相同。 例如,“ math / rand”包包括以语句包rand开头的文件。 import 此代码将导入分组为带括号的“分解的”导入语句。 您还可以编写多个导入语句,例如: package main import ( "fmt" "math" ) func main() { fmt.Println(math.Pi) } 但是使用分解式import语句是一种很好的样式。 导出名称 在Go中,如果名称以大写字母开头,则导出该名称。 例如,Pizza是一个导出的名称,Pi也是,它是从math包导出的。 pizza和pi不以大写字母开头,所以它们不被导出。 在导入包时,您只能引用它导出的名称。任何

golang fatal error: all goroutines are asleep - deadlock!

梦想与她 提交于 2020-02-13 18:53:52
channel默认上是阻塞的,也就是说,如果Channel满了,就阻塞写,如果Channel空了,就阻塞读。阻塞的含义就是一直等到轮到它为止。单有时候我们会收到 fatal error: all goroutines are asleep - deadlock! 异常,这是如何呢? 代码例子: package main import "fmt" func main() { channel := make(chan string, 2) fmt.Println("1") channel <- "h1" fmt.Println("2") channel <- "w2" fmt.Println("3") channel <- "c3" // 执行到这一步,直接报 error fmt.Println("...") msg1 := <-channel fmt.Println(msg1) } 执行效果: 参考: http://stackoverflow.com/questions/26927479/go-language-fatal-error-all-goroutines-are-asleep-deadlock fatal error: all goroutines are asleep - deadlock! 出错信息的意思是: 在main goroutine线,期望从管道中获得一个数据

golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值

倖福魔咒の 提交于 2020-02-13 04:48:10
不可或缺的函数,在Go中定义函数的方式如下: func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { return } 通过函数定义,我们可以看到Go中函数和其他语言中的共性和特性 共性 关键字——func 方法名——funcName 入参——— a,b int,b string 返回值—— r,s int 函数体—— {} 特性 Go中函数的特性是非常酷的,给我们带来不一样的编程体验。 为特定类型定义函数,即为类型对象定义方法 在Go中通过给函数标明所属类型,来给该类型定义方法,上面的 p myType 即表示给myType声明了一个方法, p myType 不是必须的。如果没有,则纯粹是一个函数,通过包名称访问。packageName.funcationName 如: //定义新的类型double,主要目的是给float64类型扩充方法 type double float64 //判断a是否等于b func (a double) IsEqual(b double) bool { var r = a - b if r == 0.0 { return true } else if r < 0.0 { return r > -0.0001 } return r < 0.0001 } //判断a是否等于b

golang slice 切片原理

允我心安 提交于 2020-02-13 03:07:31
golang 中的 slice 非常强大,让数组操作非常方便高效。在开发中不定长度表示的数组全部都是 slice 。但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果就是在实际开发中碰到很多坑,以至于出现一些莫名奇妙的问题,数组中的数据丢失了。 下面我们就开始详细理解下 slice ,理解后会对开发出高效的程序非常有帮助。 这个是 slice 的数据结构,它很简单,一个指向真实 array 地址的指针 ptr , slice 的长度 len 和容量 cap 。 其中 len 和 cap 就是我们在调用 len(slice) 和 cap(slice) 返回的值。 我们来按照 slice 的数据结构定义来解析出 ptr , len , cap // 按照上图定义的数据结构 type Slice struct { ptr unsafe.Pointer // Array pointer len int // slice length cap int // slice capacity } 下面写一个完整的程序,尝试把golang中slice的内存区域转换成我们定义的 Slice 进行解析 package main import ( "fmt" "unsafe" ) // 按照上图定义的数据结构 type Slice struct { ptr unsafe

Golang 入门系列(十四)defer, panic和recover用法

社会主义新天地 提交于 2020-02-12 17:33:11
以前讲过golang 的基本语法。但是,只是讲了一些基础的语法,感兴趣的可以看看以前的文章, https://www.cnblogs.com/zhangweizhong/category/1275863.html ,前段时间有人问我defer,recover的用法。所以,还是统一的总结一下相关的关键字吧。 其实,Go语言是不支持 try…catch…finally 这种异常处理的,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。 在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,才使用Go中引入的Exception处理:defer, panic, recover。 一. defer 用法 defer的特性: 在函数返回之前, 调用defer函数的操作, 简化函数的清理工作. 在初接触到go时, 就被defer吸引住了,但是在使用defer关键字的时候,还是得注意这些: 1. 在defer表达式确定的时候,defer修饰的函数(后面统称为defered函数)的参数也就确定了 package mainimport ( "fmt")func main() { g()}func g() { i := 0 defer fmt.Println(i) i++

golang 接口interface{}、断言、switch type

為{幸葍}努か 提交于 2020-02-12 09:58:50
第一大部分 interface{} 可以接受任何类型的对象值 获取interface{}队形的数据类型,可以使用断言,或者 switch type 来实现 // Assertion project main.go package main import ( "fmt" ) type Bag struct { Key string } type Bag2 struct { Key int } func main() { var b1 interface{} var b2 interface{} b1 = Bag{Key: "1"} b2 = Bag2{Key: 0} //获取interface{}中存放的数据类型 //方法一: { //判断是否是Bag类型 若不是则置0 b, ok := b1.(Bag) fmt.Println("Bag类型 :", ok, "数据", b) } { //判断是否是Bag2类型 若不是则置0 b, ok := b2.(Bag2) fmt.Println("Bag2类型:", ok, "数据", b) } //方法二: switch v := b1.(type) { //v表示b1 接口转换成Bag对象的值 case Bag: fmt.Println("b1.(type):", "Bag", v) case Bag2: fmt.Println("b1.