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

go语言坑之for range

go只提供了一种循环方式,即for循环,在使用时可以像c那样使用,也可以通过for range方式遍历容器类型如数组、切片和映射。但是在使用for range时,如果使用不当,就会出现一些问题,导致程序运行行为不如预期。比如,下面的示例程序将遍历一个切片,并将切片的值当成映射的键和值存入,切片类型是一个int型,映射的类型是键为int型,值为*int,即值是一个地址。 package main import "fmt" func main() { slice := []int{0, 1, 2, 3} myMap := make(map[int]*int) for index, value := range slice { myMap[index] = &value } fmt.Println...阅读全文

博文 2017-04-13 07:18:17 songleo

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计算运行的时间

函数time.Since() 计算golang运行的时间是非常有用的性能衡量指标,特别是在并发基准测试中。下面将介绍如何简单地使用Go语言来计算程序运行的时间。 简单地使用Golang的time.Since()函数即可。下面有一个完整例子展示这个用法。 package main import ( "fmt" "time" ) func StartCac() { t1 := time.Now() // get current time //logic handlers for i := 0; i < 1000; i++ { fmt.Print("*") } elapsed := time.Since(t1) fmt.Println("App elapsed: ", elapsed) } fun...阅读全文

博文 2016-05-20 11:00:00 GreatElite

Mac安装和初步使用go语言

1、首先查看本地是否安装了go语言brew info go 有此 Not installed 表示没有安装2、安装go语言(1)brew安装brew install go(2)下载安装包https://golang.org/dl/ 3、配置go语言环境变量go语言安装好后,默认的安装路径是:/usr/local/go,可以进去看看各种安装文件打开 .bash_profile 文件,在最后输入export GOPATH=/usr/local/goexport GOBIN=$GOPATH/binexport PATH=$PATH:$GOBINsource .bash_profile 文件,使之生效4、查看go语言是否安装成功查看安装的go版本:go version 5、报错解决warning: ...阅读全文

博文 2020-05-18 17:35:42 薛延祥

golang的垃圾回收(GC)机制

请先阅读 golang的goroutine调度机制 然后再到这里 golang的垃圾回收采用的是 标记-清理(Mark-and-Sweep) 算法 就是先标记出需要回收的内存对象快,然后在清理掉; 在这里不介绍标记和清理的具体策略,只介绍 GC过程是怎么调度的以及stw相关 这个算法,会导致 stw (stop the world) 的问题,中断用户逻辑 触发GC机制 1. 在申请内存的时候,检查当前当前已分配的内存是否大于上次GC后的内存的2倍,若是则触发(主GC线程为当前M) 2. 监控线程发现上次GC的时间已经超过两分钟了,触发;将一个G任务放到全局G队列中去。(主GC线程为执行这个G任务的M) 每当触发的时候,在主GC线程中就会走如下的GC流程: 1. stop the world,...阅读全文

博文 2016-11-12 08:00:01 liangzhiyang

Go 环境变量相关操作

Go语言中os包提供了一些环境变量的操作封装。包括: 设置环境变量:Setenv 获取环境变量:Getenv 删除指定的环境变量:Unsetenv 获取所有环境变量:Environ 清除所有环境变量:Clearenv 请看示例代码: package main import "os" import "fmt" func main() { os.Clearenv() os.Setenv("FOO", "1") fmt.Println("FOO:", os.Getenv("FOO")) os.Unsetenv("FOO") fmt.Println("FOO:", os.Getenv("FOO")) os.Setenv("hello", "1") os.Setenv("world", "2") fm...阅读全文

博文 2015-06-02 03:00:16 baiyuxiong

Go Mvc的一个示例

下载 Go Mvc的一个示例,项目后台用户管理部分,包括用户的添加,修改,删除,分页,查询等操作。分享出来供大家参考。 data.sql 是表结构的创建SQL,运行前先创建数据表。DBConfig.xml是数据库连接字符串的设置,只所以独立出来一个文件,主要是方便程序里对文件进行修,力求简单,在程序运行前先设置Mysql连接信息。访问地址为:http://localhost:6080/Admin/AdminUser/Index 下...阅读全文

博文 2015-05-12 21:00:02 王岩0001

开放云平台应用开发库和工具集Go Cloud

Go Cloud Project 是 Google 推出的一项计划,允许开发者在任何云提供商上无缝部署云端应用。它通过为存储和数据库等常见用途提供稳定的通用接口来实现此目的。 Go Cloud 是一个可在开放云平台上进行开发的库和工具集,旨在让 Go 语言成为开发构建可移植云端应用程序的首选语言。它提供一组用于访问 Blob 存储、MySQL 数据库和运行时配置的开放式通用云 API ,以及具有内置日志记录、跟踪和运行状况检查的 HTTP 服务器。 Go Cloud 提供通用 API: 非结构化二进制(blob)存储 在运行时更改的变量(配置) 连接 MySQL 数据库 服务器启动和诊断:请求记录、跟踪和运行状况检...阅读全文

Go调用C/C++

cgo golang是类C的语言 支持调用C接口(不支持调用C++) Go调用C/C++的方式 : C : 直接调用C API C++ : 通过实现一层封装的C接口来调用C++接口 Go集成C/C++的方式 go的源代码中直接声明C代码 比较简单的应用情况 可以直接使用这种方法 C代码直接写在go代码的注释中 注释之后紧跟import "C" 通过C.xx来引用C的结构和函数 package main /* #include #include typedef struct { int id; }ctx; ctx *createCtx(int id) { ctx *obj = (ctx *)malloc(sizeof(ctx)); obj->id = ...阅读全文

博文 2018-11-17 12:34:39 sakura3zz

golang gorm中格式化时间的问题

本文原文地址:golang gorm中格式化时间的问题 欢迎到访我的博客。最近在开发项目时遇到了发现一个问题,gorm虽然可以自动帮你维护 created_at、updated_at、deleted_at这些关键时间字段。但是其原理与弊端需要了解一下。1.使用方法通过自定义一个localtime的结构,来控制时间的格式package utils import ( "time" //"strconv" "fmt" "database/sql/driver" "strconv" ) type LocalTime struct { time.Time } func (t LocalTime) MarshalJSON() ([]byte, error) { //格式化秒 seconds := t.U...阅读全文

博文 2019-07-09 16:17:45 yuanshuli11

golang socket服务器

一、main.go该代码从项目中分离出来,自行修改后再运行) package main import ( "flag" "fmt" "log" "os" "runtime" ) var ( Port = flag.String("i", ":12345", "IP port to listen on") logFileName = flag.String("log", "cServer.log", "Log file name") configFileName = flag.String("configfile", "config.ini", "General configuration file") ) var ( configFile = flag.String("configfile"...阅读全文

博文 2014-10-04 19:27:01 liaojie

go1.11的module机制和dep/govendor机制问题

module机制和dep/govendor机制是否冲突? 自从go团队推出module机制后,go团队和dep社区发生了一些冲突,有一篇有名的争论《关于Go Module的争吵》,读后给人一种错觉,似乎module机制和dep/govendor机制是不相容的。但是仔细分析二者的运行机制,其实两者并无冲突,反而是互补性质的。 module机制由环境变量GO111MODULE控制,它有三个值:off、on、auto,默认值是auto。在auto模式下,在$GOPATH/src路径下build时,默认使用vendor、GOPATH导入第三方包,而在GOPATH之外编译时,默认使用go.mod设置导入项目。我们知道vendor机制只有在GOPATH路径之下才起作用,到了GOPATH之外就没用了。所以...阅读全文

博文 2018-08-26 11:34:54 从火星来

Golang实现自动化部署工具

golang 实现自动化部署的实例 自动化部署有Jenkins为什么我还要写这篇文件,应为公司服务器太菜了,装上jenkins服务器炸了。所以想用golnag撸一了自动化部署工具 每次更新程序都scp太痛苦了 实践完成的自动化部署工具 https://github.com/dollarkill... 自动化部署的实现思路 看了这个图 大家应该发现这实践起来并不困难就是收到 请求 后去 调用 git pull 就行 下面是程序分析 # devops生成文件 请填写完成检查确认后 再 运行啊 (每次运行会重写sh模块) # 这devops系统配置 app: host: "0.0.0.0:8083" debug: true max_request: 1000 task_num: 10 # 要自动化...阅读全文

博文 2019-09-16 19:02:38 dollarkillerx

go 服务监控指标(metric)上报open-falcon

1. 概述 指标统计是实现APM(Application performance management)的基础,通常通过一些指标的统计以及上报,我们可以了解程序的运行状况,及时发现程序的问题,提前预估系统瓶颈.指标(metric)目前的实现有metrics,这是java的实现,可以直接引入程序作为库使用.go语言的实现见go-metrics.另外,这里只是将指标在内存中进行处理及计算,如果我们想要展示,需要将数据抛出来,这里可以抛到日志里,也可以抛到时序数据库,最简单的做法就是直接抛到监控系统进行绘图或者报警.因此本文后面将讲解各指标的含义以及如何将计算好的数据抛到监控open-falcon 2.指标统计方式 2.1 Meters 用于计算一段时间内的计量,通常用于计算接口调用频率,如QPS...阅读全文

博文 2018-04-28 09:34:37 沐风

Gin实践 番外 Golang交叉编译

Golang交叉编译 项目地址:https://github.com/EDDYCJY/go... (快上车,支持一波) 原文地址:https://segmentfault.com/a/11... 前言 在 连载九 讲解构建Scratch镜像时,我们编译可执行文件用了另外一个形式的命令,不知道你有没有疑问? $ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o go-gin-example . 说明 我们将讲解命令各个参数的作用,希望你在阅读时,将每一项串联起来,你会发现这就是交叉编译相关的小知识 也就是 Golang 令人心动的特性之一跨平台编译 一、CGO_ENABLED 作用: 用于标识(声明) cgo 工具是否可用 意...阅读全文

博文 2018-03-26 15:34:41 煎鱼

Golang 生成Mac OS X dylib调用问题

突然想试试用go写个dylib供Objective-c调用,确发现总是报无法找到库的错误,无奈只好试试百度跟谷歌,总算是找到一个关于类似的问题的(ps:那些说改选项的就是个坑,都没说到关键点)。 不甘心后面又找到种方法了,见:http://log.zyxar.com/blog/2012/03/10/install-name-on-os-x/ install_name_tool -id "@loader_path/libmyhttp.dylib" libmyhttp.dylib 使用上面的方法后就不会要再运行那段脚本了,分发出去貌似都行了 其它方法: 具体问题要参见http://blog.csdn.net/ani_di/article/details/7078743 这里引用其中一段: “简单...阅读全文

博文 2017-11-17 23:03:30 不在乎y

golang package整理(strconv)

//package strconv //与字符串相关的类型转换都是通过 strconv 包实现的 //任何类型 T 转换为字符串总是成功的 //将字符串转换为其它类型 tp 并不总是可能的,可能会在运行时抛出错误 parsing "…": invalid argument //获取程序运行的操作系统平台下 int 类型所占的位数 strconv.IntSize //**********数字类型转换到字符串**/ //返回数字 i 所表示的字符串类型的十进制数 strconv.Itoa(i int) string //将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 'b'、'e'、'f' 或 'g'),prec 表示精度,bitSi// ze 则使用 32 表示 fl...阅读全文

博文 2015-08-01 09:00:02 ivandong_qifan

[golang]用Go语言写的课表

package main import ( "fmt" "os" ) type tt struct { //定义数据结构 tt,用于存放每日的课程 One string //0 Two string //1 Three string //2 Four string //3 } type DAY struct { //定义数据结构 DAY ,用于存放一周的,英文简写 week string } func main() { //主函数 var weekday int //定义一个int 类型的值,weekday //fmt.Printf("Enter the weekday : ") //fmt.Scanf("%d",&weekday) weekday = getday() //从getday(...阅读全文

博文 2014-10-04 19:27:07 sndnvaps

深入拆解 Java 虚拟机

开篇词 | 为什么我们要学习Java虚拟机?01 | Java代码是怎么运行的?02 | Java的基本类型03 | Java虚拟机是如何加载Java类的?04 | JVM是如何执行方法调用的?(上)05 | JVM是如何执行方法调用的?(下)06 | JVM是如何处理异常的?【工具篇】 常用工具介绍07 | JVM是如何实现反射的?08 | JVM是怎么实现invokedynamic的?(上)09 | JVM是怎么实现invokedynamic的?(下)10 | Java对象的内存布局11 | 垃圾回收(上)12 | 垃圾回收(下)13 | Java内存模型14 | Java虚拟机是怎么实现synchronized的?15 | Java语法糖与Java编译器16 | 即时编译(上)17 |...阅读全文

博文 2018-11-15 16:53:04 Java_zhiyin

golang的helloworld

新建源码文件hello.go mkdir -p /work/goTest/ cd /work/goTest/ vim hello.go 编码hello.go文件: package main import "fmt" func main(){ fmt.Printf("hello world\n") } 直接运行: go run hello.go 运行会有点慢,因为golang要先把源码编译出来再运行。 那么现在,我们把源文件编译成二进制文件吧: cd /work/goTest go build -o hi.out 编译生成的文件有点大,我们可以加个优化参数: go build -ldflags "-s -w" -o hi.out 运行二进制文件试试。 完...阅读全文

博文 2016-08-11 12:00:00 liyou-blog

golang的 GOPATH和vendor的搜索关系

golang的 GOPATH和vendor的搜索关系 基本规则 所有的go文件都是必须组织成包的形式,放在相应文件夹下: 1.1 建议包名和文件夹名字相同;虽然也可以不同,但会引发使用误解。 1.2 对于主程序包,也需要放在文件夹下面,注意: 1.2.1 不建议使用main作为文件夹名,虽然这个包名是main。 1.2.2 也不建议使用src作为文件名,尽管这是允许的,但是会引发误解。 1.2.3 建议使用项目名字作为包名。 go build命令如果不带参数,就是build当前包,当前目录所在的包,即当前目录下面的所有go文件。 1.2 如果go build指定了目标包,那么就会从GOPATH路径下面搜索包,如果找不到,就报失败;哪怕当前路径就在目标包里,但是GOPATH没有包含,也会报失败...阅读全文

博文 2018-10-13 12:34:39 CodingCode

家庭/企业网络的透明代理软件 kone

kone是一款把路由请求转发到http/sock5 proxy的软件(route2proxy),你可以把它应用到很多需要路由的场合,它同时实现了dns欺骗功能,并隐藏其中的代理服务器细节,实现透明穿越。特点如下: (1)实现了灵活的匹配模式 (2)实现了dns欺骗功能可以透明穿越 (3)实现了WEB status接口,方便查看运行状...阅读全文

Go学习笔记——go routine

Go routine indeed 本短结论引用自:goroutine背后的系统知识,让我了解为什么goroutine这么轻量级,以及其优势劣势。 Go语言通过goroutine提供了目前为止所有(我所了解的)语言里对于并发编程的最清晰最直接的支持,Go语言的文档里对其特性也描述的非常全面甚至超过了,在这里,基于我们上面的系统知识介绍,列举一下goroutine的特性,算是小结: (1) goroutine是Go语言运行库的功能,不是操作系统提供的功能,goroutine不是用线程实现的。具体可参见Go语言源码里的pkg/runtime/proc.c (2) goroutine就是一段代码,一个函数入口,以及在堆上为其分配的一个堆栈。所以它非常廉价,我们可以很轻松的创建上万个goroutin...阅读全文

博文 2015-06-17 23:08:16 qjpcpu

一个 golang 应用监控的 package,包括系统信息和业务信息监控

golang 编写的程序,在程序开发完成之后,我们更想做的是对程序运行的状态能够时刻了解,或者在业务上跑着的程序出现了 bug 我们想要更加快速方便的知道问题出在哪里?监控包括程序运行的 cpu ,内存等系统状态,还有我们可以根据自己的需要自定义需要的监控数据。例如某一个任务队列,某一个函数的执行情况,错误出在哪里等等 https://github.com/wgliang/goappmonito...阅读全文

golang 扫雷

1.//实现前导零出错:sn:="7DC3"+fmt.printf("%05d", uint16(rawdata[2])&0xFF+uint16(rawdata[1])) &:[fmt.Printf返回的是一个int和一个error,不能与string用+号一起操作] sn := fmt.Sprintf("%s%05d", "7DC3", uint16(rawdata[2])&0xFF+uint16(rawdata[1]))或fmt.Sprintf("7DC3%05d",uint16(rawdata[2])&0xFF+uint16(rawdata[1])) 2.//fmt.Sprint不能输出 &:根据fmt包API描述,fmt.Sprint是返回字符串,与fmt.Print的标准输出不同....阅读全文

博文 2014-10-04 19:26:45 陈好

iNote单页博客发布

> iNote是在[beego(golang语言)](http://beego.me/ "beego")&[bootstrap](http://getbootstrap.com/ "bootstrap")等开源项目基础之上开发的 ## 功能简介 - 前后端完全分离 - 响应式布局 - 内嵌[markdown](https://pandao.github.io/editor.md/ "markdown")编辑器 - URL支持hash(#)+id 文章导航 - 支持更换首页banner大图背景 - 文章功能 - 文章内容照片墙预览 - 文章标签功能 - 文章留言功能 - 留言回复功能 - Web后台管理 ## Linux环境编译安装(OSX,Win环境类似...阅读全文

自己写的简单解数独的web程序

[https://github.com/gs272/Shudu][1] [1]: https://github.com/gs272/Shudu 上面是项目地址,有点乱,但主要是想大家帮我分析下关于net/http和html/template包的使用。 还想问下get和post的区别,go怎么实现想asp那样实现网页上的程序运行,并不是每次操作都要类似重新载入页面那样,是不是跟get和post有关系啊? 比如像flash网页应用那样,我的操作只限于flash内部,对页面没有影响。 这点希望大神帮我解释下...阅读全文

为什么这段代码运行后进程会死掉?

package main import "fmt" const ( WHITE = iota BLACK BLUE RED YELLOW ) type Color byte func (c Color) String() string { fmt.Println(c) return "Ok" } func main() { var c Color c = WHITE c.String() } 上面的代码运行会死掉. 如果把method的String改成其它名字,例如Stringt则可以正常执行,或者去掉返回值,或者返回值类型改为其他类型就可以正常执行. 求指教...阅读全文

Go语言 goroutine一些常用技巧

1. 操作系统与运行库 “运行库”这个词其实不止包括用于和编译后的目标执行程序进行链接的库文件,也包括了脚本语言或字节码解释型语言的运行环境,譬如Python,C#的CLR,Java的JRE。 对系统调用的封装只是运行库的很小一部分功能,运行库通常还提供了诸如字符串处理、数学计算、常用数据结构容器等等不需要操作系统支持的功能,同时,运行库也会对操作系统支持的功能提供更易用更高级的封装,譬如带缓存和格式的IO、线程池。 1. 支持新的语义或语法,从而便于我们描述和解决问题。譬如Java的泛型、Annotation、lambda表达式。 2. 提供了新的工具或类库,减少了我们开发的代码量。譬如Python 2.7的argparse 3. 对系统调用有了更良好更全面的封装,使我们可以做到以前在这个...阅读全文

博文 2014-10-11 18:00:01 abv123456789

bytes.Join的用法

```go package main import ( "bytes" "fmt" ) func main() { hello := "hello" helloBytes := []byte( hello ) fmt.Println( helloBytes ) world := "world" worldBytes := []byte( world ) fmt.Println( worldBytes ) helloWord := [][]byte{ helloBytes,worldBytes } fmt.Println( helloWord ) helloWords := bytes.Join(helloWord,[]byte{}) fmt.Println( helloWords ) } `...阅读全文

博文 2018-09-15 09:07:13 JimPang

云监控服务使用教程详解

课程介绍 云监控(CloudMonitor) 是一项针对阿里云资源和互联网应用进行监控的服务。云监控服务可用于收集获取阿里云资源的监控指标,探测互联网服务可用性,以及针对指标设置警报。云监控服务能够监控云服务器 ECS、云数据库 RDS 和负载均衡等各种阿里云服务资源,同时也能够通过 HTTP,ICMP 等通用网络协议监控互联网应用的可用性。 借助云监控服务,您可以全面了解您在阿里云上的资源使用情况、性能和运行状况。借助报警服务,您可以及时做出反应,保证应用程序顺畅运行 产品详情:https://www.aliyun.com/product/jiankong 课时列表 • 课时1:云监控-主机监控功能介绍 • 课时2:云监控-创建应用分组 • 课时3...阅读全文

对比C, java, go 递归计算fibonacci(40) 的性能

// fibonacci.c #include int main() { printf("%d", fibonacci(40)); } int fibonacci(int n) { if (n < 2) { return 1; } return fibonacci(n - 2) + fibonacci(n - 1); } 编译: CFLAGS="-march=corei7-avx -O2 -pipe" && gcc fibonacci.c 运行:time ./a.out 结果:165580141 real 0m0.977s user 0m0.975s sys 0m0.002s // Fibonacci.java public class Fibonacci { publi...阅读全文

博文 2014-10-04 19:26:30 ZhouJunhua

go在windows下连接oracle数据库

一、系统环境 1. win7 64位 2. go 1.8 3. oracle SDK版本 12.1 4. mingw64位 5. go-oci8 二、安装步骤 1. 安装go1.8,参照网上的教程 2. 下载oracle 的sdk和运行库 3. 安装mingw64和pkg-config.exe,将pkg-config拷贝到mingw64的bin目录,pkg-config是编译go-oci8的时候需要用到的。 三、配置 1. 修改oci8.pc文件,存入mingw64的lib/pkgconfig目录 2. 修改PKG_CONFIG_PATH为E:\mingw-w64\mingw-w64\x86_64-4.9.2-posix-seh-rt_v3-r...阅读全文