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

golang strings包方法

package main import s "strings" //strings取个别名 import "fmt" //我们给 fmt.Println 一个短名字的别名,我们随后将会经常用到。 var p = fmt.Println func main() { //这是一些 strings 中的函数例子。注意他们都是包中的函数,不是字符串对象自身的方法,这意味着我们需要考虑在调用时传递字符作为第一个参数进行传递。 p("Contains: ", s.Contains("test", "es")) p("Count: ", s.Count("test", "t")) p("HasPrefix: ", s.HasPrefix("test", "te")) p("HasSuffix: ", s....阅读全文

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

GoLang学习 -- array(数组)和slice(切片)

在使用golang过程当中,经常会用到数组类型。可在查看golang官方文档中发现,在golang语言当中,除了存在数组类型之外,还存在有切片类型。这个切片类型在其他语言都没有出现过,那么这个切片类型到底是一种什么类型呢?切片和数组又有什么区别? 下面就谈谈在golang中数组和切片的故事。 首先我们看一下数组: golang中的数组是一种由固定长度和固定对象类型所组成的数据类型。例如下面: var a [4]int a[0] = 1 i := a[0] // i == 1 a是一个拥有4个int类型元素的数组。当a一旦被声明之后,元素个数就被固定了下来,在a这个变量的生命周期之内,元素个数不会发生变化。而此时a的类型就是[4]int,如果同时存在一个b变量,为[5]int。即便两个变量仅仅...阅读全文

博文 2015-09-26 20:00:48 vikings_1001

go语言数据类型-数组(array)

1 go语言数组简介 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。 在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本。 2 数组定义 定义方式如下 var arr [n]type n表示数组长度,type表示数组存储类型。 在Go语言中,...阅读全文

博文 2014-10-10 14:00:00 JesseYoung

golang 随机数

package main import "fmt" import "math/rand" func main() { //例如,rand.Intn 返回一个随机的整数 n,0 <= n <= 100。 fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Println() //rand.Float64 返回一个64位浮点数 f,0.0 <= f <= 1.0。 fmt.Println(rand.Float64()) //这个技巧可以用来生成其他范围的随机浮点数,例如5.0 <= f <= 10.0 fmt.Print((rand.Float64()*5)+5, ",") fmt.Print((rand.Float64() ...阅读全文

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

golang中io/ioutil包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3278444.html ,并在此基础上进行添加修改. io/ioutil 包中的函数和方法 // ioutil.go ------------------------------------------------------------ // ReadAll 读取 r 中的所有数据 // 返回读取的数据和读取过程中遇到的任何错误 // 如果读取成功,则 err 返回 nil,而不是 EOF func ReadAll(r io.Reader) ([]byte, error) func main() { s := strings.NewReader("Hello World!") ra, _ := io...阅读全文

博文 2015-06-17 20:20:53 chenbaoke

Go 语言中的 new() 和 make()的区别

本文是看了文章之后的心得。 在此感谢。 概述 Go 语言中的 new 和 make 一直是新手比较容易混淆的东西,咋一看很相似。不过解释两者之间的不同也非常容易。 他们所做的事情,和应用的类型也不相同。 二者都是用来分配空间。 new 函数 new 是内建函数,函数原型为 func new(Type) *Type 官方文档描述为: The new build-in function allocates memory(仅仅分配空间). The first argument is a type, not a value, and the value returned is a pointer to a newly allocated zero value of that type. 翻译如下: ...阅读全文

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

Golang -- 字节切片

Go 语言标准库 bytes ,实现了对字节数组的各种操作。 It is analogous to the facilities of strings package. (它和string 标准包提供的功能类似) 提供的功能如下; 字节切片 处理函数 基本处理函数 字节切片比较函数 前后缀检查函数 字节切片位置索引函数 分割函数 大小写处理函数 子字节切片处理函数 Buffer 对象 Reader 对象 字节切片处理函数 基本处理函数 共七个 Contains() 返回是否包含子切片 Count() 子切片非重叠实例的数量 Map() 函数,将byte 转化为Unicode,然后进行替换 Repeat() 将切片复制count此,返回这个新的切片 Replace() 将切片中的一部分 替换为...阅读全文

博文 2015-03-26 11:00:16 xiaorenwuzyh

Go语言struct的创建与初始化、函数调用

package structTest //struct //Date:2014-4-1 09:57:37 import ( "fmt" "strings" ) func StructTest01Base() { //structTest0101() //structTest0102() structTest0103() } //定义一个struct type Student struct { id int name string address string age int } func structTest0101() { //使用new创建一个Student对象,结果为指针类型 var s *Student = new(Student) s.id = 101 s.name = "Mikl...阅读全文

博文 2015-06-17 23:07:41 books1958

golang学习笔记:go 语法篇(一)

学习一门新的语言肯定是要从他的基本语法开始,语法构成了整个程序设计的基础,从语法中我们也可以看到这门语言的一些特性,但是话说回来,语法这东西,不同的语言大同小异,所以这也对语法的记忆造成了一定的难度,其实最好的方法应该是旁边有本书,随时可以拿过来查阅或者纠正。当然golang的语法也是这样,下面的一些是我学习七牛云存储团队许式伟等出的《Go语言编程》: http://baike.baidu.com/link?url=vFrjnVJwITN0LaRbL7TmWYpq5V8JLWzL_NycAQy6w0e7JXP6a4bGm61ge0gGMU6jNFQO_RnuDGEQPh7YK9w4S_ 语法部分的时候整理的一些,这本书对于新手入门还是挺有帮助的。为了日后可以及时回顾,所以记录下来了。为了避免...阅读全文

博文 2015-06-12 09:00:06 u011321908

GO语言基础入门--类型

类型 本Go语言基础入门内容均来自于《Go语言编程》,个人记录,加深理解。 Go语言内置以下这些基础类型:  布尔类型: bool。  整型: int8、 byte、 int16、 int、 uint、 uintptr等。  浮点类型: float32 、 float64。  复数类型: complex64、 complex128。  字符串: string。  字符类型: rune。  错误类型: error。 此外, Go语言也支持以下这些复合类型:  指针( pointer)  数组( array)  切片( slice)  字典( map)  通道( chan)  结构体( struct)  接口( interface) 在这些基础类型之上Go还封装了下面...阅读全文

博文 2015-04-22 13:00:05 chenqijing2

Golang计算MD5

Golang计算MD5 1.单向加密 什么是单向加密算法。简而言之就是不可解密的加密方法,也叫作非可逆加密。这些学术 解释都不用管它,反正就是一群数学家老爷爷通过各种证明得到的一种方法,用这种方法加密 过的东西,地球上现有的人类在有限的时间内是无法解密的,包括加密者自己。既然加密者自己 都无法解密,那这乖僻的加密算法有个毛用阿?哪些场景需要这种有去无回的加密方式呢? 这里先了解下单向加密的特征: 首先,不可解密性在上面已经提到了,目的就是掩藏明文。其次单向加密算法的另外两个特征 使得它更接地气,第一是任意两段明文数据,加密以后的密文不能是相同的; 第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。这样当我们需要表征一段 唯一的内容,但是有不想别人知道该段内容时或者仅仅是为一个内容...阅读全文

博文 2014-12-30 12:00:01 YangJunjie

<三> go 枚举

在go语言中,没有直接支持枚举的关键字,也就造成go没有直接枚举的功能。但是go提供另一种方法来实现枚举,那就是const+iota // 实现枚举例子 type State int // iota 初始化后会自动递增 const ( Running State = iota // value --> 0 Stopped // value --> 1 Rebooting // value --> 2 Terminated // value --> 3 ) func (this State) String() string { switch this { case Running: return "Running" case Stopped: return "Stopped" default:...阅读全文

博文 2015-11-20 09:00:01 a11101171

详解 Go 语言中的 time.Duration 类型

长久以来,我一直抓狂于 Go 标准库中的 Time 包,我的抓狂来自于两个功能,一是捕获两个不同时间段之间间隔的毫秒数,二是将一个用毫秒表示的连续时间段与预先定义的时间段进行比较。这听起来很简单,没错,确实如此,但它的确让我抓狂了。 在 Time 包中,定义有一个名为 Duration 的类型和一些辅助的常量: ```go type Duration int64 const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hour = 60 * Minute ) ...阅读全文

博文 2018-03-17 23:10:54 swardsman

golang 的time包之time

先看看有哪些类型 Time 时间类型,包含了秒和纳秒以及Location Month type Month int 月份.定义了十二个月的常量 Weekday type Weekday int 周,定义了一周的七天 Duration type Duration int64 持续时间.定义了以下持续时间类型.多用于时间的加减 需要传入Duration做为参数的时候.可以直接传入time.Second const ( Nanosecond Duration = 1 Microsecond = 1000 * Nanosecond Millisecond = 1000 * Microsecond Second = 1000 * Millisecond Minute = 60 * Second Hou...阅读全文

博文 2014-10-04 19:26:08 zhepama

golang中defer的使用规则

自个人博客chinazt.cc 在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。 为了更好的学习defer的行为,我们首先来看下面一段代码: func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } dst, err := os.Create(dstName) if err != nil { return } written, err = io.Cop...阅读全文

博文 2017-07-01 08:00:37 vikings-blog

对Golang interface的理解

理解golang的interface主要在于以下两点: interface是方法的集合 interface是一种类型 简单示例 package main import "fmt" type Animal interface { Speak() string } type Cat struct{} func (c Cat) Speak() string { return "cat" } type Dog struct{} func (d Dog) Speak() string { return "dog" } func Test(params interface{}) { fmt.Println(params) } func main() { animals := []Animal{Cat{}...阅读全文

博文 2017-06-27 13:08:38 GoDev

golang如何获取变量的类型:反射,类型断言

July 29, 2017 in Tech 感觉接口的理解还有些不是很清楚,强写一篇 如果某个函数的入参是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{}) strin...阅读全文

博文 2017-07-30 05:47:10 伊布

go/golang main() init()方法的调用

main() ,init()方法是go中默认的两个方法,两个保留的关键字。 init()方法 是在任何package中都可以出现,但是建议 每个package中只包含一个init()函数比较好,容易理解。 但是main() 方法只能用在package main 中。 Go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个 package中的init函数都是可选的,但package main就必须包含一个main函数。 程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时 将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可 能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被...阅读全文

博文 2015-10-20 13:00:05 u011156212

go的优缺点

1.1 不允许左花括号另起一行1.2 编译器莫名其妙地给行尾加上分号1.3 极度强调编译速度,不惜放弃本应提供的功能1.4 错误处理机制太原始1.5 垃圾回收器(GC)不完善、有重大缺陷1.6 禁止未使用变量和多余import1.7 创建对象的方式太多令人纠结1.8 对象没有构造函数和析构函数1.9 defer语句的语义设定不甚合理1.10 许多语言内置设施不支持用户定义的类型1.11 没有泛型支持,常见数据类型接口丑陋1.12 实现接口不需要明确声明1.13 省掉小括号却省不掉花括号1.14 编译生成的可执行文件尺寸非常大1.15 不支持动态加载类库 Go语言的优点:并发/网络/性能/工具(fmt/pprof/test)/标准库(http/json/log/flags/atomic)/Go...阅读全文

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

IntelliJ IDEA开发golang环境配置

看到一篇文章说IntelliJ IDEA开发作为Go的开发环境不错,突然发神经地想试了一下。 谁知道跟着教程走,到后面越来越不对劲,去百度其它教程,谁知道千篇一律。。。 好了下面开始了 首先把GO安装好。。。(自行安装,附上一篇我之前写的MAC安装GO) 安装IntelliJ IDEA,下载地址: https://www.jetbrains.com/idea/download/。 下载go-lang-idea-plugin这个插件,下载地址: https://plugins.jetbrains.com/plugin/5047。(PS:网上百度的基本都是下源码、编译,搞了一个下午编译,谁知道有已经编译好的可以下载) 下载之后,是一个zip文件,不需要解压,打开IntelliJ IDEA,打开P...阅读全文

博文 2016-02-14 04:00:02 skytoup

Go 语言的优点,缺点和令人厌恶的设计

这是关于 「[Go是一门设计糟糕的编程语言 (Go is not good)](https://github.com/ksimka/go-is-not-good)」 系列的另一篇文章。Go 确实有一些很棒的特性,所以我在这篇文章中展示了它的优点。但是总体而言,当超过 API 或者网络服务器(这也是它的设计所在)的范畴,用 Go 处理商业领域的逻辑时,我感觉它用起来麻烦而且痛苦。就算在网络编程方面,Go 的设计和实现也存在诸多问题,这使它看上去简单实际则暗藏危险。 写这篇文章的动机是因为我最近重新开始用 Go 写一个业余项目。在以前的工作中我广泛的使用了 Go 为 SaaS 服务编写网络代理(包括 http 和原始的 tcp)。网络编程的部分是相当令人愉快的(我也正在探索这门语言),但随之而来...阅读全文

博文 2018-05-06 22:44:53 Donng

go语言 strconv.ParseInt 的例子

golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大,看的我口水直流.func ParseInt(s string, base int, bitSize int) (i int64, err error)参数1 数字的字符串形式参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制参数3 返回结果的bit大小 也就是int8 int16 int32 int64代码: package main import ( "strconv" ) func main() { i, err := strconv.ParseInt("123", 10, 32) if err != nil { panic(err) } println(i) ...阅读全文

博文 2015-01-22 13:00:01 chuanheng

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 byte转string 字节数组转字符串的问题

golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上大部分都是这样转的(包括google上):string(p[:]),这个转完了是有问题的,我们再来看一下string这个结构体: struct String{ byte* str; intgo len;}; 这个结构体让我想起了nginx的string,他是这样定义的: typedef struct { size_t len; u_char *data;} ngx_str_t; golang里边 string的概念其实不是以前遇到\0结尾的概念了,他其实就是一块连续的内存,首地址+长度,上面那样...阅读全文

博文 2015-08-17 03:00:00 anjianliang

驳狗屎文 "我为什么放弃Go语言"

驳狗屎文 “我为什么放弃Go语言” 此篇文章流传甚广, 其实里面没啥干货, 而且里面很多观点是有问题的. 这个文章在 golang-china 很早就讨论过了.最近因为 Rust 1.0 和 1.1 的发布, 导致这个文章又出来毒害读者.所以写了这篇反驳文章, 指出其中的问题. 原文链接:http://blog.csdn.net/liigo/article/details/23699459 有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。 开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论。但是我...阅读全文

博文 2015-07-02 12:00:03 chai2010

Golang文件操作整理

最近做的一点事情,用到了golang中不少文件操作的相关内容,创建,删除,遍历,压缩之类的,这里整理整理,希望能掌握的系统一点,把模糊的地方理清楚。 基本操作 文件创建 创建文件的时候,一定要注意权限问题,一般默认的文件权限是 0666 关于权限的相关内容,具体可以参考鸟叔p141 这里还是再回顾下,文件属性 r w x r w x r w x,第一位是文件属性,一般常用的 "-" 表示的是普通文件,"d"表示的是目录,golang里面使用os.Create创建文件的时候貌似只能使用0xxx的形式。比如0666就表示创建了一个普通文件,文件所有者的权限,文件所属用户组的权限,以及其他人对此文件的权限都是110表示可读可写,不可执行。 文件删除 文件删除的时候,不管是普通文件还是目录文件,都可...阅读全文

博文 2015-05-28 03:00:00 Goden

Gin实战:Gin+Mysql简单的Restful风格的API

我们已经了解了Golang的Gin框架。对于Webservice服务,restful风格几乎一统天下。Gin也天然的支持restful。下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全。我们先以一个单文件开始,然后再逐步分解模块成包,组织代码。 It works 使用Gin的前提是安装,我们需要安装gin和mysql的驱动,具体的安装方式就不在赘述。可以参考Golang 微框架Gin简介和Golang持久化。 创建一个文件夹用来为项目,新建一个文件main.go: ☁ newland tree . └── main.go main.go package main import ( "gopkg.in/gin-gonic/gin.v1" "net/http" ) func main() {...阅读全文

博文 2017-03-23 06:59:03 人世间

golang中strings包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3236300.html strings 包中的函数和方法 // strings.go ------------------------------------------------------------ // Count 计算字符串 sep 在 s 中的非重叠个数 // 如果 sep 为空字符串,则返回 s 中的字符(非字节)个数 + 1 // 使用 Rabin-Karp 算法实现 func Count(s, sep string) int func main() { s := "Hello,世界!!!!!" n := strings.Count(s, "!") fmt.Println(n) //...阅读全文

博文 2016-01-18 23:00:04 chenbaoke

golang 线程与通道

首先我们来看线程,在golang里面也叫goroutine 在读这篇文章之前,我们需要了解一下并发与并行。golang的线程是一种并发机制,而不是并行。它们之间的区别大家可以上网搜一下,网上有很多的介绍。 下面我们先来看一个例子吧 import( "fmt" ) funcmain(){ go fmt.Println("1") fmt.Println("2") } 在golang里面,使用go这个关键字,后面再跟上一个函数就可以创建一个线程。后面的这个函数可以是已经写好的函数,也可以是一个匿名函数 funcmain(){ vari=3 go func(a int) { fmt.Println(a) fmt.Println("1") }(i) fmt.Println("2") } 上面的代码就创...阅读全文

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

beego入门文档

你对beego一无所知?没关系,这篇文档会很好的详细介绍beego的各个方面,看这个文档之前首先确认你已经安装了beego,如果你没有安装的话,请看这篇安装指南 导航 最小应用 新建项目 开发模式 路由设置 静态文件 过滤和中间件 Controller设计 模板处理 request处理 跳转和错误 response处理 Sessions Cache设置 安全的Map 日志处理 配置管理 beego参数 第三方应用集成 部署编译应用 最小应用 一个最小最简单的应用如下代码所示: package main import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (this...阅读全文

博文 2014-10-04 19:27:32 astaxie

关于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

GoLang 字符串处理大全

package main import ( "fmt" "strings" //"unicode/utf8" ) func main() { fmt.Println("查找子串是否在指定的字符串中") fmt.Println(" Contains 函数的用法") fmt.Println(strings.Contains("seafood", "foo")) //true fmt.Println(strings.Contains("seafood", "bar")) //false fmt.Println(strings.Contains("seafood", "")) //true fmt.Println(strings.Contains("", "")) //true 这里要特别注意 fm...阅读全文

博文 2015-06-17 20:04:07 gzw13999

go语言常用函数:copy

数组切片内容复制 用于将内容从一个数组切片复制到另一个数组切片。如果加入的两个数组切片不一样大,就会按其中较小的那个数组切片的元素个数进行复制。 slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{5, 4, 3} copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中 copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置 //http://www.cnblogs.com/osfipin...阅读全文

博文 2015-07-28 03:00:00 osfipin

Go 系列教程 —— 2. Hello World

这是 Golang 系列教程的第 2 个教程。如果想要了解什么是 Golang,以及如何安装 Golang,请阅读 [Golang 教程第 1 部分:介绍与安装](/articles/11706)。 学习一种编程语言的最好方法就是去动手实践,编写代码。让我们开始编写第一个 Go 程序吧。 我个人推荐使用安装了 [Go 扩展](https://marketplace.visualstudio.com/items?itemName=lukehoban.Go)的 [Visual Studio Code](https://code.visualstudio.com/) 作为 IDE。它具有自动补全、编码规范(Code Styling)以及许多其他的特性。 ## 建立 Go 工作区 在编写代码之前,我...阅读全文

博文 2017-11-28 16:28:49 heyulong

golang 内置函数new() 和struct{} 初始化的区别

new() 这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针。 在golang的代码定义如下: func new(t Type) *Type strut{} 直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的 两者对比代码如下: type Student struct{ id int name string } func main(){ var s_1 *Student = new(Student) s_1.id = 100 s_1.name = "cat" var s_2 Student = Student{id:1,name:"tom"} fmt.Println...阅读全文

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

golang mysql 简单封装与使用

有时候真的没必要使用xorm, gorm这些重量级orm工具。 golang本来就有成熟的mysql库,相比node.js那些反人类又半吊子的mysql库,真的好太多了。 打开mysql import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) dbtemp, err := sql.Open("mysql", "root:password@/dbname?charset=utf8") db = dbtemp if err != nil { fmt.Println(err) } stmt, err := db.Prepare("create table if not exists dev(id int UNSIGNED AUTO_...阅读全文

博文 2015-08-13 09:00:02 dearplain

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语言解析html

有两个不错的库: https://github.com/PuerkitoBio/goquery 一个是 http://code.google.com/p/go.net/html html是html的解析器,把html文本解析出来,goquery基于html包,在此基础上结合cascadia 包(一个css选择器工具),实现类似于jquery的功能,操作html非常方便。 使用goquery来查找,选择相应的html节点,但如果要对选择的节点进行修改,删除操作,还需要深入使用html包。 html包把html文本解析为一个树,这个树有很多Node组成,操作的核心就在于对Node的操作。 用几个例子来说明一下吧: doc, err := goquery.NewDocument("http://s...阅读全文

博文 2015-08-06 20:00:07 nop4ss

GO同包内不同文件方法引用问题

问题:GO语言同包内不同文件方法引用在本地LiteIDE中可运行,但在linux环境下报错: 在main.go中引用c2c_admin_base_info.go中GetcsChatCntTrend方法: 本地运行正常,但部署至linux服务器时,报错: 解决方案:将c2c_admin_base_info.go放到包data下 main.go c2c_admin_base_info.go 层级关系: 注:包和package有关系:main包和main函数比较特殊,是程序的入口,其他的包就要和文件夹名字一样(感谢扫盲的GO大牛...阅读全文

博文 2014-10-16 17:00:00 sea_198821

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

Go中运用chan的简单案例

开发环境:windows7 64位、编辑器:sublime text3 简要说明:Go中可以创建有缓冲的chan(比如: c1:=make(chan int,4)就是缓冲区大小为4的chan了 ),也可以创建没有缓冲的chan(比如: c2:=make(chan int)就是没有缓冲的chan)。 代码如下,代码中有注释: package main import ( "fmt" ) func main() { c := make(chan int, 2) //创建带有缓冲的chanel,缓冲大小是2 //这样调用函数,那么f1和f2就是并发执行了 go f1(c) //将参数c传递给f1() go f2(c) //将参数c传递给f2() c1 := <-c c2 := <-c //main函...阅读全文

博文 2015-11-14 09:00:01 汉斯-冯-拉特

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中defer的执行

golang中defer的执行 大家都知道golang的defer关键字,它可以在函数返回前执行一些操作,最常用的就是打开一个资源(例如一个文件、数据库连接等)时就用defer延迟关闭改资源,以免引起内存泄漏。例如: func do() (ok bool) { file,_ := os.Open("c:\a.txt") defer file.Close() // doSomething return ok } 我们可以在官方的文档中看到defer的执行顺序是逆序的,也就是先进后出的顺序: for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } 打印结果是:4,3,2,1,0 那么再看这个例子: func deferRet(x,y int) ...阅读全文

博文 2014-10-04 19:26:10 wowzai

golang http HandleFunc

golang http的handle模块(一般也称为钩子模块),通过高级语言的匿名函数很容易实现这种内嵌功能的handle 我们一般这样使用golang的http HandleFunc来为http的server端做相应的处理 /*********************************************/ http.HandleFunc("/", xxx_FUN) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } /*********************************************/ 我们再深入源码仔细看看http.H...阅读全文

博文 2015-11-09 18:00:07 golang_yh

理解 golang 中的 context(上下文) 包

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/understanding-the-context-package-in-golang/0_exTPQ4ppfrdjuXcR.jpg) Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。这是一个基本教程,介绍如何在项目中使用它以及一些最佳实践和陷阱。 要理解 context 包,您应该熟悉两个概念。 在转到 context 之前,我将简要介绍这些内容,如果您已经熟悉,则可以直接转到 context 部分。 ## Goroutine...阅读全文

博文 2018-07-29 00:20:23 themoonbear

Golang读写文件操作

最近在使用Golang进行文件读写的过程中,遇到几个细节问题导致程序写入数据时有一定脏数据的残留,最后发现是使用os.OpenFile在进行文件操作的时候没有使用正确的flag造成的。因此专门去学习了下Golang中读写文件的几种方式方法,在此记录下一些简单的操作,防止以后遗忘。 读文件 使用golang语言去读取一个文件默认会有多种方式,这里主要介绍以下几种。 使用ioutil直接读取 需要引入io/ioutil包,该包默认拥有以下函数供用户调用。 func NopCloser(r io.Reader) io.ReadCloser func ReadAll(r io.Reader) ([]byte, error) func ReadDir(dirname string) ([]os.Fil...阅读全文

博文 2017-12-24 09:03:15 Andy-xu

Go语言的defer,你真的懂了吗?

2013-04-25 Go语言的defer,你真的懂了吗? example1 func f() (result int) { defer func() { result++ }() return 0 } example2 func f() (r int) { t := 5 defer func() { t = t + 5 }() return t } example3 func f() (r int) { defer func(r int) { r = r + 5 }(r) return 1 } 先不要运行代码,自己在心里跑一遍结果,然后再去验证。如果三个都做对了并且不好蒙的...好吧,不用往下看了,你已经懂defer了。 额,如果example1中你算的是0,你就错了;如果example2...阅读全文

博文 2015-03-16 11:57:12 zenlife

go语言的官方包sync.Pool的实现原理和适用场景

已经使用golang有一段时间,go的协程和gc垃圾回收特性的确会提高程序的开发效率。但是毕竟是一门新语言,如果对于它的机制不了解,用起来可能会蹦出各种潘多拉盒子。今天就讲讲我在项目中用到的sync包的Pool类的使用,以免大家混淆使用。 众所周知,go是自动垃圾回收的(garbage collector),这大大减少了程序编程负担。但gc是一把双刃剑,带来了编程的方便但同时也增加了运行时开销,使用不当甚至会严重影响程序的性能。因此性能要求高的场景不能任意产生太多的垃圾(有gc但又不能完全依赖它挺恶心的),如何解决呢?那就是要重用对象了,我们可以简单的使用一个chan把这些可重用的对象缓存起来,但如果很多goroutine竞争一个chan性能肯定是问题.....由于golang团队认识到这个...阅读全文

博文 2015-06-17 20:06:14 yongjian_lian