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

Go 系列教程 —— 5. 常量

这是我们 Golang 系列教程的第 5 篇。 ### 定义 在 Go 语言中,术语"常量"用于表示固定的值。比如 `5` 、`-89`、 `I love Go`、`67.89` 等等。 看看下面的代码: ```go var a int = 50 var b string = "I love Go" ``` **在上面的代码中,变量 `a` 和 `b` 分别被赋值为常量 `50` 和 `I love GO`**。关键字 `const` 被用于表示常量,比如 `50` 和 `I love Go`。即使在上面的代码中我们没有明确的使用关键字 `const`,但是在 Go 的内部,它们是常量。 顾名思义,常量不能再重新赋值为其他的值。因此下面的程序将不能正常工作,它将出现一个编译错误: `cann...阅读全文

博文 2017-12-07 07:06:56 polaris

go for循环

快速入门 for i := 1; i <= 10; i++ { fmt.Println(i) } 流程图 for循环注意事项和细节 1、循环条件是返回一个布尔值的表达式 2、 for 循环的第二种使用方式 for 循环判断条件 { //循环执行语句 } //将变量初始化和变量迭代写到其它位置 示例: j := 1 for j <= 10 { fmt.Println("hello....", j) j++ } 3、 for 循环的第三种使用方式 for { //循环语句 } 等价:for ; ; { } 是个无限循环,需要配合break语句来用 示例: k := 1 for { //等价 for ; ; { } if k <= 10 { fmt.Println("ok...", k) } el...阅读全文

博文 2019-02-23 21:34:43 StevenQin

golang 并发 chan

channels 是 goroutines之间通信的工具, 可以理解为管道, 虽然go也提供共享变量的方式, 但是更加推荐使用channel func TestChan(t *testing.T) { c := make(chan int) go func() { c <- 48 }() fmt.Println(<- c) // 保持持续运行 holdRun() } func holdRun() { time.Sleep(1 * time.Hour) } c := make(chan int) 声明一个 传输整形 的unbuffer chan,(接收消息和发送消息者将会阻塞,直到channel ”可用“) <- 操作符用来接受和发送消息 chan <- 48 发送“48“ 进入管道, <-c...阅读全文

博文 2016-02-21 11:00:01 hezuideda

Golang项目目录结构组织

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

golang获取变量数据类型

如果某个函数的入参是interface{},有下面几种方式可以获取入参的方法: 1 fmt: import "fmt" func main() { v := "hello world" fmt.Println(typeof(v)) } func typeof(v interface{}) string { return fmt.Sprintf("%T", v) } 2 反射: import ( "reflect" "fmt" ) func main() { v := "hello world" fmt.Println(typeof(v)) } func typeof(v interface{}) string { return reflect.TypeOf(v).String() } 3 类...阅读全文

博文 2018-08-16 21:30:01 xbblogs

[golang学习] 在idea中code & debug

idea 虽然审美倒退了n年. 不过功能还是相当好用的. idea 的go插件堪称最好的go ide. 1. 语法高亮支持 2. 智能提示 3. 跳转定义(反跳转回来) 4. 集成debugger 还有重构等等功能也不错. 这些都是用起来让人很舒服的功能. 你要是用vim/emacs/sublime啥的. 当我没说. 很多人可能都不知道golang 代码可以debug. 很多人用console gdb命令式的调试. 如果不需要界面化的调试器, 也可以略过了. 1. 语法高亮支持 配色看起来挺搓的. 默认的, 我也懒得改. 大家可以随便改... 2. 智能提示 虽然我觉得VS + VA的提示更吊一点. 不过这样也还不错. 3. 跳转定义(反跳转回来) 这在查看代码时很有用. 比如我跳转到fmt...阅读全文

博文 2014-12-30 22:00:01 lingdhox

Go程序设计语言(一)

Go程序设计语言(一) 八 23 bigwhite技术志 Blog, Blogger, C, Cpp, Go, Golang, Google, Opensource, Programmer, 博客, 开源, 程序员, 编程,语言, 编译器 No Comments 本文译自Rob Pike的Go语言PPT教程 – "The Go Programming Language Part 1(updated June 2011)"。由于该教程的最新更新时间早于Go 1版本发布,因此该PPT中的一些内容与Go 1语言规范略有差异,到时我会在相应的地方做上注解。 谁发明了Go Go语言的设计和实现工作是由Google的一个研发小组以及来自世界各地的大量贡献者共同完成的。 联系方式: http://gola...阅读全文

博文 2014-11-07 14:51:54 bigwhite

go语言的new和make

golang的new和make主要区别如下: 1、make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据 2、new分配返回的是指针,即类型*T;make返回引用,即T; 3、new分配的空间被清零,make分配后,会进行初始化。effective go举了一个例子,见:http://golang.org/doc/effective_go.html#allocation_make 对于struct的分配和初始化,除了可以使用new外,还可以这样做: T {},例如 func TestAlloc(t *testing.T) { type T struct { n string i int f float64 fd *os.File b []byte ...阅读全文

博文 2014-11-17 14:44:16 铁哥

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 系列教程 —— 16. 结构体

欢迎来到 [Golang 系列教程](/subject/2)的第 16 个教程。 ### 什么是结构体? 结构体是用户定义的类型,表示若干个字段(Field)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。 例如,一个职员有 `firstName`、`lastName` 和 `age` 三个属性,而把这些属性组合在一个结构体 `employee` 中就很合理。 ### 结构体的声明 ```go type Employee struct { firstName string lastName string age int } ``` 在上面的代码片段里,声明了一个结构体类型 `Employee`,它有 `firstName`、`lastName` 和 `a...阅读全文

博文 2018-01-22 17:52:48 heyulong

聊一聊,Golang “相对”路径问题

前言 Golang 中存在各种运行方式,如何正确的引用文件路径成为一个值得商议的问题 以 gin-blog 为例,当我们在项目根目录下,执行 go run main.go 时能够正常运行(go build也是正常的) [$ gin-blog]# go run main.go [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. - using env: export GIN_MODE=release - using code: gin.SetMode(gin.ReleaseMode) [GIN-debug] GET /api/v1/tags --> gin-blog/rou...阅读全文

博文 2018-03-13 00:34:39 煎鱼

Go 系列教程 —— 13. Maps

欢迎来到 [Golang 系列教程](/subject/2)的第 13 个教程。 ## 什么是 map ? map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。 ## 如何创建 map ? 通过向 `make` 函数传入键和值的类型,可以创建 map。`make(map[type of key]type of value)` 是创建 map 的语法。 ```go personSalary := make(map[string]int) ``` 上面的代码创建了一个名为 `personSalary` 的 map,其中键是 string 类型,而值是 int 类型。 map 的零值是 `nil`。如果你想添加元素到 nil map 中,会触发运行时 p...阅读全文

博文 2018-01-20 09:59:02 ArisAries

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

golang枚举类型 - iota用法拾遗

在c#、java等高级语言中,经常会用到枚举类型来表示状态等。在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手。 1、枚举类型定义 从百度百科查询解释如下:http://baike.baidu.com/link?url=Lrq57-YIZJ35grERvdg2kh7lfGfxvvLCVsNBMAqjBUOQX3CJUYnJp-9oZ2-rf3JGMqL3e4RbnSRQWs_5nmaI6K 枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中是一种构造数据类型。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。 枚举可以根据Integer、Long、Short或Byte...阅读全文

go类型断言

go里面的类型断言写法: x.(T) 其中x为interface{}类型 T是要断言的类型。 类型断言有个非常好的使用场景:当某个类型为interface{}的变量,真实类型为A时,才做某件事时,这时可以使用类型断言 下面有个例子。只有当某个interface{}的类型 存储的是int时才打印出来。 package main import ( "fmt" "math/rand" "time" ) func main() { var v interface{} r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < 10; i++{ v = i if (r.Intn(100) % 2) == 0 { v = "h...阅读全文

博文 2015-05-19 23:00:02 guonaihong

golang 坑集

func main() { x := 1 defer func(a int) { fmt.Println("a=", a) }(x) defer func() { fmt.Println("x=", x) }() x++ } 结果: x=2 a=1 说明: defer 调用所需参数在 defer 语句执行时就被已计算好了 (拷贝传递),闭包内则是引用,defer执行顺序FIFO 数组和slice 数组是值类型 slice是引用类型, 数组的创建 arr:=[...]int{1,2,3} arr:=[3]int{} arr:=new([10]int) (注意new返回的是[10]int的指针类) slice的创建 slice:=[]int{1,2,3} slice:=arr[n:m]( n <...阅读全文

博文 2014-10-04 19:27:11 健哥大人

go语言的模板,text/template包

go语言的模板,text/template包 定义 模板就是将一组文本嵌入另一组文本里 传入string–最简单的替换 package main import ( "os" "text/template" ) func main() { name := "waynehu" tmpl, err := template.New("test").Parse("hello, {{.}}") //建立一个模板,内容是"hello, {{.}}" if err != nil { panic(err) } err = tmpl.Execute(os.Stdout, name) //将string与模板合成,变量name的内容会替换掉{{.}} //合成结果放到os.Stdout里 if err != ni...阅读全文

博文 2014-10-04 19:26:25 waynehu

Ubuntu下搭建Golang开发环境

Golang安装及配置 下载安装文件,当前最新版本为1.4.2,go1.4.2.linux-amd64.tar.gz 。 将安装文件解压至指定目录: 1 # sudo tar -zxvf go1.4.2.linux-amd64.tar.gz -C /usr/local/ 编辑 /etc/profile 文件添加环境变量: export GOROOT=/usr/local/go export GOBIN=$GOROOT/bin export PATH=$PATH:$GOBIN export GOPATH=$HOME/goproj 重新编译 /etc/profile 文件,并尝试查看GO版本: 1 # source /etc/profile 2 # go version Golang交叉编译 新...阅读全文

博文 2015-04-04 03:00:00 nianhua

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-类型断言

Java当中有instanceof这样的关键字判断类型 Go当中自然也有相应的方法来判断类型 即Comma-ok断言 写法为value, ok := em.(T) 如果确保em 是同类型的时候可以直接使用value:=em.(T)一般用于switch语句中下面将会讲解到 em代表要判断的变量 T代表被判断的类型 value代表返回的值 ok代表是否为改类型 类型断言应该一看就懂 在这里就不再介绍了主要是介绍我自己碰到的几个问题 1 em必须为initerface类型才可以进行类型断言 比如如下代码会报错 s := "BrainWu" if v, ok := s.(string); ok { fmt.Println(v) } invalid type assertion: s.(string)...阅读全文

博文 2015-10-25 14:00:01 u012807459

Go语言如何深度拷贝对象

深度复制可以基于reflect包的反射机制完成, 但是全部重头手写的话会很繁琐. 最简单的方式是基于序列化和反序列化来实现对象的深度复制: func deepCopy(dst, src interface{}) error { var buf bytes.Buffer if err := gob.NewEncoder(&buf).Encode(src); err != nil { return err } return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst) } Gob和bytes.Buffer简单组合就搞定了. 当然, Gob的底层也是基于reflect包完成的. 在内存中序列化,反序列化对象实体 来完成对象实体的深...阅读全文

博文 2016-04-29 16:00:01 hittata

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

一、数组初始化方式 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

告别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 里打...阅读全文

Go语言的类型转换和类型断言

类型转换和类型断言是Go语言中比较绕的地方. Go语言要求所有统一表达式的不同的类型之间必须做显示的类型转换. 而作为Go语言鼻祖的C语言是可以直接做隐式的类型转换的. 当然作为const类的字面值常量是要灵活很多的. 不过Go语言必须做显示的类型转换的要求也有例外的情况: 当普通T类型变量向I接口类型转换时是隐式的! 当IX接口变量向I接口类型转换可以在编译期完成时是隐式的! 类型之间转换的例子 下面是Go语言规范给出的部分例子: *Point(p) // same as *(Point(p)) (*Point)(p) // p is converted to *Point <-chan int(c) // same as <-(chan int(c)) (<-chan int)(c) /...阅读全文

博文 2015-05-18 12:37:04 chai2010

在 Golang 中使用 Protobuf

安装 goprotobuf 1.从 https://github.com/google/protobuf/releases 获取 Protobuf 编译器 protoc(可下载到 Windows 下的二进制版本 wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gztar zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1./configure make make install protoc -h 2.获取 goprotobuf 提供的 Protobuf 编译器插件 protoc-gen-go(被放置于 $GOPATH/bin 下,$G...阅读全文

博文 2015-09-25 10:00:01 徐学良

如何从源代码构建 Go 1.5 开发环境

请注意,本文正文含有大量链接。如果是转载或者使用某些不支持超链接的阅读器,就请自行脑补吧。 近期,Go Team 连续放出了几个大招来介绍即将在八月问世的 Go 1.5 这个划时代的版本。Rob 和 Andrew 分别在《Go in Go》和《The State of Go》中详细说明了出现在 Go 1.5 中的重要特性和细节变化。在这个版本中最主要的变化是移除了所有 C 代码,不论是 runtime 还是编译器都使用 Go 语言和一小部分的汇编来实现——也就是人们常说的自举。但是这样做也就意味着,Go 在 1.5 和以后的版本中,使用源代码构建 Go 开发环境将面临“鸡生蛋,蛋生鸡”的麻烦(当然了,如果你直接“买鸡蛋”——使用二进制安装包——是没有这个问题的)。 在 Go1.4 及更早的版...阅读全文

博文 2015-06-03 21:00:09 mikespook

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 ____追梦人

golang语言构造函数

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

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 - 继承

1 方法的继承 在go中没有继承的关键字,但是我们可以通过interface这个类型做出继承的效果,看如下代码,Car就继承了Start和Stop这两个方法 import ( "fmt" ) type Engine interface { Start() Stop() } type Car struct { Engine } func (this *Car) Start() { fmt.Println("Car->Start()") } func main() { fmt.Println("Start Main func()") car := new(Car) car.Start() } 2 成员变量的继承 相当与定义Person人这个类,然后定义男人Man继承人的姓名,年龄这个两个成员属性...阅读全文

博文 2015-11-16 17:00:01 a11101171

超详细Go语言Windows安装全攻略

1,下载go语言windows安装包,你可以直接到官网下载,也可以从本站云盘下载,由于国内被封杀,go语言官网 经常会打不开 win32版本:链接:http://pan.baidu.com/s/1eQlIT2M 密码:qosr win64版本:链接:http://pan.baidu.com/s/1qWmK7wg 密码:r5z7 2.双击安装,默认安装,直接点“下一步”就行,默认是安装在c:\go,你也可以修改成其它目录,目录最好不要包含 中文名 3.设置系统环境变量GOROOT,并把%GOROOT%\bin;加入到path环境变量中去 XP下操作如下 win7下操作如下 4.在命令行模式下输入 go,如果输出以下字符,go语言就基本安装成功了 5. 设置GOPATH环境变量,在c:\新建一目...阅读全文

博文 2015-04-17 03:00:01 onlycoder

go语言init和main函数

Go里面有两个保留的函数:init函数和main函数。下边就来比较一下两个函数的异同。 相同点:两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。 不同点:init可以应用于任意包中,且可以重复定义多个。main函数只能用于main包中,且只能定义一个。 下边说一下两个函数的执行顺序: 对同一个go文件的init()调用顺序是从上到下的 对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数,对于 对不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init() 如果package存在依赖,则先调用最早被依赖的package中的init() 最后调用main函数 下图截自astaxie...阅读全文

博文 2015-06-17 23:02:22 Mervyn1205

Go中使用动态库C/C++库

最近需要做一些在go中使用动态C++库的工作,经常碰到找不到动态库路径这种情况,所以就花点时间,专门做一下实验来了解Go。 一、示例代码目录结构(假设代码根目录为/home/gdc/cgotest): ----|bin: ----|pkg ----|src --------|main ------------|main.go --------|oidb ------------|hello ----------------|hello.go: ----------------|api.h ------------|lib ----------------|libapi.so 二、代码 api.h文件内容: #ifndef __API_H__ #define __API_H__ void he...阅读全文

博文 2014-10-16 11:00:11 xiaogugood

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

Go 方法、接口

在 Go 中,类型可以定义接收此类型的函数,即方法。每个类型都有接口,意味着对那个类型定义了方法集合。 下面定义了结构体类型 S 以及它的两个方法: type S struct { i int } func (p *S) Get() int { return p.i } func (p *S) Put(v int) { p.i = v } 方法 方法就是有接收者的函数。 可以在除了非本地类型(包括内建类型,比如 int)的任意类型上定义方法。然而可以为内建类型定义别名,然后就可以为别名定义方法。如 type Foo int // 为 int 定义别名 Foo func (self Foo) Emit() { fmt.Printf("%v", self) } 接口 接口定义为一个方法的集合。方...阅读全文

超赞的GO语言设计模式和成例集锦

来自:http://geek.csdn.net/news/detail/100051 Go语言从面世就受到了业界的普遍关注,曾有文章分析,Go是最有可能改变未来IT技术的十大语言之一。本文作者列举了Go语言的设计模式和成例合集,并且还进行了详细的分类。 创建型模式 抽象工厂模式:提供一个接口用于创建相关对象的家族;Builder模式:使用简单的对象来构建复杂的对象;工厂方法模式:一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中;对象池模式:实例化并维护一组相同类型的对象实例;单例模式:限制类的实例,保证一个类只有一个实例。 结构模式 适配器模式:适配另一个不兼容的接口来一起工作;桥接模式:将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立...阅读全文

博文 2016-09-08 06:00:09 Blues1021

理解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 天唯

GO语言已经可以写Android项目了,你知道吗?

新的库名叫go.mobile,包含了Go for Android的库的工具 在go.mobile库的readme中有介绍开发环境的搭建,不过仅限于早期版本,整合进IDE的构建系统还没有呢。 首先需要Android SDK,和NDK。然后需要添加一个环境变量:NDK_ROOT=$HOME/android/ndk-toolchain配置NDK工具ndk/build/tools/make-standalone-toolchain.sh -platform=android-9 --install-dir=$NDK_ROOT安装Go cross-compiler hg clone https://code.google.com/p/gocd go/srcCC_FOR_TARGET=$NDK_CC GO...阅读全文

博文 2014-10-15 10:00:00 q26335804

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

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

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

eclipse搭建golang for windows

用惯了eclipse,所以。。。。 golang windows开发环境 参考文档:http://golang.org/doc/install 1.下载go安装包http://code.google.com/p/go/downloads/list 2.安装下载包 2.设置环境变量 在“我的电脑”中配置GO的环境变量: 2.1新建环境变量 GOROOT,值为你所解压的GO的根目录(作者的为 C:\go) 2.2在PATH环境变量中添加GO的bin,作者的为 %GOROOT%\bin; 2.3打开cmd命令行,输入 go。如果配置正确,则会有帮助提示。 安装及配置GoClipse GoClipse是Eclipse的一个插件,当前0.8.0版本要求Java 7及Eclipse4.3 3.1 安装j...阅读全文

博文 2015-03-28 03:00:03 kuangyuping

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

golang面向对象总结

[plain] view plaincopy type $name struct{ property01 int property02 int } Golang里面的方法和接口都是基于这里type *** struct创建的类型,这里其实可以理解为: [php] view plaincopy class $name { public int property01; public int property02; } 类型就是类。 所以我们说是类型的某个方法,类型实现了某个接口。 类型是属性的集合,接口是方法的集合 函数的定义:func $funcName ( ) ( ){} 方法的定义:func ( ) $funcName ( ) ( ){} Func (成员变量 类型) funname(局部...阅读全文

博文 2015-06-17 20:02:17 erlang_team

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语言文档 [Go语言中文小组] 翻译整理 2011-03-02 关于本文Go语言简介安装go环境 3.1. 简介3.2. 安装C语言工具3.3. 安装Mercurial3.4. 获取代码3.5. 安装Go3.6. 编写程序3.7. 进一步学习3.8. 更新go到新版本3.9. 社区资源3.10. 环境变量 Go语言入门 4.1. 简介4.2. Hello,世界4.3. 分号(Semicolons)4.4. 编译4.5. Echo4.6. 类型简介4.7. 申请内存4.8. 常量4.9. I/O包4.10. Rotting cats4.11. Sorting4.12. 打印输出4.13. 生成素数4.14. Multiplexing Effective Go 5.1. 简介 5.1.1. ...阅读全文

博文 2015-07-23 21:00:03 dazheng

golang之package

package的作用 √ package是golang最基本的分发单位和工程管理中依赖关系的体现。 √ 每个golang源代码文件开头都拥有一个package声明,表示该golang代码所属的package。 √ 要生成golang可执行程序,必须建立一个名为main的package,并且在该package中必须包含一个名为main()的函数。 √ 在golang工程中,同一个路径下只能存在一个package,一个package可以拆成多个源文件组成。 √ import关键字导入的是package路径,而在源文件中使用package时,才需要package名。经常可见的import的目录名和源文件中使用的package名一致容易造成import关键字后即是package名的错觉,真正使用时,...阅读全文

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

30分钟上手GO语言--基础语法

本章主要分成三个部分:第一部分包括基本语法和数据结构;第二部分讨论方法和接口;第三部分介绍并发机制。 包、变量和函数 先看一个例子Packages.go: ```golang package main import ( "fmt" "math/rand" ) func add(x int, y int) int { return x + y } func main() { fmt.Println("My favorite number is", rand.Intn(10)) fmt.Println(add(42, 13)) } ``` 包:每个 Go 程序都是由包(package)组成的,程序运行的入口是包 `main`。 ...阅读全文

go语言指针符号的*和&

先看一段代码 先放一段代码,人工运行一下,看看自己能做对几题? 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) fm...阅读全文

博文 2014-10-04 19:26:00 waynehu

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