Go语言中文网 为您找到相关结果 5578

Golang 获取系统环境变量

Golang 要获取系统的环境变量需要使用os包中的env 导入”os”包通过os包中的Getenv方法来获取 func Getenv(key string) string { } 示例代码: package main import "fmt" import "os" func main(){ var JAVAHOME string JAVAHOME = os.Getenv("JAVA_HOME") fmt.Println(JAVAHOME) } $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering =...阅读全文

博文 2015-06-17 20:03:45 happinessaflower

Go Context的踩坑经历

0 引言context是Go中广泛使用的程序包,由Google官方开发,在1.7版本引入。它用来简化在多个go routine传递上下文数据、(手动/超时)中止routine树等操作,比如,官方http包使用context传递请求的上下文数据,gRpc使用context来终止某个请求产生的routine树。由于它使用简单,现在基本成了编写go基础库的通用规范。笔者在使用context上有一些经验,遂分享下。本文主要谈谈以下几个方面的内容:context的使用。context实现原理,哪些是需要注意的地方。在实践中遇到的问题,分析问题产生的原因。1 使用1.1 核心接口Contexttype Context interface { // Deadline returns the time wh...阅读全文

博文 2018-03-13 14:26:18 包增辉

go语言的urlencode编码使用方式

1,首先我们可以查看godoc.com下的net/url https://godoc.org/net/url 2,我们来看下演示代码 package main import ( "crypto/md5" "flag" "fmt" "net/url" "strings" "time" ) func main() { fmt.Println("./timetoken -t 3600 -key key -url url") var t int64 var key string var resUrl string flag.Int64Var(&t, "t", 0, "expire timestamp") flag.StringVar(&key, "key", "", "encrypt key") f...阅读全文

博文 2016-06-12 19:00:04 guoer9973

Go interface详解

如Go method中提及,Golang没有明确支持多态,但是通过其他手段可以实现类似C++中的多态特性,即本文中即将介绍的Go interface功能。 interface定义   interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现。请注意:此处限定是一组方法,既然是方法,就不能是变量;而且是一组,表明可以有多个方法。再多声明一点,interface本质上是一种类型,确切的说,是指针类型,此处暂且不多表,后文中自然能体会到。   interface是为实现多态功能,多态是指代码可以根据类型的具体实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值。 type 接口名称 inter...阅读全文

博文 2019-03-06 19:34:40 北春南秋

安装Go运行环境

Go运行环境安装与配置 官网下载地址如下: https://golang.org/dl/ 若没搭×××无法访问的话,可以到以下地址下载: https://studygolang.com/dl 然后选择符合自己操作系统的安装包进行下载,我这里选择的是windows的: windows下的安装十分简单,直接下一步下一步就可以了,而且会自动配好环境变量,所以这里就不演示安装过程了。安装好后打开cmd执行go version命令进行验证即可: 关于环境变量: 虽然安装工具已经帮我们自动配置好了环境变量,但是go对环境变量有一定的要求,所以这里简单说明一下。 首先你要了解对应操作系统的环境变量怎么配置,以及影响的范围,篇幅有限不赘述。这里假设你的go安装路径为 C:\app\go下。第一个需要配置的环...阅读全文

博文 2018-10-25 18:35:10 ZeroOne01

Go 系列教程 —— 7. 包

这是 Golang 系列教程的第 7 个教程。 ### 什么是包,为什么使用包? 到目前为止,我们看到的 Go 程序都只有一个文件,文件里包含一个 main [函数](https://studygolang.com/articles/11892)和几个其他的函数。在实际中,这种把所有源代码编写在一个文件的方法并不好用。以这种方式编写,代码的重用和维护都会很困难。而包(Package)解决了这样的问题。 **包用于组织 Go 源代码,提供了更好的可重用性与可读性**。由于包提供了代码的封装,因此使得 Go 应用程序易于维护。 例如,假如我们正在开发一个 Go 图像处理程序,它提供了图像的裁剪、锐化、模糊和彩色增强等功能。一种组织程序的方式就是根据不同的特性,把代码放到不同的包中。比如裁剪可以是...阅读全文

博文 2017-12-08 14:11:32 heyulong

Go学习笔记之:if else 条件判断

Go语言的条件判断结构也很简单。 package main import "fmt" func main() { // 基本的例子 if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } // 只有if条件的情况 if 8%4 == 0 { fmt.Println("8 is divisible by 4") } // if条件可以包含一个初始化表达式,这个表达式中的变量 // 是这个条件判断结构的局部变量 if num := 9; num < 0 { fmt.Println(num, "is negative") } else if num < 10 { fmt.Println(num, "has ...阅读全文

博文 2014-11-27 23:00:03 Goopand

Go 系列教程 —— 4. 类型

这是我们 Golang 系列教程的第 4 个教程。 请阅读本系列的 [Golang 教程第 3 部分:变量](/articles/11756) 来学习变量的知识。 下面是 Go 支持的基本类型: - bool - 数字类型 - int8, int16, int32, int64, int - uint8, uint16, uint32, uint64, uint - float32, float64 - complex64, complex128 - byte - rune - string ### bool bool 类型表示一个布尔值,值为 true 或者 false。 ```go package main import "fmt" func main() { a := true b :...阅读全文

博文 2017-12-07 06:24:41 heyulong

golang解析json格式

golang解析json格式 项目中客户端和服务端的交互数据部分为json,因此在服务端就得解析,复杂的json解析起来其实还是挺费劲的。 交互的数据类似如下格式: {"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":0,"w":"还"}]},{"bg":0,"cw":[{"sc":0,"w":"有点"}]},{"bg":0,"cw":[{"sc":0,"w":"眼熟"}]}]} 需要将json格式中的w字段取出来,并且拼成结果串进行展示 从json数组中获取ws ws是数组,数组元素为object cw是数组,数组元素为object w是string 从cw遍历获取w字段 初步实现如下: func RecResultJson...阅读全文

博文 2016-02-21 17:00:02 qq_33204116

《Golang 入门系列一》安装和IDE介绍

前言:本文主要介绍Golang的安装和Golang的编辑器的使用,以及我们的第一个经典案例:Hello World. 一、为什么是Golang Golang 又称为 Go,是由 Google 开发的一种开源的、编译型的、静态类型的编程语言。它具有以下特性: Go原生支持并发(Concurrency),因此非常适合编写多线程程序。 Golang 是编译型语言。源代码会被编译成可执行的二进制文件。 Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。 二、Golang开发工具包的选择 我们可以根据自己的机器操作系统选择相应的开发工具包,比如你的是Windows 64位的,就选择windows-amd64的工具包;是L...阅读全文

博文 2017-12-10 15:03:07 IT--小哥

Go os包

package main import ( "fmt" "io/ioutil" "os" "reflect" "time" ) func main() { dir, _ := os.Getwd() fmt.Println("dir:", dir) err := os.Chdir("d:/project/test2") dir, _ = os.Getwd() fmt.Println("dir:", dir) //参数不区分大小写 //不存在环境变量就返回空字符串 len(path) = 0 path := os.Getenv("gopath") fmt.Println(path) //返回有效group id egid := os.Getegid() fmt.Println("egid:", ...阅读全文

博文 2014-10-31 03:00:01 yumuxu

golang在Windows下Sublime Text开发调试环境的配置

一、前言 近期本人有工作调动,进入了一个全新的领域[golang]服务端开发。在此写下本文,希望给那些没接触过golang开发调试环境及还在犹豫选择那家golang IDE而纠结的朋友们一点点帮助,如果你从中得到了受益并且同时拥有博客园账户的话,衷心希望能得到你的一个小小[推荐]以资鼓励。 本人操作系统为Windows 8.1 64bit,开发工具选择如下:go1.4.2.windows-amd64Sublime Text 2(插件GoSublime/GoGdb) gdb、gcc(安装mingw-w64后即可包含) git 二、golang安装 下载你需要的golang版本,本人下载go1.4.2.windows-amd64.zip解压到c:\盘 = 配置golang环境变量 = GOARC...阅读全文

博文 2015-03-31 03:00:00 highend

如何为Linux安装Go语言

导读 Go 语言又称为 golang, 是由 Google 最初开发的一种开源编程语言,其在设计时就遵循了简单、安全和速度的 3 大原则。Go 语言具有多种调试、测试、分析和代码审查工具,如今 Go 语言和工具已在大多数 Linux 发行版本的源库中进行提供,本文我就来说明如何为 Linux 安装 Go 语言。 Ubuntu、Debian或Linux Mint安装Go语言 基于 Debian的 Linux 发行版本都可以使用 apt-get 命令来进行安装: sudo apt-get install golang 要查看当前系统安装的 Go 语言版本可以使用如下命令: go version 由于 Go 代码必需保存在 workspace(工作区)中,所以我们必需在 Home 目录(例如 ~/...阅读全文

博文 2016-07-08 08:00:00 linux130

golang变量作用域问题-避免使用全局变量

最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿。 变量作用域 全局变量的作用域是整个包,局部变量的作用域是该变量所在的花括号内,这是一个很基础的问题。我们通常会使用golang的一个语法糖:=来给变量赋值,这种方式可以节省掉我们定义变量的代码,让代码变的更加简洁,但是如果你定义了一个全局变量,又不小心用:=来给它赋值,就会出现一些问题。 问题 看下面的代码,定义了一个全局变量t,我想在init()中给他赋值为2,然后在main中使用它。 var t int func init() { t, err := strconv.Atoi("2") if err != nil { log.Fatall...阅读全文

博文 2018-02-03 15:34:37 andyidea

关于golang中包(package)的二三事儿

golang的package和其他语言的组织方式完全不同,刚开始接触时,很不适应。 golang的package的特点: 1、go的package不局限于一个文件,可以由多个文件组成。 组成一个package的多个文件,编译后实际上和一个文件类似,组成包的不同文件相互之间可以直接引用变量和函数,不论是否导出; 因此,组成包的多个文件中不能有相同的全局变量和函数(这里有一个例外就是包的初始化函数:init函数,下面还有讨论) 2、go不要求package的名称和所在目录名相同,但是你最好保持相同,否则容易引起歧义。因为引入包的时候,go会使用子目录名作为包的路径,而你在代码中真正使用时,却要使用你package的名称。 3、每个子目录中只能存在一个package,否则编译时会报错。 4、go的...阅读全文

博文 2014-10-04 19:26:02 dajianshi

go中包的概念、导入与可见性

包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容。 如同其它一些编程语言中的类库或命名空间的概念,每个 Go 文件都属于且仅属于一个包。一个包可以由许多以 .go 为扩展名的源文件组成,因此文件名和包名一般来说都是不相同的。 你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 一个应用程序可以包含不同的包,而且即使你只使用 main 包也不必把所有的代码都写在一个巨大的文件里:你可以用一些较小的文件,并且在每个文件非注释的第一行都使用 package main 来指明这些文件都属于 main 包...阅读全文

博文 2016-05-25 14:00:02 Ellon-Daris

GO语言学习(一)--从安装开始

Go语言是Google 2009发布的开源编程语言。 Go语言简洁、高效,专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Go是一个快速的静态类型编译语言,但给人感觉就像是一种动态类型的解释语言。 下载安装包 Go语言的安装包在这个地址下载 http://golang.org/dl/ (国内可能需要代理),目前的最新版本是go1.3.1。选择适合自己操作系统的安装包下载。 安装 1. Linux, Mac OS X,和FreeBSD 压缩包安装 下载相应的包文件,然后解压到 /usr/local 目录中,如下: tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz 其中...阅读全文

博文 2014-11-06 20:00:01 imeisa

Go 系列教程 —— 23. 缓冲信道和工作池(Buffered Channels and Worker Pools)

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 23 篇。 ## 什么是缓冲信道? 在[上一教程](https://studygolang.com/articles/12402)里,我们讨论的主要是无缓冲信道。我们在[信道](https://studygolang.com/articles/12402)的教程里详细讨论了,无缓冲信道的发送和接收过程是阻塞的。 我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况,才会阻塞向缓冲信道(Buffered Channel)发送数据。同样,只有在缓冲为空的时候,才会阻塞从缓冲信道接收数据。 通过向 `make` 函数再传递一个表示容量的参数(指定缓冲的大小),可以创建缓冲信...阅读全文

博文 2018-03-06 23:15:05 heyulong

go语言注释

Go语言注释实例代码教程 - Go支持C语言风格的/* */块注释,也支持C++风格的//行注释。 当然,行注释更通用,块注释主要用于针对包的详细说明或者屏蔽大块的代码。 每个包都应有一个包注解,即 package 前的块注解。对多个文件的包,包注解只需出现在一个文件中,随便哪个。包注解应该介绍此包,并作为一个整体提供此包的对应信息。它首先出现在 godoc 页面,来安排好后续的详细文档。 包如果简单,注释可以简短。 注解不需多余排版如星星横幅等。生成的结果呈现时可能不是等宽字体,所以不要靠空格对齐, godoc,类似 gofmt 照管这些。最后,注解是不加解释的文本,HTML和其他例如 _this_ 会原样照搬,所以应 避免使用。 在包里,紧跟顶层声明前的注解作为此声明的文注解,程序中每个...阅读全文

博文 2016-04-11 03:00:01 zsy

golang日志库glog解析

##glog简介 glog是著名的[google开源C++日志库glog](http://code.google.com/p/google-glog)的golang版本,glog是一个轻量级的日志库,上手简单不需要配置文件并且稳定高效,但是可以自定义控制的内容就少了。 glog主要有以下几个特点: 1. glog有四种日志等级INFO < WARING < ERROR < FATAL,不同等级的日志是打印到不同文件的,低等级的日志文件中(INFO)会包含高等级的日志信息(ERROR) 2. 通过命令行传递参数 --log_dir指定日志文件的存放目录,默认为os.TempDir() 3. 可以根据文件大小切割日志文件,但是不能根据日期切割日志文件 4. 日志输出格式是固定的(Lmmdd hh...阅读全文

博文 2016-06-11 16:32:06 shanks

beego模板语法 go语言模版语法

基本语法 go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号。如果您想要修改为其它符号,可以参考 模板标签。 使用 . 来访问当前位置的上下文 使用 $ 来引用当前模板根级的上下文 使用 $var 来访问创建的变量 模板中支持的 go 语言符号 {{"string"}} // 一般 string {{`raw string`}} // 原始 string {{'c'}} // byte {{print nil}} // nil 也被支持 模板中的 pipeline 可以是上下文的变量输出,也可以是函数通过管道传递的返回值 {{. | FuncA | FuncB | FuncC}} 当 pipeline 的值等于: false 或 0 nil 的指针或 interface 长度...阅读全文

博文 2015-06-17 23:00:30 Libra412

golang 处理Json 数组

今天遇到个接口需要处理一个json的map类型的数组,开始想法是用simple—json里的Array读取数组,然后遍历数组取出每个map,然后读取对应的值,在进行后续操作,貌似很简单的工作,却遇到了一个陷阱。 Json格式类似下边: {"code":0 ,"request_id": xxxx ,"code_msg":"" ,"body":[{ "device_id": "xxxx" ,"device_hid": "xxxx" }] , "count":0} 很快按上述想法写好了带码,但是以外发生了,编译不过,看一看代码逻辑没有问题,问题出在哪里呢? 原来是interface{} Array方法返回的是一个interface{}类型的,我们都在golang里interface是一个万能的接受...阅读全文

博文 2014-10-04 19:26:13 u010471121

golang反射中函数和方法的调用

golang反射中函数和方法的调用 上一篇文章说到了golang中的反射的一些基本规则,重点就是文章中最后的三点,但是这篇文章并没有说如何在反射中调用函数和方法,这就是接下来要谈的。 反射中调用函数 众所周知,golang中的函数是可以像普通的int、float等类型变量那样作为值的,例如: package main import "fmt" func hello() { fmt.Println("Hello world!") } func main() { hl := hello hl() } prints: hello world! 既然函数可以像普通的类型变量一样可以的话,那么在反射机制中就和不同的变量一样的,在反射中函数和方法的类型(Type)都是reflect.Func,如果要调用...阅读全文

博文 2014-10-06 10:08:32 wowzai

windows搭建golang开发平台

Golang是谷歌开发的一款开源性语言,暂时比较方便的IDE有Inteillj Idea、LiteIDE、Eclipse(Golipse)等,使用起来比较方便的IDE:LiteIDE和Inteillj IDEA,但是Inteillj IDEA插件更新太慢,以及存在一些问题(go sdk版本支持为1.2,当前最新的SDK版本是1.4Beta)。LiteIDE是一个Gubit开源项目,现在已经更新至24.2版本。 搭建golang环境步骤,这里只介绍LiteIDE的。 1、下载golang SDK安装包(最新1.4Beta,支持android NativeClient so库开发) golang SDK包分为zip版和msi版本,下载地址在:http://golangtc.com/downloa...阅读全文

博文 2014-11-08 13:00:05 yugeCsc

go语言25个关键字总结

var和const :变量和常量的声明 var varName type 或者 varName : = value package and import: 导入 func: 用于定义函数和方法 return :用于从函数返回 defer someCode :在函数退出之前执行 go : 用于并行 select 用于选择不同类型的通讯 interface 用于定义接口 struct 用于定义抽象数据类型 break、case、continue、for、fallthrough、else、if、switch、goto、default 流程控制 chan用于channel通讯 type用于声明自定义类型 map用于声明map类型数据 range用于读取slice、map、channel数...阅读全文

博文 2014-10-04 19:26:29 T_star

golang学习之指针、内存分配

1 func pointer_test() { 2 //空指针,输出为nil 3 var p *int 4 fmt.Printf("p: %v\n", p) 5 //指向局部变量,变量值初始为0 6 var i int 7 p = &i 8 fmt.Printf("p: %v,%v\n", p, *p) 9 //通过指针修改变量数值 10 *p = 8 11 fmt.Printf("p: %v,%v\n", p, *p) 12 //数组的初始化及输出 13 m := [3]int{3, 4, 5} 14 fmt.Printf("m:%v--%v,%v,%v\n", m, m[0], m[1], m[2]) 15 //指针数组的初始化及输出 16 //j, k, l := 3, 4, 5 17...阅读全文

博文 2015-03-23 14:00:00 neujie

go语言坑之for range

go只提供了一种循环方式,即for循环,在使用时可以像c那样使用,也可以通过for range方式遍历容器类型如数组、切片和映射。但是在使用for range时,如果使用不当,就会出现一些问题,导致程序运行行为不如预期。比如,下面的示例程序将遍历一个切片,并将切片的值当成映射的键和值存入,切片类型是一个int型,映射的类型是键为int型,值为*int,即值是一个地址。 package main import "fmt" func main() { slice := []int{0, 1, 2, 3} myMap := make(map[int]*int) for index, value := range slice { myMap[index] = &value } fmt.Println...阅读全文

博文 2017-04-13 07:18:17 songleo

用 go 语言开发 android app

一. 下载官方源码 https://github.com/golang/mobile git clone https://github.com/golang/mobile.git 二. 将mobile目录移动到 $gopath/golang.org/x中 mkdir -p $gopath/golang.org/x && mv mobile $gopath/golang.org/x/ 三. 复制官方例子 basic 到 gopath 中 cp -a $gopath/golang.org/x/mobile/example/basic $gopath/ 四. 运行编译命令 cd $gopath/src/basic ./make.bash 1. 如果出现错误 go build runtime: an...阅读全文

博文 2015-01-28 11:00:02 oldfeel

golang中结构体的初始化方法(new方法)

自定义一个结构体 type Rect struct { x, y float64 width, height float64 } 初始化方法: rect1 := new(Rect) rect2 := &Rect{} rect3 := &Rect{0, 0, 100, 200} rect4 := &Rect{width:100, height:200} 注意这几个变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和&操作符.而如果使用方法 a := Rect{} 则表示这个是一个Rect{}类型.两者是不一样的.参考代码: func main() { rect1 := &Rect{0, 0, 100, 200} rect1.x = 10 a := Rect{} a.x = ...阅读全文

博文 2015-10-14 17:00:03 徐学良

go 切片:用法和本质

文: http://golang.org/doc/articles/slices_usage_and_internals.html中文: http://zh-golang.appsp0t.com/doc/articles/slices_usage_and_internals.html Go的切片类型为处理同类型数据序列提供一个方便而高效的方式。切片有些类似于其他语言中的数组,但是有一些不同寻常的特性。本文将深入切片的本质,并讲解它的用法。 数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要要理解数组。 数组类型由指定和长度和元素类型定义。例如,[4]int 类型表示一个四个整数的序列。数组的长度是固定的,长度是数组类型的一部分(int[4] 和 [5]int 是完全不同的类...阅读全文

博文 2016-01-31 05:00:00 yangyangye

Golang的安装

做为运维人员,使用python语言足矣,理论上是无需了解golang的。不过最近发现一个新潮的监控系统都是基于golang进行开发的,如小米公司的Open-Falcon(github项目页) 、stack exchange 公司的Bosun (github项目页)。 一、Go的三种安装方式 Go有多种安装方式,你可以选择自己喜欢的。这里我们介绍三种最常见的安装方式: Go源码安装:这是一种标准的软件安装方式。对于经常使用Unix类系统的用户,尤其对于开发者来说,从源码安装可以自己定制。 Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合快速安装,可根据自己的系统位数下载好相应的安装包,一路next就可以轻松安装了。推荐这种方式 第三方工具安装:...阅读全文

博文 2015-10-29 17:00:03 MLGKO

golang 生成进程,执行进程

1.生成进程 package main import "fmt" import "io/ioutil" import "os/exec" func main() { //我们将从一个简单的命令开始,没有参数或者输入,仅打印一些信息到标准输出流。exec.Command 函数帮助我们创建一个表示这个外部进程的对象。 dateCmd := exec.Command("date") //.Output 是另一个帮助我们处理运行一个命令的常见情况的函数,它等待命令运行完成,并收集命令的输出。如果没有出错,dateOut 将获取到日期信息的字节。 dateOut, err := dateCmd.Output() if err != nil { panic(err) } fmt.Println("> d...阅读全文

博文 2015-04-21 03:00:01 benlightning

go 中的字符串遍历

首先看下以下例子: package main import "fmt" func main(){ s := "我是中国人" for i:=0; i < len(s); i++{ fmt.Printf("%c", s[i]) } fmt.Printf("\n") for _, v := range s { fmt.Printf("%c", v) } fmt.Print("\n") } 输出结果: 我是中国人 我是中国人 通过len(s)和range遍历访问字符串元素有什么不同么? 首先来复习一下go语言的字符串表示,go语言有以下两种表示字符串的方法: 1、双引号,如:“gogogo\n”,使用转义字符 2、反引号,如:`gogogo\n`,不使用转义字符,字符串的内容将和...阅读全文

博文 2014-10-04 19:26:22 ricktian1226

使用vendor管理Golang项目依赖

http://www.tuicool.com/articles/NjMzIbJ 我们在项目中除了大量的使用Python外,也大量的使用了Golang构建高效基础运行服务。在使用Golang过程中,我们发现Golang程序缺少依赖库版本功能是一个非常令人头大的问题:某些依赖在某个commit之后发生了API变更之后,如果不修改代码很难兼容,然而开发者之间很有可能因为参与的时间不同,导致执行 go get 命令获取的版本不同,而导致在不同电脑上出现编译不通过问题。同时,在多个程序中,如果使用的commit版本不同,也可能会导致程序编译过程中出现不同的问题。 在之前,我们解决这个问题有两个方案,一种是拆解 go get 命令的执行,首先创建对应依赖目录,利用git命令切换至指定的commit,然后...阅读全文

博文 2016-09-08 13:00:02 leonpengweicn

使用Go env命令设置Go的环境

前言 在进行Go开发的时候,设置Go的环境变量信息是必须的。下面介绍windows和Linux,以及Go自身提供的命令进行设置的形式 Linux的设置 In Linux or macOS, you can execute the below commands.(在Linux或者macOS,你可以执行下面的命令) # Enable the go modules feature export GO111MODULE=on # Set the GOPROXY environment variable export GOPROXY=https://goproxy.io 但是这种有个不好的地方,就是如果换一个终端或者重新开机,就没有了。那么我推荐,在/etc/profile.d/这个文件夹下面,写一个...阅读全文

博文 2019-11-05 00:04:18 liuxuzxx

Go 语言运算符

Go 语言运算符运算符用于在程序运行时执行数学或逻辑运算。Go 语言内置的运算符有:算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符接下来让我们来详细看看各个运算符的介绍。算术运算符下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。运算符描述实例+相加A + B 输出结果 30-相减A - B 输出结果 -10*相乘A * B 输出结果 200/相除B / A 输出结果 2%求余B % A 输出结果 0++自增A++ 输出结果 11--自减A-- 输出结果 9以下实例演示了各个算术运算符的用法:package main import "fmt" func main() { var a int = 21 var b int = 10 var c int c =...阅读全文

博文 2015-11-25 19:00:32 u011225629

golang 下载和上传,处理多文件上传

package main import ( "net/http" "os" "io" "strconv") func main() { f, err := os.OpenFile("K:/file.mp3", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) stat, err := f.Stat() //获取文件状态 if err != nil { panic(err) } //把文件指针指到文件末,当然你说为何不直接用 O_APPEND 模式打开,没错是可以。我这里只是试验。 url := "http://127.0.0.1:3000/assets/37-02.mp3" req,_ := http.NewRequest("GET",url,nil); re...阅读全文

博文 2014-10-04 19:26:06 ggaaooppeennngg

golang环境搭建

自:http://studygolang.com/articles/5798 windows下搭建golang开发环境 • golang安装 ▶ 下载对应操作系统的版本并安装,下载地址:http://www.golangtc.com/download,譬如这里下载的是go1.6beta1.windows-amd64.msi。 ▶ 环境变量配置,这里只需要配置GOROOT、GOBIN和GOPATH三个环境变量即可。 GOBIN : golang安装后根目录下的bin目录,即$GOROOT\bin\,windows平台下默认为c:\go\bin,安装过程中会由安装程序自动添加到PATH环境变量中。 GOROOT : golang安装后的根目录,windows下默认为c:\go\,安装过程中会由安...阅读全文

博文 2016-01-25 23:00:04 bluehawksky

Go语言中反射包的实现原理(The Laws of Reflection)

前言 过去只是知道某些语言带有反射,但是一直没机会使用这种高级功能,所以也没有深入了解过。昨天看golang时里面提到reflection,既然这么多语言支持这个性质,那就深入了解下好了。这篇文档翻译自官方文档的The Laws of Reflection,翻译目的不是为了翻译,而是加深自己记忆以及理解,所以有些地方可能不会直译,因为我没那么高水平,有时自己能看懂,但是按着原话翻译出来给别人听感觉好难。某些专用名词会继续保留原文,有时,其实我觉得还是英文更加容易理解。 The Laws of Reflection翻译 计算机中提到的反射指的是程序借助某种手段检查自己结构的一种能力,通常就是借助编程语言中定义的各种类型(types)。同时反射也是困惑的最大来源之一。 在这篇文章中,我们尝试通过...阅读全文

博文 2015-01-04 14:00:01 kjfcpua

教你如何让go get畅通无阻

目前golang开发有一些热度,仅仅在github上面就有大量的用go重写的项目或go开发创新项目。 go开发者经常需要使用go get来下载和安装第三方库或软件。经常会碰到go get无法访问,因为这些第三方库或软件或项目对应的网站被墙了。 很多人都是用shadowsocks来翻墙,但是shadowsocks是基于socks5协议的。对于go get并没有什么用处。如果我们能把socks5代理转为http代理,那就可以访问了。 一个牛逼的国人用go开发了一个可以将socks5代理转为http代理的项目cow。请点击链接进入项目,按照文档学习使用。设置非常简单,提供的说明很清晰易懂。按照说明,可以在本机启动一个http代理,以shadowsocks为二级代理。之后就可以畅通无阻的go get...阅读全文

博文 2017-02-24 15:00:10 hutaishi

Mac 安装 GO语言开发环境

官网:https://golang.org/ go语言的安装:http://docscn.studygolang.com/doc/install 下载:go1.4.darwin-amd64-osx10.8.pkg 默认安装,被安装了 /usr/local/go 目录 并自设置了环境变量。 go env 可查看目前的go的环境变量 这go就可以执行了, 下面还要配置一个GOPATH环境变量,是工作目录。 根据约定,GOPATH下需要建立3个目录: bin 存储编译后的可执行文件 pkg 存放编译后生成的包文件 src 存放项目的源码 我把GOPATH建立在/Users/zhaorai/Desktop/gowork vi ~/.bash_profile 加入:export GOPATH=/Use...阅读全文

博文 2014-12-22 01:00:05 elf8848

go lang初试之hello world

第一个go lang程序——hello world package main import "fmt" func main(){ p("rocky") } /* block comment */ func p(name string){ fmt.Println("Hello," + name) } // single line comment // func p(){ // fmt.Println("Hello world!") // } 一些简单的语法特性 上面的简单的代码,用到了go lang的如下一些特性: 代码第一行写明package;上例中,使用一个文件单独运行的程序必须放在package main下面,否则在go run运行时会报错:”go run: cannot run non...阅读全文

博文 2014-11-26 16:00:03 石头上的常春藤

Go语言 unsafe的妙用

unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象,uintptr类型的目标会被回收。golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存,但由于golang不支持直接进行指针运算,所以用起来稍显麻烦。 切入正题。利用u...阅读全文

博文 2014-10-14 10:00:01 abv123456789

go语言包与包引用

go语言中包(package)与java中的包(package)非常类似,都是组织代码的方式,而且都和磁盘上的目录结构存在对应关系。 go语言中,包名一般为go代码所在的目录名,但是与java不同的是,go语言中包名只有一级,而在java中包名是以点分割的多级目录组合的。 go语言中,引用包时需要以GOPATH/src目录为相对根目录,依次输入下面的各级目录名。 如:环境变量GOPATH = ~/go 包hello下有hello.go,包所在的磁盘路径为: ~/go/src/golang_everyday/hello 也就是说,hello.go的路径为: ~/go/src/golang_everyday/hello/hello.go 则在其它文件中引用该go文件时,代码应为: import ...阅读全文

博文 2015-03-04 03:00:02 baiyuxiong

Go语言中的 Array, Slice和 Map

介绍 曾经学习python的时候,记得书上说 dict 是 python的 horsepower(动力)。然后,Slice 和 Map 又何尝不是 golang 的 workhorse 呢? Array 是值类型,Slice 和 Map 是引用类型。他们是有很大区别的,尤其是在参数传递的时候。 另外,Slice 和 Map 的变量 仅仅声明是不行的,必须还要分配空间(也就是初始化,initialization) 才可以使用。 第三,Slice 和 Map 这些引用变量 的 内存分配,不需要你操心,因为 golang 是存在 gc 机制的(垃圾回收机制) Array 的用法 数组的声明(这里就是定义,给数据存储分配了空间): var arrayName [arraySize] dataType...阅读全文

博文 2015-03-26 10:00:01 xiaorenwuzyh

Go 系列教程 —— 25. Mutex

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 25 篇。 本教程我们学习 Mutex。我们还会学习怎样通过 Mutex 和[信道](https://studygolang.com/articles/12402)来处理竞态条件(Race Condition)。 ## 临界区 在学习 Mutex 之前,我们需要理解并发编程中临界区(Critical Section)的概念。当程序并发地运行时,多个 [Go 协程](https://studygolang.com/articles/12342)不应该同时访问那些修改共享资源的代码。这些修改共享资源的代码称为临界区。例如,假设我们有一段代码,将一个变量 `x` 自增 1。 ```go ...阅读全文

博文 2018-03-15 11:41:13 heyulong

golang环境搭建

windows下搭建golang开发环境 • golang安装 ▶ 下载对应操作系统的版本并安装,下载地址:http://www.golangtc.com/download,譬如这里下载的是go1.6beta1.windows-amd64.msi。 ▶ 环境变量配置,这里只需要配置GOROOT、GOBIN和GOPATH三个环境变量即可。 GOBIN : golang安装后根目录下的bin目录,即$GOROOT\bin\,windows平台下默认为c:\go\bin,安装过程中会由安装程序自动添加到PATH环境变量中。 GOROOT : golang安装后的根目录,windows下默认为c:\go\,安装过程中会由安装程序自动写入系统环境变量中。 GOPATH : golang的工作目录,是用...阅读全文

博文 2016-01-23 03:00:00 heartchord

windows下gopath设置

下载了go语言的安装包, 然后安装, 装完了需要设置三个地方: 1. 在windows的PATH变量中添加go的可执行文件所在的目录: [javascript] view plaincopy PATH=C:\Go\bin;其他设置; 2. 设置 GOROOT , 这个好理解, 直接设置成 C:\Go 即可 [javascript] view plaincopy GOROOT=C:\Go 3. 设置GOPATH, 这个很难理解, 我的尝试: [python] view plaincopy GOPATH= #就是等于空, 这个是可以在系统环境变量中设置的, 结果报错go get 包的时候报错说$GOPATH未设置 GOPATH=; #就是等于一个分号(;), go get 包开始可以运行, 不报...阅读全文

博文 2015-02-14 03:00:01 rojas

golang 垃圾回收 gc

http://ruizeng.net/golang-gc-internals/ 摘要 在实际使用go语言的过程中,碰到了一些看似奇怪的内存占用现象,于是决定对go语言的垃圾回收模型进行一些研究。本文对研究的结果进行一下总结。 什么是垃圾回收? 曾几何时,内存管理是程序员开发应用的一大难题。传统的系统级编程语言(主要指C/C++)中,程序员必须对内存小心的进行管理操作,控制内存的申请及释放。稍有不慎,就可能产生内存泄露问题,这种问题不易发现并且难以定位,一直成为困扰开发者的噩梦。如何解决这个头疼的问题呢?过去一般采用两种办法: 内存泄露检测工具。这种工具的原理一般是静态代码扫描,通过扫描程序检测可能出现内存泄露的代码段。然而检测工具难免有疏漏和不足,只能起到辅助作用。 智能指针。这是c++中引...阅读全文

博文 2016-06-23 02:00:00 diegodu

Golang中操作[]byte类型的Trim函数

在Golang中字符串的一个坑这篇博文中,介绍了Golang中字符串与C中的字符串的不同之处:C中的字符串是以\x0为结尾的字节序列,而Golang中的字符串则更严格,并不是以\x0为结尾来判断,而是计算字符串变量的值中的所有字节。 Golang中的字符串在打印时,因为\x0是不可打印字符,所以和C中的字符串在打印时没有任何区别。但是在一些需要按字节计算字符串的函数中,就会导致问题。通用的做法是,迭代字符串,只取得字节序列中的有效字节。 我们可以写一个函数来做这件事情,也可以用Golang的标准库中的bytes库。bytes库提供了对[]byte类型的操作,提供的接口和对string类型提供的接口类似。 bytes提供了有Compare、Count、Equal、Index、Join、Spli...阅读全文

博文 2015-04-24 12:11:58 华子