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

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

golang 模板(template)的常用基本语法

golang 模板(template)的常用基本语法 模板 在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染。 这篇文章不讨论golang后端的模板读取及渲染方法,只讨论模板中嵌入变量,渲染变量、循环等一些基本用法。 变量 在golang渲染template的时候,可以接受一个interface{}类型的变量,我们在模板文件中可以读取变量内的值并渲染到模板里。 有两个常用的传入参数的类型。一个是struct,在模板内可以读取该struct域的内容来进行渲染。还有一个是map[string]interface{},在模板内可以使用key来进行渲染。 我一般使用第二种,效率可能会差一...阅读全文

博文 2016-09-03 03:00:03 sryan

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 数组和切片初始化方式

一、数组初始化方式 var [length]Type var array [5]int //这种方式,只是初始化,不带初始化值,数组长度,已经定义好, 但是其实初始化的值,已经有了并且是该类型的最小值(bool false),int 0, string ' ' 其他,自行验证 var [N]Type{value1, value2, ... , valueN} var array = [5]int{1, 2, 3, 4, 5} // 这种方式,既初始化变量,又带了初始化值,数组长度已经定义好 var [...]Type{value1, value2, ... , valueN} var array = [...]int{1, 2, 3, 4, 5} // 这种方式,既初始化变量,也是带了初始值...阅读全文

博文 2018-08-29 13:34:57 Tim_SSS

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 系列教程 —— 34. 反射

![reflection](https://raw.githubusercontent.com/studygolang/gctt-images/master/golang-series/reflection-golang-3.png) 欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 34 篇。 反射是 Go 语言的高级主题之一。我会尽可能让它变得简单易懂。 本教程分为如下小节。 - 什么是反射? - 为何需要检查变量,确定变量的类型? - reflect 包 - reflect.Type 和 reflect.Value - reflect.Kind - NumField() 和 Field() 方法 - Int() 和 Stri...阅读全文

博文 2018-06-13 17:44:38 heyulong

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

Go语言关于XML的读取与生成

要读取的XML如下: Loading video… what 这种结构的XML,其末节点是属性与文本并存的(网上看到的大部分教程都是属性节点就是属性节点,文本节点就是文本节点) 根据这个XML,生成对应的struct type StringResources struct { XMLName xml.Name `xml:"resources"` ResourceString []ResourceString `xm...阅读全文

博文 2015-06-17 23:02:07 windvix

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中如何让html/template不转义html标签

近期在使用Golang的net/http和html/template开发一个简单的HAProxy负载均衡任务管理系统(见搭建高可用负载均衡组件及缓存DNS一文说明)。 htmp/template在渲染页面模板的时候默认会转义字符串中的html标签,但有时我们并不想转义html标签,以下图所示为例: 图1中“ip:port列表(一行一个)”和“说明”两个输入框的内容行与行是以\n分隔的;图2中,这两部分内容分别在表格的“后端机器列表”和“说明”两列中展示,但行与行其实是以
分隔的;那么在将数据存入数据库之前或从数据库中取出数据后,会将字符串中的\n替换为
。如果将替换后的数据以字符串类型传入模板,
标签渲染后的效果就是
文本而不是换行。 有两种方式避免h...阅读全文

博文 2014-11-05 09:48:11 youngsterxyf

Go 系列教程 —— 9. 循环

这是 Go 语言系列教程的第 9 部分。 循环语句是用来重复执行某一段代码。 `for` 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 `while` 和 `do while` 循环。 ## for 循环语法 ```go for initialisation; condition; post { } ``` 初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 `true` ,则 `{}` 内的循环体将在 post 语句之后执行。post 语句将在每次成功循环迭代后执行。在执行 post 语句后,条件将被检查。如果为 `true`, 则循环将继续执行, 否则 for 循环将终止。(译注:这是典型的 for 循环三个表达式,第一个为初始化表达式...阅读全文

博文 2017-12-12 06:16:25 polaris

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

golang阿里云的goproxy的使用

这个地址(https://goproxy.io/)的powershell的环境变量配置应该这样:$env:GO111MODULE="on"$env:GOPROXY="https://mirrors.aliyun.com/goproxy/"给等号右边的值加上双引号 阿里云的goproxy: http://mirrors.aliyun.com/goproxy/ 在环境变量里设置,不用每次都敲命令新开一个powershell窗口,可以看到这2个环境变量已经持久化...阅读全文

博文 2019-07-17 20:03:50 EDELWEISS_21g

Go 系列教程 —— 15. 指针

欢迎来到 [Golang 系列教程](/subject/2)的第 15 个教程。 ### 什么是指针? 指针是一种存储变量内存地址(Memory Address)的变量。 ![指针示意图](https://raw.githubusercontent.com/studygolang/gctt-images/master/golang-series/pointer-explained.png "指针示意图") 如上图所示,变量 `b` 的值为 `156`,而 `b` 的内存地址为 `0x1040a124`。变量 `a` 存储了 `b` 的地址。我们就称 `a` 指向了 `b`。 ### 指针的声明 指针变量的类型为 **`*T`**,该指针指向一个 **T** 类型的变量。 接下来我们写点代码。...阅读全文

博文 2018-01-22 17:37:19 heyulong

使用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

golang 中的 类型判断

golang 中的 类型判断 类似于javascript中typeof 和 java中 instanceof 比如 var a interface{} newA,ok:=a.(string) 如果ok 是 true 则说明 变量a 是字符串类型,而newA就是string类型的变量,a的实际值 a.(type) 返回的是 a的 类型, 注意他返回的不是一个 字符串表示 string int 这样表示a的类型 a.(type)是和switch 搭配使用的 switch vtype:=v.(type){ case string: xxxxxxxxxxxxxxxxxx case int: xxxxxxxxxxxxxxxx case xxxxxx: xxxxxxxxxxxxx case []inte...阅读全文

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

教你如何让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

Go 系列教程 —— 26. 结构体取代类

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 26 篇。 ## Go 支持面向对象吗? Go 并不是完全面向对象的编程语言。Go 官网的 [FAQ](https://golang.org/doc/faq#Is_Go_an_object-oriented_language) 回答了 Go 是否是面向对象语言,摘录如下。 > 可以说是,也可以说不是。虽然 Go 有类型和方法,支持面向对象的编程风格,但却没有类型的层次结构。Go 中的“接口”概念提供了一种不同的方法,我们认为它易于使用,也更为普遍。Go 也可以将结构体嵌套使用,这与子类化(Subclassing)类似,但并不完全相同。此外,Go 提供的特性比 C++ 或 Java ...阅读全文

博文 2018-03-20 09:56:47 heyulong

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

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

Go语言/golang/位操作/取反/异或/左移/右移

Go语言位操作实例 package main import ( "fmt" ) // 获取0-n之间的所有偶数 func even(a int) (array []int) { for i := 0; i < a; i++ { if i&1 == 0 { // 位操作符&与C语言中使用方式一样 array = append(array, i) } } return array } // 互换两个变量的值 // 不需要使用第三个变量做中间变量 func swap(a, b int) (int, int) { a ^= b // 异或等于运算 b ^= a a ^= b return a, b } // 左移、右移运算 func shifting(a int) int { a = a << 1 ...阅读全文

博文 2014-10-04 19:27:13 viney

告别GOPATH,快速使用 go mod(Golang包管理工具)

如果你还在使用 GOPATH 模式来开发Golang程序,那么你可以参考本文来告别 GOPATH,并带给你一个方便的包管理工具。关于 go mod 的说明和简单使用,可以参考:1、Go1.1.1新功能module的介绍及使用2、Introduction to Go Modules3、Go 1.11 Modules 官方说明文档使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,比如:新建一个名为 wserver 的项目,项目路径 D:\test\wserver (注意,该路径并不在GOPATH里) 进入项目目录 D:\test\wserver 里,新建一个 go源码文件: main.go 然后在 D:\test\wserver 里打...阅读全文

golang语言构造函数

1、构造函数定义 构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。 而golang没有相关的构造函数定义,只能通过new来创建构造函数。 2、构造函数声明 声明一个struct结构: 声明一个全局函数,返回*struct ok,到此已经构造函数定义完...阅读全文

golang 获取命令行参数

os库获取命令行参数 package main import ( "fmt" "os" ) func main() { // 获取命令行参数 fmt.Println("命令行参数数量:",len(os.Args)) for k,v:= range os.Args{ fmt.Printf("args[%v]=[%v]\n",k,v) } } 打印 go build -o main main.go ./main 张三 20岁 研究生 北京 获取命令行参数个数: 5 args[0]=[./main] args[1]=[张三] xargs[2]=[20岁] args[3]=[研究生] args[4]=[北京] flag包获取命令行参数 package main import ( "flag" "fm...阅读全文

博文 2019-06-26 06:32:39 战神悟空

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 石头上的常春藤

golang实现接口类和多态的一种做法

package main import "fmt" type IMessage interface { Print() } type BaseMessage struct { msg string } func (message *BaseMessage) Print() { fmt.Println("baseMessage:msg", message.msg) } type SubMessage struct { BaseMessage } func (message *SubMessage) Print() { fmt.Println("subMessage:msg", message.msg) } func interface_use(i IMessage) { i.Print() }...阅读全文

博文 2015-04-14 11:00:00 miros

Golang build命令解析

go build,是我们非常常用的命令,它可以启动编译,把我们的包和相关的依赖编译成一个可执行的文件。 usage: go build [-o output] [-i] [build flags] [packages] go build的使用比较简洁,所有的参数都可以忽略,直到只有go build,这个时候意味着使用当前目录进行编译,下面的几条命令是等价的: go build go build . go build hello.go 以上这三种写法,都是使用当前目录编译的意思。因为我们忽略了packages,所以自然就使用当前目录进行编译了。从这里我们也可以推测出,go build本质上需要的是一个路径,让编译器可以找到哪些需要编译的go文件。packages其实是一个相对路径,是相对于我们...阅读全文

博文 2018-07-26 11:30:02 liuzhongchao

Go 系列教程 —— 19. 接口(二)

欢迎来到 Golang 系列教程的第 19 个教程。接口共有两个教程,这是我们第二个教程。如果你还没有阅读前面的教程,请你阅读[接口(一)](https://studygolang.com/articles/12266)。 ### 实现接口:指针接受者与值接受者 在[接口(一)](https://studygolang.com/articles/12266)上的所有示例中,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Pointer Receiver)来实现接口。只不过在用指针接受者实现接口时,还有一些细节需要注意。我们通过下面的代码来理解吧。 ```go package main import "fmt" type Describer int...阅读全文

博文 2018-02-01 15:44:37 heyulong

golang 里面指针符号的*和&

先看一段代码先放一段代码,人工运行一下,看看自己能做对几题?package main import "fmt" func main() { var a int = 1 var b *int = &a var c **int = &b var x int = *b fmt.Println("a = ",a) fmt.Println("&a = ",&a) fmt.Println("*&a = ",*&a) fmt.Println("b = ",b) fmt.Println("&b = ",&b) fmt.Println("*&b = ",*&b) fmt.Println("*b = ",*b) fmt.Println("c = ",c) fmt.Println("*c = ",*c) fmt....阅读全文

博文 2017-02-10 10:21:28 ohgenlong

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 系列教程 —— 10. switch 语句

这是 [Golang 系列教程](https://golangbot.com/learn-golang-series/)中的第 10 篇。 switch 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个 `if else` 子句的常用方式。 看代码比文字更容易理解。让我们从一个简单的例子开始,它将把一个手指的编号作为输入,然后输出该手指对应的名字。比如 0 是拇指,1 是食指等等。 ```go package main import ( "fmt" ) func main() { finger := 4 switch finger { case 1: fmt.Println("Thumb") case 2: fmt.Prin...阅读全文

博文 2017-12-15 05:55:18 vicever

设置GOPATH

使用go语言开发, 环境变量GOPATH的设置是第一步, 我们可以指定一个自己常用的目录, 我个人喜欢使用 /usr/local/src/go_path 全局设置 vi /etc/profile 在文件的结尾加上 export GOPATH=/usr/local/src/go_path 使配置马上生效 source /etc/profile 用户级别设置 vi ~/.bash_profile 在文件的结尾加上 export GOPATH=/usr/local/src/go_path 使配置马上生效 source /etc/profile 临时生效 直接在命令行添加 export GOPATH=/usr/local/src/go_path 这种方式, 在关闭shell或重启机器会失效 配置好之...阅读全文

博文 2017-02-10 14:44:11 yin32167

Golang项目目录结构组织

其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序。 当然,首先要说的是环境变量$GOPATH,项目构建全靠它。这么说吧,想要构建一个项目,就要将这个项目添加到$GOPATH中,多个项目用";"分隔。 Golang项目目录下一般有三个子目录: src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 我们重点要关注的其实就是src文件夹中的目录结构。 举个例子比啥都强,目录结构如下: |-- |-- |-- |--al.go |-- |--a2.go |-- |--b1.go |--b2.go |-- |--c.go |-- |-- 各文件代码: a1...阅读全文

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

golang 垃圾回收 gc

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

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

golang解决import cycle not allowed的一种思路

项目中碰到了一些问题,使用了指针函数的思路来解决相应问题 在实际项目中,因为两个项目互相引了对方的一些方法,导致了循环引用的错误,原本可以使用http的请求来解决,经过其他人指导,发现了可以使用指针函数来解决 这里通过一个简单的例子来说明,首先是例子的结构,我们仅仅用到了这两个文件:ciconnector.go和rockettest.go 例子结构 原本设定的方法是这两个包里的函数互相调用,那么我们通过代码来看下怎么解决相应的问题。 首先是rockettest.go,这里调用了ciconnector.go中的Test方法,代码如下 package main import ( "fmt" "citest" ) func main() { str := "hello world" citest....阅读全文

博文 2017-08-08 15:05:12 南尼喜嘛斯嘎

Golang中defer、return、返回值之间执行顺序的坑

Go语言中延迟函数defer充当着 cry...catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱! 先来运行下面两段代码: A. 无名返回值的情况 package main import ( "fmt" ) func main() { fmt.Println("return:", a()) // 打印结果为 return: 0 } func a() int { var i int defer func() { i++ fmt.Println("defer2:", i) // 打印结果为 defer: 2 }() defer func() { i++ fmt.Pr...阅读全文

博文 2015-09-13 16:00:00 henrylee2cn

golang的闭包和普通函数调用区别

先看一段程序 package main import ( "fmt") func main() { a := []int{1, 2, 3} for _, i := range a { fmt.Println(i) defer p(i) } } func p(i int) { fmt.Println(i) } 运行这段程序,输出结果为 1 2 3 3 2 1 这里就是普通的函数调用,每次调用func p时,完成 i 的值复制,然后打印,此时 i 值复制了3次,分别是1,2,3。由于defer是后进先出,所以执行变成3,2,1 下面我我们用闭包改写下程序: package mainimport ( "fmt")func main() { a := []int{1, 2, 3} for _, i ...阅读全文

博文 2014-10-04 19:26:14 liangDream

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 华子

Golang Android 开发

前言 随着Golang发布1.4正式版,Android下的开发也可以实现(go/mobile)了,就等1.5版本的ios支持了,可以使用golang跨平台开发游戏了... 环境准备 Ant 下载apache-ant并配置好环境变量。 $ANT_HOME=antpath //你的ant目录$PATH=$ANT_HOME/bin:$PATH Android 下载SDK,android-ndk-r9d(这里之所以不用r10d是因为在测试时ndk源码出现问题,而r9d没有问题)。安装并配置环境变量。 $ANDROID_HOME=sdkpath //你的sdk目录$NDK_ROOT=ndkpath //你的ndk目录$PATH=$ANDROID_HOME/tools:$ANDROID_HOME/pla...阅读全文

博文 2015-02-03 10:00:01 ____追梦人

Go 系列教程 —— 28. 多态

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 28 篇。 Go 通过[接口](https://studygolang.com/articles/12266)来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部[方法](https://studygolang.com/articles/12264),那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 ## 使用接口实现多态 一个类型如果定义了接口的所有方法,那它就隐式地实现了该接口。 **所有实现了接口的类型,都可以把它的值保存在一个接口类型的变量中。在 Go 中,我们使用接口的这种特性来实现多态**。 通过一...阅读全文

博文 2018-03-25 21:47:13 heyulong

gO语言的安装和环境变量的配置

一、Go语言下载 go语言官方下载地址:https://golang.org/dl/ 找到适合你系统的版本下载,本人下载的是windows版本。也可以下载Source自己更深层次研究go语言。 二、GO语言安装 下载完成之后,双击go1.6.windows-amd64.msi进行安装。 如果安装过程出现以下提示: 以管理员的身份运行cmd,找到go1.6.windows-amd64.msi所在的目录,并输入msiexec /i go1.6.windows-amd64.msi如下图(放在D盘根目录): 步骤一:双击运行安装程序 步骤二:点击Next,出现License 选择I accept the terms in the License Agreeement。 步骤三:点击Next,选择安装...阅读全文

博文 2016-06-13 14:00:01 zhangym

golang interface 接口的概念及实例

golang的interface并不像其他高级语言在类定义时添加限定作用,而是通过向上转型的方式,在业务代码的上下文中判断结构体(类)是否实现了接口里声明的方法。 type interfact Person { SetName(name string) GetName() string SetAge(age int) GetAge() int } type Boy struct { Name string Age int } func (boy *Boy) SetName(name string) { boy.Name = name } func (boy *Boy) GetName() string { return boy.Name } func (boy *Boy) SetAge(ag...阅读全文

博文 2019-05-16 19:34:38 big_cat

理解Go语言的nil

最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频。 nil是什么 相信写过Golang的程序员对下面一段代码是非常非常熟悉的了: if err != nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。那什么是nil呢?查一下词典可以知道,nil的意思是无,或者是零值。零值,zero value,是不是有点熟悉?在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个类型的默认零值。这是每种类型对应的零值: bool -> false numbers -> 0 string -...阅读全文

博文 2017-02-28 05:13:34 天唯

Golang-interface(一 基本使用)

github: https://github.com/ZhangzheBJUT/blog/blob/master/interface.md 一 接口概述 如果说gorountine和channel是支撑起Go语言的并发模型的基石,让Go语言在如今集群化与多核化的时代成为一道亮丽的风景,那么接口是Go语言整个类型系列的基石,让Go语言在基础编程哲学的探索上达到前所未有的高度。 Go语言在编程哲学上是变革派,而不是改良派。这不是因为Go语言有gorountine和channel,而更重要的是因为Go语言的类型系统,更是因为Go语言的接口。Go语言的编程哲学因为有接口而趋于完美。 C++,Java 使用"侵入式"接口,主要表现在实现类需要明确声明自己实现了某个接口。这种强制性的接口继承方式是面向对...阅读全文

博文 2015-06-18 17:04:35 Crazy__Programmer

go 安装与使用

一 下载安装包 从http://code.google.com/p/go/downloads/list 网址下载 根据你的操作系统选择响应的版合适版本,我选择的是 go1.1.2.windows-386.zip 32.7 MB 注:你也可以选择.msi文件安装,这样的话会自动的安装到c:/go目录下(这里不建议下载msi版本) 二 解压 将下载后的文件解压,放到一个目录下,我把go放到了D:\go目录下 三设置环境变量 $GOROOT 指向golang安装之后的根目录,如果你选择.msi安装的话,windows平台下默认为c:/go,而且在安装过程中由安装程序自动写入系统环境变量。 $GOARCH 目标平台(编译后的目标平台)的处理器架构(386、amd64、arm) $GOOS 目标平台(...阅读全文

博文 2014-10-24 21:00:01 yiluoAK_47

Go 系列教程 —— 33. 函数是一等公民(头等函数)

![custom errors](https://raw.githubusercontent.com/studygolang/gctt-images/master/golang-series/first-class-functions-golang.png) 欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 33 篇。 ## 什么是头等函数? **支持头等函数(First Class Function)的编程语言,可以把函数赋值给变量,也可以把函数作为其它函数的参数或者返回值。Go 语言支持头等函数的机制**。 本教程我们会讨论头等函数的语法和用例。 ## 匿名函数 我们来编写一个简单的示例,把[函数](https://study...阅读全文

博文 2018-04-13 21:35:15 heyulong

Go 语言中你应该知道的关于 Package 的所有

*一个 Go 编程语言的包管理及应用的全面概述* 如果你对像 **Java** 或者 **NodeJS** 这样的语言熟悉,那么你可能对**包**(译者注:原文中 **packages** ,后文中将其全部译为中文出现在文章表述中)相当熟悉了。包不是什么其他的,而是一个有着许多代码文件的目录,它从单个引用点显示不同的变量(特征)。让我来解释一下,这是什么意思。 设想在某个项目上工作,你需要不断的修改超过一千个函数。这之中的一些函数有相同的行为。比如,`toUpperCase` 和 `toLowerCase` 函数转变 `字符串` 的大小写,因此你把它们写在了一个单独的文件(*可能*是 **case.go**)里。也有一些其他的函数对 `字符串` 数据类型做一些其他操作,因此你也把它们写在了独...阅读全文

博文 2018-12-08 10:00:08 yixiaoer