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

Mac OS X 安装Golang

1.确保Mac OS X 安装了Git,Hg,在Mac OS X 10.8+下面安装Xcode CommandLine Tools就可以了,10.9以上安装Xcode就包含了Git工具,hg请安装SourceTree,这个Git GUI工具包含了Mercurial工具 2.下载安装go1.3.1.darwin-amd64-osx10.8.pkg 3.安装Sublime Text,一次安装插件,GoSublime,配置GoSublime-Settings-User文件,切记不要改动任何Default文件,例如:GoSublime-Setting-User写入 { "env": { "GOPATH": "$HOME/Documents/GoPATH/", "GOROOT": "/usr/loca...阅读全文

博文 2014-12-04 11:00:01 Vanson

GO语言的一些简单数据类型之间相互转换

在GO语言的使用过程中总会遇到一些类型之间相互转换的问题,做了一个简单的总结。只列出了几种易用的类型间的转换,如果用到其他类型间的数据类型格式转换,查看GO文档是很不错的选择。 strconv包实现了基本数据类型和其字符串表示的相互转换。 //string到int value_int,err:=strconv.Atoi(string) //int到string str:=strconv.Itoa(value_int) //string到int64 value_int64, err := strconv.ParseInt(string, 10, 64) //int64到string,需注意下面转换规定 //FormatInt returns the string representation ...阅读全文

博文 2015-06-23 23:02:19 qq_534019165

go里面select-case和time.Ticker的使用注意事项

上周末参加Go技术聚会,京东的美女工程师讲到一个select-case和time.Ticker的使用注意事项(真实的应用场景是:在测试收包的顺序的时候,加了个tick就发现丢包了),觉得很有意思,记录一下。 package main import ( "fmt" "runtime" "time" ) func init() { runtime.GOMAXPROCS(runtime.NumCPU()) } func main() { ch := make(chan int, 1024) go func(ch chan int) { for { val := <-ch fmt.Printf("val:%d\n", val) } }(ch) tick := time.NewTicker(1 * t...阅读全文

HBase Go客户端Row构造注意事项

1. Hbase 的Go客户端语言使用方法 2. Hbase的Row使用注意事项 2.1. Row的前几个字段尽量散列 2.2. Row的排序是把所有Row中的字符做字典排序 我们最近在一个项目中使用Hbase做日志数据的存储,在其之上做一些数据分析工作,相对java来说,团队成员对Go的使用更熟练,所以自然使用Go作为Client的开发语言, 以前从来没有跟Hbase打过交道,本来一个比较简单的任务,愣是磕磕绊绊做了好久。。。 本文只说说Hbase的Row构造时的注意事项 1 Hbase 的Go客户端语言使用方法 Hbase官方没有Go的客户端,但是它提供了thrift服务,我们可以用Go语言开发一个thrift 的client,通过向hbase的thrift server发送RPC请求,...阅读全文

博文 2015-02-10 03:00:01 cobbliu

Go Agent

在这片神奇的土地上,FQ应该是每个网友必需掌握的技能,FQ的首要,就是F过心里的Q。心中无Q,才是最重要的。本教程介绍用 GAE(Google App Engine)FQ的方法。GAE的官方介绍:“Google App Engine,在Google的基础架构上运行您的网络应用程序。” GAE的优点很多,首先它是完全免费的,并且非常稳定,其次它提供大流量,足够让你在YouTube上看各种视频了。 注意事项! 本教程开始之前需要准备Gmail账号和Chrome浏览器。go agent在这里http://www.dengyukeji.com/thread-567-1-1.html下载。 操作步骤 1、打开:https://appengine.google.com/,输入gmail用户密码登入。 2...阅读全文

博文 2015-06-18 09:09:14 dengyukeji

Golang中range的使用方法及注意事项

一、用法range类似迭代器,可以遍历数组,字符串,map等等,对象的不同,返回的结果也不同。 12345678910111213141516171819package mainimport "fmt"func main(){ //数组的遍历 a := [3]int {1, 2, 3} for i, n := range a{ fmt.Println(i, n) } //切片的遍历 b := []int{2, 3, 4} for i, n := range b{ fmt.Println(i, n) } //map的遍历 c := map[string]int{"Hello":1, "World":2} for k, v := range c{ fmt.Println(k, v) }} 结果:...阅读全文

博文 2018-05-17 09:25:56 马谦的博客

Go-template-常用方法详解-注意事项

Go template包下面有两个函数可以创建模板示例 func New(name string) *Template func ParseFiles(filenames ...string) (*Template, error) 首先要说的是每一个template内部可以存储多个模板 而且每个模板必须对应一个独立的名字 两个的不同点在于 使用New在创建时就为其添加一个模板名称 并且执行t.Execute()会默认去寻找该名称进行数据融合 使用ParseFiles创建模板可以一次指定多个文件加载多个模板进来 但是就不可以使用t.Execute()来执行数据融合 因为使用t.Execute()无法找到要使用哪个加载过的模板进行数据融合 而只有New创建时才会指定一个t.Execute()执行...阅读全文

博文 2015-12-20 20:00:06 u012807459

Golang 的 map,slic 转 json 注意 chan

// You can edit this code! // Click here and start typing. package main import "fmt" import "encoding/json" type ChannelOperator struct { Oid string Aid string Name string Isonline bool Msgchan chan string `json:"-"` } type ChannelOperators struct { Op []ChannelOperator } func main() { fmt.Println("Hello, 世界") mm := make(map[string]*ChannelOperator...阅读全文

博文 2015-06-17 20:17:41 peta

golang sync.Pool试用说明及注意事项

Go tip 是 Go 语言的实验分支,包含了很多尚在讨论,但很有可能会加入 stable 分支的特性。“Go tip 在做什么”(原文地址:What's happening in Go tip)分析总结了 Go 语言尚在开发中的一些重要特性。 本文译自:What's happening in Go tip (2014-01-10) 现在是 2014 年了,刚刚经历了圣诞和新年前夜,Go 团队就已经开始为下一个发布版本而工作了。也因此,“Go tip 在做什么”系列也重开了。 作为这个系列的最新一篇,这篇文章将会有些小调整。最重要的调整是,不会再遵循每周一篇文章的发布周期。一周里可能有几篇文章,也可能一篇都没有。这个调整,一部分由于个人原因,一部分也因为这样可以更灵活的追踪 Go 的改变。这...阅读全文

Go语言中不同类型切片之间的相互转换

将 []T 切片转换为 []byte 类似C语言中将其他类型的数组转换为char数组: func ByteSlice(slice interface{}) (data []byte) { sv := reflect.ValueOf(slice) if sv.Kind() != reflect.Slice { panic(fmt.Sprintf("ByteSlice called with non-slice value of type %T", slice)) } h := (*reflect.SliceHeader)((unsafe.Pointer(&data))) h.Cap = sv.Cap() * int(sv.Type().Elem().Size()) h.Len = sv.Len...阅读全文

博文 2015-05-12 21:00:03 chai2010

golang中设置Host Header的小Tips

前言 笔者最近时间一直在学习和写Ruby和Go,尤其是Go,作为云计算时代的标准语言,写起来还是相当有感觉的,难过其会越来越火。 不过写的过程中,也遇到了一些小问题,本文就是分享关于go语言设置 HTTP请求当中 Host Header的一个小注意事项。 常规做法 通常我们在设置HTTP的Header请求时,一般都是这么做: Header.Add("Authentization", "TOKEN") Header.Add("Content-Type", "application/json") ... Java, Ruby, Go 都是如此,区别的只是语法不同。但是对于Host Header的处理就不同了。在Go中,如果我们这么写: header.Add("Host", "XXXXXXXXX"...阅读全文

博文 2016-01-27 03:00:00 jinsdu

从Go、Swift出发:语言的选择需谨慎

本文转自 : http://www.csdn.net/article/2014-12-09/2823025 摘要:无论是开源的Go,还是闭源的Swift,新的语言总是利弊一体。不过可以确定的是,新的语言给予程序员一些有用的支撑点。而对于开发者而言,不管你成长多少,你都会受制于你使用的根源语言,所以选择需谨慎。 Google于2009年第一次提出了Go的构思,Facebook在去年春天引入了Hack,随后不久Apple也发布了其Swift语言。 在 战争中,胜利者写历史书;在科技中,赢的公司都在写编程语言。互联是建立在开发标准和代码之上,但是社交网络和云计算领域受企业巨头控制,并且它们开始把 自己独一无二的印记烙在数字科技上——这是必然的,就像征服者威廉和他的诺曼人一样,大量新的词汇加入到英语...阅读全文

博文 2016-04-10 09:05:09 ftm-datablogs

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

go 协程使用陷阱

golang 语言协程 协程中使用全局变量、局部变量、指针、map、切片等作为参数时需要注意,此变量的值变化问题。 与for 循环,搭配使用更需谨慎。 1、内置函数时直接使用局部变量,未进行参数传递 func main() { for i := 0; i < 100; i++ { go func() { fmt.Println(i) }() } } 运行效果 func main() { for i := 0; i < 100; i++ { go func(i int) { fmt.Println(i) }(i) } } 运行效果 2。地址传递的参数 type Per struct { name string bh int } func main() { p := &Per{} for i :...阅读全文

博文 2016-06-25 06:00:00 xia_xing

Golang实现红黑树

盼望已久的五一终于到来了!我一直在考虑要不要利用这几天时间好好睡上一觉,习惯成自然,宅也是如此。睡觉都觉得无聊的时候,就有了写点什么的念头。也借此机会提高一下写作能力,看看什么时候能写一部长篇小说。 用Golang实现红黑树算是一次尝试,毕竟工作环境没用到,不知道以后会不会用。自己也是看着玩,开阔一下思路。从我开始看Golang的doc到写这篇文章利用的是大概2周中的业余时间,所以Golang的语法掌握的还有欠缺;很多特性,例如高并发等都还没有测试,如文中出现错误或不合理的地方,请指正。 本文应用的基本逻辑参考自wiki的红黑树,依据golang的语言特性部分结构可能稍有改动。同时这篇文章里也加入了我在实现过程中的想法和实现时可能会遇到的问题。wiki上的红黑树中文版本,不过建议直接看英文版...阅读全文

博文 2016-05-03 14:00:03 happywjh666

美团云老板和老板娘去度假,员工任性!5折券再送5天!!!

【活动介绍】值双11来临之际,美团云特别推出云主机,网络,数据库,负载均衡等产品的5折优惠券,以及对象存储3折优惠券。同时还推出“买就返享5折”,“以及分享得返利”等特惠活动,欲知详情,就请戳下方的活动链接吧! 悄悄告诉你~大老板和老板娘去度假了!我们任性的将活动延期5天! 【领券地址】: https://mos.meituan.com/activity1510?site=golang&location=homepage&campaign=20151026sales ![5tian.jpg](http://studygolang.qiniudn.com/151109/b3eeebbde478e6396d00b2c095365dc3.jpg) 【活动时间】10月26日至...阅读全文

golang缩略图

今天研究了golang生成缩略图的相关知识,在网上找到一篇不错的相关博客,博客地址:http://www.cnblogs.com/ghj1976/p/3445507.html。 有个注意事项这里提醒一下: 官方文档原话: Image接口可以通过调用如NewRGBA和NewPaletted函数等获得;也可以通过调用Decode函数解码包含GIF、JPEG或PNG格式图像数据的输入流获得。解码任何具体图像类型之前都必须注册对应类型的解码函数。注册过程一般是作为包初始化的副作用,放在包的init函数里。因此,要解码JPG图像,只需在程序的main包里嵌入如下代码: import _ “image/JPG” _表示导入包但不使用包中的变量/函数/类型,只是为了包初始化函数的副作用。 整理了一下代码:...阅读全文

博文 2015-10-21 16:00:09 u013025612

golang-mongodb范例

1 package main 2 3 import ( 4 "log" 5 6 "gopkg.in/mgo.v2" 7 "gopkg.in/mgo.v2/bson" 8 ) 9 10 type Address struct { 11 Address string 12 } 13 type Location struct { 14 Longitude float64 15 Latitude float64 16 } 17 18 type Person struct { 19 Id bson.ObjectId `bson:"_id"` 20 Name string 21 Age_Int int 22 Address []Address 23 Location Location 24 } 25 2...阅读全文

博文 2016-03-17 01:00:01 --xiaoyao--

使用CGO进行GC优化的注意事项

前阵子我利用cgo对游戏内存数据库的数据存储方式做了优化,减少了对象数量。但是程序放到线上环境后出现了段错误,直接导致进程退出,只好临时又把优化的部分去掉,去掉后程序又继续稳定运行了两周。 优化代码撤下来后,我重新整理了代码。整理下来,我觉得对含有字符串字段的表的优化逻辑太过复杂了,并且很难控制边界情况。 这里举个例子: type MyTable struct { Name string } func InsertMyTable(myTable MyTable) { nameLen := C.size_t(len(myTable.Name)) name := C.calloc(1, nameLen) C.memcpy(name, unsafe.Pointer((*reflect.String...阅读全文

博文 2014-10-13 20:37:36 达达

关于 Go 即将支持的 WebAssembly 的一些注意事项

这是一篇关于 webassembly 的即时记录,它的目的是给我做个备忘而不仅仅是如果使用它的教程。 即将发布的 Go 1.11 版本将支持 Wasm。@neelance 做了大部分的实施工作。对 wasm 的支持已经可以通过他在 github 上的工作分支进行测试。 看[这篇文章](https://blog.gopheracademy.com/advent-2017/go-wasm/)了解更多信息 ## 工具链设置 要从 go 源码生产一个 wasm 文件,您需要从源码获取并为 go 工具集打补丁: ``` ~ mkdir ~/gowasm ~ git clone https://go.googlesource.com/go ~/gowasm ~ cd ~/gowasm ~ git ...阅读全文

博文 2018-07-14 12:06:09 themoonbear

Win8 to Go可以使用u盘将Windows 8操作系统装在u盘

Win8 to Go与go语言无关 Windows 8操作系统企业版内含一个Windows To Go的功能,简单地讲就是可以使用u盘将Windows 8操作系统装在u盘,这个所谓的工作区,就是和Windows 8操作系统相差无几(和传统的u盘PE系统不一样)。但是,很多人尝试安装失败,其中最重要的原因是没有关注对此软件安装的使用环境、方法和注意事项的一些细节。 Windows To Go 具备条件: 1 硬件需求: 电脑:安装Windows 8操作系统,CPU需要在1GHz以上,内存空间2GB以上,显卡需要支持 DirectX 9和WDDM 10或更高版本。 Windows To Go 2 u盘:电脑的USB接口最好是支持USB3.0的,如果电脑...阅读全文

[go语言]避免过度重构

golang-nuts上有人提了一个问题[1],询问怎么样把减少两个类似数据结构和算法的重复代码。简而言之,有两个struct:QuickFindSet和QuickUnionSet,它们各有Count, IsConnected, Find, Union等方法。他发现这两个struct的一些函数的实现是一样的,因此他希望能消除这些重复代码。 ? www.usr.cc 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 04...阅读全文

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

Python内置对象实现的方法及注意事项

![QQ截图20150928150103.png](http://studygolang.qiniudn.com/150928/e6361a28482c2d44561584940a75112b.png) Python语言中,所有的东西都是对象,因此对于python初学者来说,搞清楚python对象的具体实现非常重要。 Python中的对象主要分为类型对象和实例对象,但也不排除有同时属于类型和实例的对象,而不管是什么对象,除了内置的类型对象外,都存在于堆上,内置的类型对象则静态分配内存。下面我们就一起来看看python常见的内置对象及其实现方法吧。 1、int int这个对象比较简单,但还是需要重点了解,以便高效的实现。python首先有小整数对象。默认在[-5, 25...阅读全文

Golang使用RemoteAddr()获取远程主机地址的注意事项

一、问题描述http.Request 下的方法RemoteAddr() 可以获取客户端的地址和端口号,最近的一个项目中用到了这个方法。 使用过程中一直都没有什么问题,但是当项目上线之后就发现不管怎么获取ip,客户端地址都是127.0.0.1 。 对于这个问题一直百思不得其解,最后搞了半天才发现是nginx 的原因。 因为线上项目使用nginx做了反向代理,所以导致服务端每次获取的都是nginx的地址,即127.0.0.1 。 关于这个问题的具体的内容可以查看:HTTP协议中的X-Real-IP, X-Forwarded-For和remote_addr头 二、解决方法当http请求不存在代理的时候,使用这个方法时没有问题的,但是在有代理的情况下,就只能通过其他的方法来获取了。 如果是nginx...阅读全文

博文 2018-05-17 09:53:05 马谦的博客

golang的项目结构 相关知识

### 项目结构 ``` ├── bin │ ├── login │ └── main ├── pkg │ └── darwin_amd64 │ └── login │ └── auth1.a ├── src │ ├── cfg │ │ └── testcfg.go │ ├── db │ │ ├── innerdb │ │ │ └── innerdb.go │ │ └── db.go │ ├── login │ │ ├── auth1 │ │ │ └── auth1.go │ │ ├── auth2 │ │ │ └── auth2.go │ │ └── login.go │ └── main.go └── Makefile ``` *** ### 两种包导入方式 ##### local im...阅读全文

Go语言中不同类型切片之间的相互转换

将 []T 切片转换为 []byte 类似C语言中将其他类型的数组转换为char数组: func ByteSlice(slice interface{}) (data []byte) { sv := reflect.ValueOf(slice) if sv.Kind() != reflect.Slice { panic(fmt.Sprintf("ByteSlice called with non-slice value of type %T", slice)) } h := (*reflect.SliceHeader)((unsafe.Pointer(&data))) h.Cap = sv.Cap() * int(sv.Type().Elem().Size()) h.Len = sv.Len...阅读全文

博文 2015-09-15 03:00:01 kuipertan

map嵌套map,每一层map都需要make初始化

package main import ( "fmt" ) // 注意,当map嵌套的时候,每一个map都需要初始化 func main() { var m map[int]map[int]string m = make(map[int]map[int]string) // 初始化 a, ok := m[2][1] if !ok { m[2] = make(map[int]string) //初始化内层的map } m[2][1] = "good" a, ok = m[2][1] fmt.Println(a) fmt.Println(ok) } ...阅读全文

Go语言程序设计的一些规则和注意事项

载:http://www.jincon.com/archives/257/ http://www.liguosong.com/2013/07/07/golang%E7%9A%84%E5%B0%8F%E6%80%BB%E7%BB%93/ 1、Go编程的风格,可以以组为单位进行申明变量和常量,以及加载包。 2、Go语言支持简单的函数,条件和循环风格,把括号都给省掉了 3、 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公用变量;小写字母开头的就是不可导出的,是私有变量。 4、大写字母开头的函数也是一样,相当于class中的带public关键词的公有函数;小写字母开头的就是有private关键词的私有函数。 5、go语言是不需要以分号结尾的,这个和python非常类似。 6、Go语言是支...阅读全文

博文 2015-06-30 20:00:00 yugongpeng_blog

5个常用的Java镜像及其注意事项

![20140709134300-846982186.jpg](http://studygolang.qiniudn.com/151008/511a61c92a4d030e330ae41695b4a914.jpg) 在web后端开发中,Java语言一直是最受欢迎的语言之一,而作为Android开发的基础语言,Java在移动开发领域也有着惊人的受欢迎度,本文小编就将为大家介绍Java的5个具有代表性的Docker镜像,希望对大家学习Java语言有帮助。 1、STASH Stash 是 Git 代码管理和协作工具,允许将部署节点集群化,从而减少活动主机的停机时间,且不会对每个添加的节点造成性能影响。Stash 还集成了 JIRA(同一公司出品)的可追溯能力,并为团队提供协作工具...阅读全文

GO-Agent简单设置

1,下载安装包 官方地址:https://code.google.com/p/goagent/ 这里以版本1.7.9为例,现在有一个zip包。 1) 选择解压到当前文件夹 主要配置一下local文件里面的appid。 以及导入一下证书,如果你打算访问fb,推忒等。 2,配置appid 1) 打开local下面的proxy.ini 把上面的汉字部分替换成你申请的appid,可以配置多个,多个话,流量可以共享,google app engine是有流量限制的。 如果给你们的zip包里面的ini文件已经设置好了我以前的申请的2个appid的话,就不要改了,就用我的吧。 2) 导入根证书,并且信任它。 因为以后要访问的fb等网站的证书都是这个根证书签发的假冒证书,姑且信任吧。 选择信任的颁发机构 选...阅读全文

二、slice和数组的区别,map的注意事项 -go语言笔记

这次要说说array,slice,map。虽然前面已经说过了,但是实际使用中发现对这几个的使用和理解还是不够详细 现在再重新看看这几个类型 array类型 array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。但是和C中的数组相比,又是有一些不同的: 1 Go中的数组是值类型,换句话说,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份 2 如果Go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。这个和C要区分开。因此,在Go中如果将数组作为函数的参数传递的话,那效率就肯定没有传递指针高了。这个是不是有点陷阱的感觉? 3 array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。 a...阅读全文

博文 2016-03-22 13:00:01 alvine008

go语言细节

数组与字符串为值类型,切片、映射、通道为值类型,赋值需注意。 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 //数组 9 a1 := [3]int{1, 2, 3} 10 a2 := a1 11 a2[0] = 2 12 fmt.Println(a1) //print: 1 2 3 13 fmt.Println(a2) //print: 2 2 3 14 // 字符串 15 s1 := "123" 16 s2 := s1 17 s2 = "223" 18 fmt.Println(s1) //print 123 19 fmt.Println(s2) //print 223 20 // 切片 21 slice1 := []...阅读全文

博文 2015-11-24 03:00:00 --xiaoyao--

[golang note] 工程组织

golang项目目录结构 ├─README ├─AUTHORS ├─ ├─ ├─ golang工程不需要任何的工程文件,一个完整的工程通常会在项目根目录下放置上面所示的文件或目录。它们的作用如下: √ README : 简单介绍本项目的目标和主要注意事项,通常第一次使用时应该先阅读此文档。 √ LICENSE : 本工程采用的分发协议,所有开源项目通常都拥有该文档。 √ src : src目录用于存放所有的源代码。 √ pkg : pkg目录用于存放编译后的包文件,无需手动创建。 √ bin : bin目录用于存放编译后的可执行文件,无需手动创建。 • src目录 √ 目录src用于包含所有的源代码,是go tool一个强制的规则。 ...阅读全文

博文 2016-05-07 15:00:00 heartchord

golang 中使用数组创建slice时的注意事项

golang中,slice是对固定长度数组的一段切片,其底层是用对数值空间的指针实现的。 在golang中当使用一个数组来创建slice时如: var array [5]int = [5]int{1,2,3,4,5} //切割出数组中的4个值,创建一个slice myslice := array[0:4] 打印array的值为: 1, 2, 3, 4, 5 打印mysqlice的值为: 1, 2, 3, 4 现在我们对myslice进行append操作 myslice = append(myslice,100) 打印array的值为: 1, 2, 3, 4, 100 打印mysqlice的值为: 1, 2, 3, 4, 100 现在我们再对myslice进行修改操作 myslice[0] =...阅读全文

博文 2015-06-17 20:02:25 happinessaflower

golang的sql.DB的一些注意事项及读写锁的总结

最近在写一个用于存储protobuf配置的配置管理服务,业务逻辑不难,2天就搞定,但是后续bug不少,也踩了很多坑,在这里记录下。 首先,一直以为golang内的sql模块是单链接的,所以一开始在每个goroutine内都open了一个DB,并写了一个连接池进行管理。后续发现是多此一举,白白写了好多代码。golang的sql模块自带连接池功能,在执行sql语句的时候才会分配连接,执行完毕后归还给连接池,所以假设用golang的sql模块,一个程序一个DB就行了。 既然有连接池的支持,那么也要注意千万不要泄露连接池的连接。假设你采用Query来执行查询语句,那么会返回一个sql.Rows结构,这个结构会占用一个连接,只有在遍历完才会自动关闭,所以最好是获得了Rows后执行一次Rows的Clos...阅读全文

golang接口的实现以及注意事项。

package main import ( "fmt" ) type Animal interface { move() } type Human struct { i int } func (r Human) move() { // 注意 fmt.Println("人类行走") r.i++ } type Bird struct { i int } func (r *Bird) move() { fmt.Println("鸟类行走") r.i++ } func moveTest1(animal Animal) { animal.move() } // 虽然这个函数的定义没有错误,但实际上完全用不上! // 因为指向接口的指针,在接口实现类中,是无法转换的 func moveTest2(ani...阅读全文

博文 2015-06-17 20:04:00 eclipser1987

总结了才知道,原来channel有这么多用法!

这篇文章总结了channel的10种常用操作,以一个更高的视角看待channel,会给大家带来对channel更全面的认识。 在介绍10种操作前,先简要介绍下channel的使用场景、基本操作和注意事项。 channel的使用场景 把channel用在数据流动的地方: 消息传递、消息过滤 信号广播 事件订阅与广播 请求、响应转发 任务分发 结果汇总 并发控制 同步与异步 ... channel的基本操作和注意事项 channel存在3种状态: nil,未初始化的状态,只进行了声明,或者手动赋值为nil active,正常的channel,可读或者可写 closed,已关闭,千万不要误认为关闭channel后,channel的值是nil channel可进行3种操作: 读 写 关闭 把这3种操...阅读全文

【视频分享】尚硅谷韩顺平Go语言核心编程

go语言 尚硅谷菁英师资整合业界资源,历时一年,打磨出专注于区块链技术的GO语言视频教程。教程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。——尚硅谷官网 尚硅谷韩顺平Go语言核心编程 001_Golang可以做什么 002_如何学习Golang更高效(1) 003_如何学习Golang更高效(2) 004_程序的基本概念 005_Go语言发展简史 006_Go语言的特性和快速体验 007_Golang开发工具介绍 008_windows下VSCode的安装和使用(1) 009_windows下VSCode的安装和使用(2) 010_Linux下VSCode的安装和使用 011_Mac下VS...阅读全文

博文 2018-10-09 19:34:43 石扒皮java栈点

搭建golang的beego注意事项

大家都知道,在学golang的时候,大家都会去关注谢大的beego快速开发架构。 首先,小弟是win7 32bit系统,在这里,我要把我学习golang的过程和小心得记录起来。 相信想学的人一定会早早安装好了go,简单轻量便捷,没有的话可以到这里下载。 在你安装好GO 1.2的时候,你会慢慢发现windows环境下你要做的事太多了。 如果仅仅只看教程来的话,我想你可能也会像我遇到一些问题。后面会提到。 这时候你又需要一个Golang的IDE,虽然大家都说sublime text比较好用,不过我之前也没用过,对这个不了解。所以我选择官方推荐的LiteIDE x20.1。 只所以会去写这篇文章,是因为我折腾了好久,对这过程有了点过度的兴奋在里面。 在你安装完GO后,你会发现在CMD下是可以识别G...阅读全文

博文 2015-06-17 20:02:18 yanmei004

TODO:Golang指针使用注意事项

TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变;例子2是使用指针传递,会改变地址,从而改变地址。 在看例子3: 输出: map[a:aa b:bb] map[b:world a:hello] 发现什么了,TestMap前面没有加*,没有用指针,怎么也会改变值呢?因为map提供键值功能,用起来像指针引用的类型。类似这种功能的类型还有,数组切片,channel,interface。Go语言包这种指针引用类型,有兴趣可以去阅读一下源码,变量前面都有带“*”号,如果没有看看是否是map类型等。 值的拷贝,操作后不会影响到副本的值;而指针则会改变同一地址的所有变量名。例子4: 输出: tempByte...阅读全文

博文 2016-12-08 06:00:05 OneTODO

Golang unsafe包使用笔记

Golang unsafe包使用笔记 unsafe包简介 unsafe包提供了访问底层内存的方法。是用unsafe函数可以提高访问对象的速度。 应用场景 通常用于对大数组的遍历。 访问数组 package main import ( "fmt" "unsafe" ) func main() { array := []int{1, 2, 3} base := uintptr(unsafe.Pointer(&array[0])) size := unsafe.Sizeof(array[0]) ptr := unsafe.Pointer(base + 2*size) element := *(*int)(ptr) fmt.Println(element, array[2]) } 访问结构体 pac...阅读全文

博文 2017-06-15 13:04:07 tommwq

golang的sql.DB的一些注意事项及读写锁的总结

最近在写一个用于存储protobuf配置的配置管理服务,业务逻辑不难,2天就搞定,但是后续bug不少,也踩了很多坑,在这里记录下。 首先,一直以为golang内的sql模块是单链接的,所以一开始在每个goroutine内都open了一个DB,并写了一个连接池进行管理。后续发现是多此一举,白白写了好多代码。golang的sql模块自带连接池功能,在执行sql语句的时候才会分配连接,执行完毕后归还给连接池,所以假设用golang的sql模块,一个程序一个DB就行了。 既然有连接池的支持,那么也要注意千万不要泄露连接池的连接。假设你采用Query来执行查询语句,那么会返回一个sql.Rows结构,这个结构会占用一个连接,只有在遍历完才会自动关闭,所以最好是获得了Rows后执行一次Rows的Clos...阅读全文

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

安全地解析不受信任的文件格式Puffs

Puffs,全名为 Parsing Untrusted File Formats Safely ,是 Google 开源的一个用于特定领域的语言和库,可安全地解析不受信任的文件格式,包括图像、音频、视频、字体和压缩档案等。 与 C 语言不同,Puffs 对于缓冲区溢出、整数算术溢出和空指针解引用是非常安全的。Puff 和其他内存安全语言之间的主要区别在于,所有这些检查都是在编译时完成的,而不是在运行时完成的。 Puffs 旨在像 Go 或 Rust 一样生成安全的软件库,同时能像 C 一样快,可以在任何使用 C 库的地方使用。但需注意的是,Puffs 不是一种通用的编程语言,虽然在技术上可行,但似乎不值得去写一个专门的 Puffs 编译器出来...阅读全文

Go安装

安装 参考 GoLang-windows环境安装 注意事项 安装到C盘根目录下。——因为exe中直接检查C盘下是否有目标文件。 设置环境变量:a) 把C:\Go\Bin添加到PATH中;b) 新增GOROOT环境变量,值为C:\Go. 验证示例代码 hello.go: package main import "fmt" // implements formatted IO func main() { fmt.Printf("Hello, world!"); } 编译运行: - go build hello.go - hello 这两条命令也可以合并为:go run hello.go。 D:\>go version go version go1.4.2 windows/amd64 D:\>cd...阅读全文

博文 2016-09-03 18:00:06 u013344915

压测注意事项

压测其实并非上线之前才进行,而是在开发之初就开始准备了。一般情况下在开发之前设计之时就应该明白哪些接口会面临高并发压力,所以在开发时就要按照能够承受高并发的标准进行开发,比如尽量减少数据库操作、采用连接池、逻辑尽量简单等等。如果逻辑确实复杂,就要采用异步处理来解决。 压测的目的 搞懂为什么要压测,这样在压测的时候才不会事倍功半,毕竟压测一次的成本还是蛮高的。压测其实有两个目的,一是测试应用在高并发情况下是否会报错,进程是否会挂掉;二是测试应用的抗压能力,预估应用的承载能力,为运维同学提供扩容的依据。 第一点很好理解,做好这一点就可以保证上线之后不出问题了。解释下第二点,我们都知道就是架构设计的再优秀,代码写的再好,应对高并发单实例始终是有限的。所以通常是在满足第一点的前提下,再根据可能到来的...阅读全文

博文 2017-09-10 07:34:54 闫大伯

go语言环境搭建

本文章讲解如何在Ubuntu 14.04 下配置Go语言(GO语言版本为 1.5)的开发环境。 第一步:安装相关环境组件 请在终端输入以下指令: sudo apt-get install build-essential 第二步:上传相关GO语言安装包至服务端 可使用Xftp或者winscp上传。上传后后解压到相关位置,需注意解压的用户权限。 第三步:配置Go语言环境变量 首先,使用任何文本编辑器打开 home 目录下的 .bashrc 文件 如果你不确定到底在哪里,在终端直接输入以下指令也可以: vim ~/.bashrc 然后进入文本编辑界面,请在文件的最后追加大致如下图内容: export GOROOT=GO语言解压的文件夹目录 export PATH=${PATH}:GO语言解压的文件...阅读全文

博文 2018-03-24 15:32:33 xie1xiao1jun