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

一个有关Golang变量作用域的坑

自:http://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/ 临近下班前编写和调试一段Golang代码,但运行结果始终与期望不符,怪异的很,下班前依旧无果。代码Demo如下: //testpointer.go package main import ( "fmt" ) var p *int func foo() (*int, error) { var i int = 5 return &i, nil } func bar() { //use p fmt.Println(*p) } func main() { p, err := foo() if err != nil { fmt.Println(err) retu...阅读全文

博文 2015-06-02 04:00:05 sevenyuan

golang strconv Atoi Itoa 例子

http://www.dotcoo.com/golang-strconv-atoi-itoa golang strconv atoi itoa 在做任何项目的时候都要用到字符串和数字,相互转换是最近基本的操作,哈哈 这里就介绍golang怎么做这些事情 参考代码如下: package main import ( "strconv" ) func main() { i, err := strconv.Atoi("12345") if err != nil { panic(err) } i += 3 println(i) s := strconv.Itoa(12345) s += "3" println(s) ...阅读全文

博文 2014-10-05 20:58:32 DarkWingBoy

“B站源码泄露”事件后,go语言成了焦点

一、B 站后端源码被恶意“开源” 几 小时1、B站源码泄露事件始末今日,网上传出消息,bilibili整个网站后台工程源码泄露,这是国内规模较大的互联网企业中首例整个网站后台工程源码泄露。而且B站网站不仅仅是泄露工程源码这么简单,有很大一部分用户的用户名密码被硬编码在代码里面,也泄露出去了,对用户来说影响很大。 作为国内go语言的大厂,哔哩哔哩代码被上传到了github,平台上确实存在由一个名叫「openbilibili」的用户创建的「go-common」代码库,项目描述为「哔哩哔哩 bilibili 网站后台工程 源码」,这个账号于22号当天注册。截至北京时间17:04,该项目已获得6597个标星。fork数量已经突破6000(这个操作会将被Fork的代码仓库中所有的信息,包括源代码、原仓...阅读全文

博文 2019-04-23 18:34:43 qfliweimin

Go语言之nil详解

Go语言中的nil远比java中的null要难以理解和掌握。 1.普通的 struct(非指针类型)的对象不能赋值为 nil,也不能和 nil 进行判等(==),即如下代码,不能判断 *s == nil(编译错误),也不能写:var s Student = nil。 s := new(Student) //使用new创建一个 *Student 类型对象 fmt.Println("s == nil", s == nil) //false //fmt.Println(*s == nil) //编译错误:cannot convert nil to type Student fmt.Printf("%T\n", s) //*test.Student fmt.Printf("%T\n", *s) //...阅读全文

博文 2015-06-17 23:00:49 books1958

go语言int类型转化成string类型的方式

go语言中int类型和string类型都是属于基本数据类型 两种类型的转化都非常简单 下面为大家提供两种int类型转化成string类型的方法! go语言的类型转化都在strconv package里面,详情请参考: http://golang.org/pkg/strconv 下面附上转化代码: package main import ( "fmt" "strconv" ) var i int = 10 func main() { // 通过Itoa方法转换 str1 := strconv.Itoa(i) // 通过Sprintf方法转换 str2 := fmt.Sprintf("%d", i) // 打印str1 fmt.Println(str1) // 打印str2 fmt.Printl...阅读全文

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

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

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 Http Request

一起看一下golang的HTTP包怎么write Request信息 先看一下看golang http Request的struct,不解释,慢慢看(HTTP权威指南,RFC文档) type Request struct { // Method specifies the HTTP method (GET, POST, PUT, etc.). // For client requests an empty string means GET. Method string // URL specifies either the URI being requested (for server // requests) or the URL to access (for client request...阅读全文

博文 2015-11-16 13:00:01 golang_yh

在Visual Studio Code中配置GO开发环境

一、GO语言安装 详情查看:GO语言下载、安装、配置 二、GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/microsoft/vscode-go 这款插件的特性包括: 代码着彩色 代码自动完成(使用gocode) 代码片段 快速提示信息(使用godef) 跳转到定义(使用godef) 搜索参考引用(使用go-find-references) 文件大纲(使用go-outline) 重命名(使用gorename) 保存构建(使用go build和go test) 代码格式化(使用goreturns或goimports或gofmt) 调试代码(使用delve) 三、插件安装 3.1 Visual...阅读全文

Go安装的设置问题:GOROOT,GOPATH

Go安装的设置问题:GOROOT,GOPATH Posted on 2013-03-24 21:03 蝈蝈俊 阅读(10984) 评论(0) 编辑 收藏 Mac下使用Google官方的Go语言安装包:https://code.google.com/p/go/downloads/list 安装的Go,会自动把 /usr/local/go/bin 目录加入PATH中。这样我们直接在控制台就可以执行go语言的一些命令。 http://golang.org/cmd/go/#hdr-GOPATH_environment_variable http://www.cnblogs.com/ghj1976/archive/2013/01/16/2863142.html 下面使用 export 命令看到当前的系...阅读全文

博文 2015-12-04 03:00:02 diegodu

Golang交叉编译各个平台的二进制文件

熟悉golang的人都知道,golang交叉编译很简单的,只要设置几个环境变量就可以了 # mac上编译linux和windows二进制 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build # linux上编译mac和windows二进制 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build # windows上编译mac和linux二进制 SET CGO_ENABLED=0 SET GOOS=darwin SET ...阅读全文

博文 2018-08-23 10:34:57 路过麦田

Go实例学:break 和 continue

利用break 可以提前退出循环,break 终止当前的循环;也可以定义标签,break指定的循环体。 break的用法示例1: package main import ( "fmt" ) func main() { for i := 0; i < 10; i++ { if i > 5 { break //终止这个循环,只打印0到5 } fmt.Println(i) } } 输出结果 0 1 2 3 4 5 break的用法示例2: 循环嵌套循环时,可以在break 后指定标签。用标签决定哪个循环被终止 package main import ( "fmt" ) func main() { J: for j := 0; j < 5; j++ { for i := 0; i < 10; i++...阅读全文

博文 2014-12-01 08:00:02 Goopand

go runtime.Gosched()的作用分析

untime.Gosched()用于让出CPU时间片。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。 看代码: package main import ( "fmt" "runtime" ) func say(s string) { for i := 0; i < 2; i++ { runtime.Gosched() fmt.Println(s) } } func main() { go say("world") say("hello") } 输出结果: hello world hello 注意结果: 1、先输出了hello,后输出了world. 2、hello输出了2个,world输出了1个(因为第2个hello输出完,主线程就...阅读全文

博文 2015-05-07 10:48:20 baiyuxiong

Go 系列教程 —— 17. 方法

欢迎来到 [Golang 系列教程](/subject/2) 的第 17 个教程。 ### 什么是方法? 方法其实就是一个函数,在 `func` 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。 下面就是创建一个方法的语法。 ```go func (t Type) methodName(parameter list) { } ``` 上面的代码片段创建了一个接收器类型为 `Type` 的方法 `methodName`。 ### 方法示例 让我们来编写一个简单的小程序,它会在结构体类型上创建一个方法并调用它。 ```go package main import ( "fmt" ) type Employee struc...阅读全文

博文 2018-01-22 18:00:02 polaris

Go error--cannot find package

请认真对待你遇到的每一个难题,请用心去思考并找到解决的办法。 在安装每种语言的开发环境时,你总会遇到各种各样的问题,令人搔头挠耳。这不是,当我 用Go语言开发项目,用go build main.go命令进行编译工程时,遇到了一个烦人的问题:cannot find package “github.com/astaxie/beego” in any of:。 描述: 从公司SVN下载Go项目代码,开发环境已经按照要求配置好了。可就当使用“go build main.go”命令时,出现了“cannot find package “github.com/astaxie/beego” in any of:”的错误: 解决方法: 后来仔细看了一下error info,发现GOPATH和我设置的GOPAT...阅读全文

博文 2016-04-08 01:00:12 oceanlucy

Go 1.5 发布,完全移除 C,使用 Go 编译 Go

Go 1.5 正式发布,这是 Go 的第六个重要版本。 此版本包括大量重大改进,编译工具链从[ C 转换到 Go](https://golang.org/doc/go1.5#c),从 Go 代码库中完全移除 C 代码。[完完全全重新设计了](https://golang.org/doc/go1.5#gc)垃圾收集器,减少垃圾收集器的停顿时间。改进 scheduler,允许修改默认 [GOMAXPROCS](https://golang.org/pkg/runtime/#GOMAXPROCS) 值(并发执行 goroutines 数量),可以从 1 修改到逻辑 CPUs 的数量。改进 linker,允许分布式 Go 包作为分享库链接到 Go 程序,可以构建 Go 包到归档或者分享库,可以...阅读全文

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

golang hmac的sha1加密例子

想要用go写btcchina平台的接口,api加密形式在php中是hash_hmac('sha1',$string,$key); go中的一样有hmac包,下面是代码 package main import ( "crypto/hmac" "crypto/sha1" "fmt" "io" ) func main() { //sha1 h := sha1.New() io.WriteString(h, "aaaaaa") fmt.Printf("%x\n", h.Sum(nil)) //hmac ,use sha1 key := []byte("123456") mac := hmac.New(sha1.New, key) mac.Write([]byte("aaaaaa")) fmt.Pri...阅读全文

博文 2015-03-24 10:27:13 舞林

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实现unicode码和中文之间的转换

将中文转换为unicode码,使用golang中的strconv包中的QuoteToASCII直接进行转换,将unicode码转换为中文就比较麻烦一点,先对unicode编码按\u进行分割,然后使用strconv.ParseInt,将16进制数字转换Int64,在使用fmt.Sprintf将数字转换为字符,最后将其连接在一起,这样就变成了中文字符串了。 参考代码如下: 1 package main 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 ) 8 9 func main() { 10 sText := "中文" 11 textQuoted := strconv.QuoteToASCII(sText) 12 textUnquoted := t...阅读全文

博文 2016-06-29 02:00:01 borey

Golang中用interface{}接收任何参数与强转

函数的传值中,interface{}是可以传任意参数的,就像java的object那样。 下面上我第一次想当然写的 ** 错误 **代码 package main func main() { Any(2) Any("666") } func Any(v interface{}) { v1:=int(v) println(v1) } 我只是想它能通过编译而已,因为上面的错误代码并没有任何的语法错误,心里只有666想说,下面是编译的错误提示: cannot convert v (type interface {}) to type int: need type assertion 正确的代码就可以保证程序不出什么差错。 package main func main() { Any(2) Any(...阅读全文

博文 2017-09-16 13:04:54 送你一碗大麦茶

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

如何为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最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱, 虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的. 这篇文章将通过分析golang的源代码来讲解协程的实现原理. 这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版本和gccgo等其他实现, 运行环境是Ubuntu 16.04 LTS 64bit. 核心概念 要理解协程的实现, 首先需要了解go中的三个非常重要的概念, 它们分别是G, M和P, 没有看过golang源代码的可能会对它们感到陌生, 这三项是协程最主要的组成部分, 它们在golang的源代码中无处不在. G (goroutine) G是...阅读全文

博文 2017-11-11 02:40:56 zkweb

无法安装 golang.org/x/tools/的库

安装godep 官方的安装文档是使用go get github.com/tools/godep,很可惜,因为“网络”问题会报一个找不到golang.org/x/tools/go/vcs的错误。 而https://github.com/golang/tools 是 golang.org/x/tools的一个镜像,代码是一样的,所以我是如下安装的。 go get github.com/golang/tools 在GOPATH\src\github.com目录下就有tools文件夹。 在src下和github.com平级新建golang.org文件下,在此文件夹下建x文件夹,然后将tools都复制进去。 然后再执行go get github.com/tools/godep。 此时godep安装在你...阅读全文

博文 2016-05-20 02:00:01 diegodu

golang zip 压缩,解压(含目录文件)

每天学习一点go src。 今天学习了zip包的简单使用,实现了含目录的压缩与解压。 写了两个方法,实现了压缩、解压。 package ziptest import ( "archive/zip" "io" "os" "strings" ) //压缩文件 //files 文件数组,可以是不同dir下的文件或者文件夹 //dest 压缩文件存放地址 func Compress(files []*os.File, dest string) error { d, _ := os.Create(dest) defer d.Close() w := zip.NewWriter(d) defer w.Close() for _, file := range files { err := compress...阅读全文

博文 2016-07-06 00:00:00 xiaofengshuyu

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

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

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

Go语言 获取get、post参数

在贴代码之前如果能先理解一下golang http.request的三个属性Form、PostForm、MultipartForm应该能较好的理解代码,下面摘录一下。 以上简要翻译一下: Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法。 PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法。 MultipartForm:存储了包含了文件上传的表单的post参数,在使用前需要调用ParseMultipartForm方法。 一、获取GET参数 query := req.URL.Query() get_act := query["act"][0] fmt.Println(get_act) 二、获取POST参数 2.1 获取单...阅读全文

博文 2016-02-01 17:00:01 project

golang string转换数组

在golang中, 有数组和切片两种类型. 切片是引用类型,而数组是值类型. 如果想在函数中传入数组的指针参数, 则必须指定数组的数量, 如 func stringToRuneArr(s string, arr *[5]rune) 如果去掉 arr *[5]rune 中的5, 则指参数变成了切片类型, 数组的指针就传不进去了, 编译会报错, 那么难道一定要写死数组的长度吗? 这样也太不优雅. 经过一番搜索, 发现其实方法很简单, 就是把函数的参数改为切片, 然后传数组的切片进去. 因为切片是引用类型, 实际在函数中的修改是对应的原来的数组, 这样就达到了修改数组的目的, 只要修改不超出数组的长度,就没有问题. 代码例子如下: func StringToRuneArr(s string, ar...阅读全文

博文 2018-07-25 11:30:02 elonlee

国内有哪些知名公司在使用Golang语言?

统计在使用Golang的公司 和 使用效果 如果你的公司正在使用golang 欢迎回复告诉情况,和大家分享~~ 已知的如下: 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10%,内存占用20GB (res) 目前接入的产品约1280万在线用户 2分钟一次GC,停顿2秒 (1.0.3 的 GC 不给力,直接升级到 tip,再次吃螃蟹) 15亿个心跳包/天,占大多数。 京东云消息推送系统 (团队人数:4) 单机并发tcp连接数峰值118w 内存占用23G(Res) Load 0.7左右 心跳包 4k/s gc时间2-3.x s 产品名: 美团后台...阅读全文

博文 2014-10-21 18:00:01 codemanship

对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

GoBelieve-国内唯一开源IM服务

1. 一小时接入 专注IM,无冗余功能 几行代码,一小时接入 省时省力。2. 自由定制 提供最新源码, 自行二次开发,业务协议 交互视觉均可根据业务需求 自由定制。3. 完全开源 国内唯一开源IM服务,所有源码在Github开放,与线上版本一致4. 私有云部署 彻底排除窃取隐私可能,支持自有域名部署可搭建私有云,无需更新客户端,即可热切换到私有服务,来去自由。5. 官网地址 http://developer.gobelieve.io...阅读全文

博文 2015-06-17 16:00:02 GoBelieve

protobuf与protoc-gen-go

## 什么是protobuf Protobuf(Protocol Buffer)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。(参考[链接](https://baike.baidu.com/item/protocol%20buffer/1664400?fr=aladdin)) ## 什么是protoc protoc是prot...阅读全文

博文 2018-03-25 00:30:32 chalvern

golang判断短chan channel是否关闭

golang判断短chan channel是否关闭 群里有朋友问,怎么判断chan是否关闭,因为close的channel不会阻塞,并返回类型的nil值,会导致死循环.在这里写个例子记录一下,并且分享给大家 如果不判断chan是否关闭 Notice: 以下代码会产生死循环 package main import ( "fmt" ) func main() { c := make(chan int, 10) c <- 1 c <- 2 c <- 3 close(c) for { fmt.Println(<-c) } } 判断短chan是否关闭 package main import ( "fmt" ) func main() { c := make(chan int, 10) c <- 1 c...阅读全文

博文 2015-08-13 09:00:01 moxiaopeng

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

GO语言学习: 项目构建 及编译 初步

一个GO工程中主要包含以下三个目录: src:源代码文件 pkg:包文件 bin:相关bin文件 step1: 建立工程文件夹 goproject step2: 在工程文件夹中建立src,pkg,bin文件夹 step3: 在GOPATH中添加projiect路径 例 e:/goproject step4: 如工程中有自己的包examplepackage,那在src文件夹下建立以包名命名的文件夹 例 examplepackage step5;在src文件架下编写主程序代码代码 goproject.go step6;在examplepackage文件夹中编写 examplepackage.go 和 包测试文件 examplepackage_test.go step7; 编译调试包 go bui...阅读全文

博文 2015-06-04 18:00:00 phlong999

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语言"

驳狗屎文 “我为什么放弃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

Go语言TCP网络编程(详细)

一、序言 Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,socket在各大主流OS平台上都得到了很好的支持。关于tcp programming,最好的资料莫过于W. Richard Stevens 的网络编程圣经《UNIX网络 编程 卷1:套接字联网API》 ...阅读全文

博文 2017-01-08 15:00:06 hacker00011000

GO中的“泛型”?

Golang不支持一般的类似Java中的标记式泛型。很多人因此而十分不满,认为没有泛型增加了很多工作量。而目前由于泛型支持的复杂性,Golang的设计和实现者并没有把这个泛型支持作为紧急需要增加的特性。但是,如果真的没有泛型,就一定不行了么?答案当然是否定的。没有泛型也可以,而且我觉得代码更简单,直接,有趣(个人观点,勿喷)。 我们这里打算以一些例子来讲解Golang中如何处理这个问题。 首先,我们看一个冒泡排序的问题。针对整型数组切片的排序。 package main import ( "fmt" ) func bubbleSort(array []int) { for i := 0; i < len(array); i++ { for j := 0; j < len(array)-i-1...阅读全文

博文 2017-01-11 08:00:00 vaptu

在 VS Code 中使用 gopls

简介 我一直是用 VS Code 作为 Go 语言的 IDE,使用的是官方的 Go 扩展,但在使用过程中发现有时候代码提示不够智能, 或者说基本没有提示. Go 扩展默认是使用大量的 Go 工具来提供各种功能的,每个工具提供某个方面的能力, 比如代码提示是依靠 gocode 的. 不过微软在开发 VS Code 过程中, 定义一种协议, 语言服务器协议,Language Server Protocol. 这可是个好东西, 如果你需要开发编辑器或 IDE,就不需要再为每种语言实现诸如自动完成, 代码提示等功能了,直接利用 语言服务器协议 就行了. gopls 就是官方的语言服务器, 当前处于 alpha 状态. 安装并设置 gopls 安装方式一 打开 VS Code 的设置, 搜索 go.u...阅读全文

博文 2019-09-03 20:02:42 帅气猫咪

go mod使用

最近由于换工作,开始交接工作。整理以前的工作内容,由于组内就我一个在做go和大数据。 所以开发没有规划,当时是怎么快怎么来。go也是使用最传统的go path的方式管理的。都是手动管理依赖的。现在交接给他人,需要多人开发,发现很多问题。比如版本问题,各种依赖的问题等等。 由于工作原因,几乎所有主流语言都写过。所以,对应语言包管理工具也都了解和使用过。我前面有写过maven的使用。 maven是使用过的功能最强大的包管理工具了,maven定位是项目管理工具。pip和npm都是及格的产品。 我个人觉得,一个包管理工具应该有以下功能: 基本功能 依赖管理 依赖包版本控制 对应的包管理平台 可以私有化部署 加分: 代码包是否可以复用 构建,测试,打包 发布上线 对比上面几点: 目前做的最好的也就 m...阅读全文

博文 2020-05-17 11:32:47 若与

使用Golang开发微信公众平台-接入验证

使用Golang开发微信公众平台-接入验证 十二 18 bigwhite技术志 Amazon, DigitalOcean, EC2, Go, Golang, http, linode, PHP, Wechat, 亚马逊, 公众平台, 微信, 测试号, 移动互联网, 订阅号 2 Comments 今年我涉猎的领域有些“广泛”,并且有那么一点“跳跃”:从上半年的终端(游戏)开发到下半年golang、docker以及目前将要提及的微信公众平台 接口开发,似乎有些远离了老本行C以及技术管理的内容。但在这个转型以及创新驱动的时代,这显然是顺势而为。寻求与新兴领域的主动接轨,在实打实的实践 中,扩大了自己的视野,并可以进一步甄别发现适合自己的领域。 移动互联网时代,微信平台一枝独秀,是社交领域的巨人,但...阅读全文

博文 2015-01-20 09:22:59 bigwhite

golang 字符串常用操作(go练习代码)

练习golang string常用操作,备份 类型转换 比较对比 搜索 查找 统计 替换 删除过滤 大小写转换 前缀后缀 字符串分割 拼接 3中拼接字符串方式对比 func main() { fmt.Println("字符串测试") fmt.Println("字符串转化") //获取程序运行的操作系统平台下 int 类型所占的位数,如:strconv.IntSize。 //strconv.IntSize fmt.Println("将字符串转换为 int 型。") var trastr01 string = "100" traint01, err_tra := strconv.Atoi(trastr01) if err_tra != nil { fmt.Println(err_tra) } e...阅读全文

博文 2017-10-17 05:04:48 正为疯狂

Go调优神器trace介绍

你想知道你的Go程序在做什么吗? go tool trace可以向你揭示:Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时(如延迟,并行化和竞争异常)最有用的工具之一。 在我之前的博客文章中,我提到我们在Pusher中使用go tool trace来跟踪为何Go垃圾收集器有很长的停顿时间。 在这篇博文中,我更加深入的介绍go toll trace。go tool trace 试用go tool trace可以显示大量的信息,所以从哪里开始是个问题。 我们首先简要介绍使用界面,然后我们将介绍如何查找具体问题。go tool traceUI是一个Web应用程序。 下面我已经嵌入了一个这个web程序的实例! 此示例是可视化并行快速排序实现的追踪信息:请尝试这个例子!有...阅读全文

博文 2017-04-12 09:06:09 方圆

Thrift RPC 使用指南实战(附golang&PHP代码)

Thrift RPC 框架指南 认识Thrift框架 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。 thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 类似Thrift的工具,还有Av...阅读全文

博文 2015-05-18 12:00:33 grassroots2011

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 base64加密与解密

base64的加密分为标准加密与URL的加密,这里简单介绍一下标准加密与解密。 先贴上代码吧 import "encoding/base64" var str = "ZHONGGUOnihao123" strbytes := []byte(str) encoded := base64.StdEncoding.EncodeToString(strbytes) decoded, err := base64.StdEncoding.DecodeString(encoded) decodestr := string(decoded) fmt.Println(decodestr, err) StdEncoding这个代表是的标准加密,如果使用的是URLEncoding,则是URL加密。 在加密时需要把...阅读全文

博文 2016-04-27 04:00:01 niechaoya

Golang中解决"import cycle not allowed"的2种方法

相信不少 `Gopher` 在写 `Golang` 程序都遇到过 `import cycle not allowed` 问题,本人最近研读 [go-ethereum](https://github.com/ethereum/go-ethereum) 源码时,发现定义 `interface` 也能解决此问题, 还能解决连分包都不能解决的情况, 并且比分包更加简单快捷。下面逐个讲解 `分包` 和 `定义接口` 这两种方法。 # 1. 应用场景 假设有如下使用场景: 1. `A` 是应用程序的框架级结构体,在 `A` 包含子模块 `B` 和 `C` 的指针; 2. `B` 为了方便的使用应用的其他子模块(比如 `C` )功能,所以在其结构体包含了 `A` 的指针; 3. `C` 要调用 `A` 包...阅读全文

博文 2018-08-12 23:18:02 ggq89

golang之路-api杂记-格式化float输出

golang之路-格式化float输出 代码: a:=strconv.FormatFloat(10.100,'f',-1,32) 输出: 10.1 a := strconv.FormatFloat(10.101, 'f', -1, 64) 输出: 10.101 a := strconv.FormatFloat(10.010, 'f', -1, 64) 输出:10.01 a:=strconv.FormatFloat(10.1,'f',2,64) 输出:10.10 f 参数可以是e,E,g,G-1 代表输出的精度小数点后的位数,如果是<0的值,则返回最少的位数来表示该数,如果是大于0的则返回对应位数的值64 为float的类型,go中float分为32和64位,因此就需要传入32或者6...阅读全文

博文 2014-12-31 01:00:04 stephen830