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

golang的slice作为函数参数传值的坑

直接贴代码 func sliceModify(slice []int) { // slice[0] = 88 slice = append(slice, 6) } func main() { slice := []int{1, 2, 3, 4, 5} sliceModify(slice) fmt.Println(slice) } 返回的没变,坑爹的,这个设计太那啥了,可以正确跑出效果的版本如下: func sliceModify(slice *[]int) { *slice = append(*slice, 6) } func main() { slice := []int{1, 2, 3, 4, 5} sliceModify(&slice) fmt.Println(slice) ...阅读全文

博文 2014-10-04 19:26:12 ziyouchutuwenwu

GoLang中flag标签使用

正如其他语言一样,在 linux 系统上通过传入不同的参数来使得代码执行不同逻辑实现不同功能,这样的优点就是执行想要的既定逻辑而不需要修改代码重新编译与打包。在 Golang 语言中也为我们提供了相应的功能,直接上代码,在代码中会做详细的解释,当前运行环境为:Go-1.8.1 package main import ( "flag" "log" "os" ) func usage() { log.Fatalf("Usage: myProgram [-s server] [-t isShowTimeStamps] \n") } func printMsg(message string) { log.Printf("Received message is : %s \n", ...阅读全文

博文 2017-09-23 03:30:01 grimm

Go语言 字符串

在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要。 Go中的字符串和C#中的一样(java也是),字符串内容在初始化后不可修改。 需要注意的是在Go中字符串是有UTF-8编码的,请注意保存文件时将文件编码格式改成UTF-8(特别是在windows下)。 初始化 var str string //声明一个字符串 str = "laoYu" //赋值 ch :=str[0] //获取第一个字符 len :=len(str) //字符串的长度,len是内置函数 ,len=5 字符串操作 编码过程中避免不了中文字符,那我们该如何提取一个中文呢?首先我们要知道string[index]获取的是字符byte,就无法像C#中"老虞"[0]来取到‘老’,在Go中需要将字符串转换成r...阅读全文

博文 2014-10-30 03:00:01 ghgyj

golang for android

go是一种简洁高效的语言,go 1.4版本支持在android上运行 go get golang.org/x/mobile go get golang.org/x/mobile/example 运行示例代码,路径为$GOPATH/src/golang.org/x/mobile/example/libhello 运行all.bash编译并打包安装 如果报错: go build runtime: android/arm must be bootstrapped using make.bash 则说明没有编译arm版本的go,需要进到$GOROOT/src下面编译android/arm版本 #拣出一套交叉编译工具 $NDK_ROOT/build/tools/make-standalone-tool...阅读全文

博文 2014-12-18 16:00:06 开开904

mac下使用brew安装并使用golang

突然想进go坑,然后就尝试在公司新发的mac上折腾下 安装 通过执行命令 brew search go 看到可用最新版是1.7,就他了 brew install go@1.7 安装好了,按网上的教程 直接在终端里执行 go,结果提示命令不存在 Orz。好吧,自己加个别名吧。 打开 .bash_profile,添加: alias go=’/usr/local/Cellar/go\@1.7/1.7.6/bin/go’ 执行 source .bash_profile,然后再执行 go。一切正常~ 按照教程,然后继续在 .bash_profile 中设置几个环境变量: export GOROOT=/usr/local/opt/go\@1.7/bin/ export GOPATH=~/code/gol...阅读全文

博文 2017-07-01 16:00:16 nicochen

golang的io包

package io import "io" io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。 因为这些接口和原语是对底层实现完全不同的低水平操作的包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。 Index Variables type Reader type Writer type Closer type Seeker type ReadCloser type ReadSeeker type WriteCloser type WriteSeeker type ReadWriter type ReadWriteCloser type Read...阅读全文

博文 2014-10-04 19:26:40 刘地

golang init函数

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性, 有下面的特征: 1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等 2 每个包可以拥有多个init函数 3 包的每个源文件也可以拥有多个init函数 4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序 6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用 下面的两个go文件演示了: 1 一个package或者是go文件可以包含多个init函数, 2 init函数是在main函数之前执行的, 3 init函数被自动调用,不能在其他函数中调用,显式调用会报该函数未定义 g...阅读全文

博文 2018-12-05 12:34:42 stevenlife

golang 中io包用法(一)

本文转自Golove博客:http://www.cnblogs.com/golove/p/3276678.html ,并在此基础上进行修改. io 包为I/O原语提供了基础的接口.它主要包装了这些原语的已有实现,如 os 包中的那些,抽象成函数性的共享公共接口,加上一些其它相关的原语。 由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户不应假定它们对于并行执行是安全的。 在io包中最重要的是两个接口:Reader和Writer接口,首先来介绍这两个接口. type Reader interface { Read(p []byte) (n int, err error) } Reader 接口包装了基本的 Read 方法。 Read 将 len(p) 个字节读取到 p 中...阅读全文

博文 2015-06-19 01:00:27 chenbaoke

Golang使用Redis

go使用Redis 文档链接:https://godoc.org/github.com/go-redis/redis import ( "fmt" "github.com/go-redis/redis" ) var ClientRedis *redis.Client const ( REDIS_NETWORK = "tcp" REDIS_HOST = "" REDIS_PORT = "" REDIS_PASSWORD = "" REDIS_DB = 0 ) func init() { options := redis.Options{ Network: REDIS_NETWORK, Addr: fmt.Sprintf("%s:%s", REDIS_HOST, REDIS_PORT), Dia...阅读全文

博文 2020-04-05 13:32:44 是个懒人

[Go]Log记录

后端系统中的Log是相当重要的,做过高并发服务的同学都会认同这一点。相对而言,调试已经用处不大了,对于这样的项目,我现在也习惯了这种开发方式,有两个原因:1.debug只能在开发环境,到产线环境就不灵了。2.在并行计算下,debug可能无法发现潜在的问题。 有了以前做node.js的经验,放弃debug没有想象中那么可怕,只要我们程序设计合理,结构清晰,日志完整,看到异常信息后基本都可以快速定位问题所在。 做Java的时候有log4j,做.NET程序的时候有log4net, 做Node.js的时候有log4js....上述几个模块用了都不错,因此做Go项目自然选择了Log4go。 话说这个log4go并不完善,而且两年没维护了,白瞎了这么好的名字。比较严重的是程序退出可能有日志没有flush...阅读全文

博文 2014-11-11 17:00:01 abv123456789

golang 编译后文件过大问题处理

go1.9.2出来了,有一个用golang写的工具要编译,正好也测试一下。我是在windows10 64位下测的。编译和执行文件效率都差不多。但是1.9.2编译出来的文件6M。 个人觉得这个有点大了,关键是功能也不复杂。所以觉得这个体积简直太夸张了,试试能否减肥。 使用原始build编译的大小 6,167KB 通过去除部分连接和调试,build部分参数查看结果。 -a 强制编译所有依赖包。 -s 去掉符号信息 -w 去掉DWARF调试信息,得到的程序就不能用gdb调试了 不建议s和w同时使用。 go build -ldflags -w test.go 但是体积还是有点大 4,236KB 最后还只能是加壳压缩。工具地址如下: https://github.com/upx/upx/release...阅读全文

博文 2018-04-25 16:33:06 mickelfeng

golang轮询机制select的理解

func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit) } //select的轮询机制 func fibonacci(c chan int, quit chan int) { x, y := 0, 1 for { select { // select轮询机制 case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } } } main中执行fibonacci函数时候,select有...阅读全文

博文 2015-07-24 16:00:01 webyh

关于golang里停止程序执行与变量打印

1)golang里有没有停止程序执行的语句,类似于php里的die和exit. 2)在beego里,如何直接打印变量输出到浏览器里,而不需要渲染到模板里,类似于php里的 echo $a; die; 如果使用fmt.Printf(),需要在后台进行查看了。 有没有更直接的方法,刚接触学习,需要进行各种调试,来了解它的执行过程和原理, ...阅读全文

GoLang基础数据类型--->数组详解

GoLang基础数据类型--->数组详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。换句话说,与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。 在Go语言中数组是一个值类型(value type)。是真真实实的数组,而不是一个指向数组内存起始位置的指针,也不能和同类型的指针进行转化,这一点严重不同于C语言。所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数...阅读全文

go-redis 发布/订阅

go-redis 发布/订阅 最近golang 的项目开始使用redis 对于redis 真的是接触少,而且是golang版本的 只能是看着文档一点一点的入手了 连接初始化 RedisClient = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB }) 发布 //参数1 频道名 字符串类型 //参数2 发送的内容 他是个 interface{} 类型 因为我要和前端对接 所以data是我转的json字符 err := RedisClient.Publish("message", data).Err() if er...阅读全文

博文 2019-03-07 16:34:50 ChunShan

GoLang基础数据类型--->字典(map)详解

GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是函数吗?学过python的小伙伴可能会想到map这个函数。其实它就是Golang中的字典。下面跟我一起看看它的特性吧。map 也就是 Python 中字典的概念,它的格式为“map[keyType]valueType”。 map 的读取和设置也类似 slice 一样,通过 key 来操作,只是 slice 的index 只能是`int`类型,而 map 多了很多类型,可以是 int ,可以是 string及所有完全定义了 == 与 != 操作的类型。 一.map的赋值方式 1.先的声明再初始化最后赋值 1...阅读全文

博文 2017-10-19 16:00:01 yinzhengjie

Go语言 整数和浮点数性能对比

我们团队使用Go来开发游戏服务端,游戏服务端的战斗逻辑避免不了各种计算,C的编程经验告诉我们整数运算效率比浮点运算高,但是在Go语言中,这两种数据类型的运算效率到底差多少呢?是否有必要把浮点数转换成整数的万分数或者千分数进行运算呢?下面通过实验来对比。 实验代码(github): package labs05 import "testing" func Benchmark_IntAdd(b *testing.B) { var a = 0 for i := 0; i < b.N; i++ { a += 1 } } func Benchmark_Int8Add(b *testing.B) { var a int8 = 0 for i := 0; i < b.N; i++ { a += 1 } }...阅读全文

博文 2015-06-17 23:01:27 abv123456789

golang reflect

reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。调用ValueOf函数返回一个Value类型值,该值代表运行时的数据。Zero接受一个Type类型参数并返回一个代表该类型零值的Value类型值 type package main import ( "reflect" "fmt" ) type lx interface { SayHi() } type User struct { Name string Age int64 Sex string } func (u *User) SayHi() { fmt.Println("hello world") } f...阅读全文

博文 2015-10-05 10:00:04 别人说我名字很长

GoLang 字符串处理大全

GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 欢迎加入: 高级运维工程师之路 598432640 任何一门语言都有它的好处,Golang的长处就是在于它的高并发能力,所以现在练习好Golang的用法,有利于你找一份好的工作哟~在学习任何一本语言,它的基本数据类型我们应该都得熟记于心,今天我们处理的主角就是字符串。让我们一起看看Golang对字符串的用法吧。我们此处主要针对strings这个包的某些方法的用法做演示。 1.Contains 1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/ta...阅读全文

博文 2017-09-30 09:30:01 yinzhengjie

golang学习笔记之-取随机数

取随机数 package main import ( "fmt" "math/rand" "time" ) func main() { //step1: 设置种子数 rand.Seed(time.Now().UnixNano()) //step2:获取随机数 num4 := rand.Intn(100) //[0,100) fmt.Println(num4) } 取从什么开始到什么结束: package main import ( "fmt" "math/rand" "time" ) func main() { //取[n,m]的数 语法入下: //rand.Seed(time.Now().UnixNano()) //num := rand.Intn(m-n+1) + n //取5到10的数...阅读全文

博文 2018-09-02 20:34:43 Maggie_up

Golang 逐行读取大文件性能对比

前 言 BUFIO 是什么? BUFIO 是用来驱动 I/O 列内的专用时钟网络,这个专用的时钟网络独立于全局时钟资源,适合采集源同步数据。BUFIO 只能由位于同一时钟区域的 Clock-Capable I/O驱动。一个时钟区域有4个 BURIO,其中的2个可以驱动相邻区域的 I/O 时钟网络。BUFIO 不能驱动逻辑资源(CLB、BRAM等),因为 I/O 时钟网络只存在于 I/O 列中。 简单点就是: bufio 包实现了带缓存的 I/O 操作 它封装一个 io.Reader 或 io.Writer 对象 使其具有缓存和一些文本读写功能 本文主要来对比一下 BUFIO 中的 ReadString 和 ReadLine 函数的性能。 注:测试代码忽略读取内容和错误处理 ReadStrin...阅读全文

博文 2017-09-13 05:34:50 51reboot

Prometheus远程存储

除了其本地时间序列数据库之外,还可以将Prometheus配置为读取和写入远程存储。这旨在支持监视数据的长期存储。 远程读 配置后,Prometheus存储查询(例如,通过HTTP API)将发送到本地和远程存储,然后合并结果。 请注意,为了在面对远程存储问题时保持可靠性,警报和记录规则评估仅使用本​​地TSDB。 配置 您可以在Prometheus配置文件的remote_read部分中配置远程存储读取路径。 最简单的是,您只需为远程存储指定读取的端点URL,再加上身份验证方法。您可以使用HTTP基本认证或承载令牌认证。 您可能需要使用read_recent标志:设置为true时,将从远程存储和本地存储中回答所有查询。如果为false(默认值),则可以从本地存储完全回答的所有查询都不会发送到...阅读全文

博文 2019-12-19 17:32:42 iyacontrol

golang标准库中的encoding/hex包

1、golang中hex包是什么? 2、hex包给开发者提供了什么内容?以及怎么使用? 3、相关链接 一、golang中hex包是什么? hex包实现了16进制字符表示的编解码。 二、hex包给开发者提供了什么内容?以及怎么使用? 变量 var ErrLength = errors.new("encoding/hex: odd length hex string") 解码一个长度为奇数的切片时,将返回此错误 type InvalidByteError byte 描述一个hex编码字符串中的非法字符。 func (e InvalidByteError) Error() string 函数 1)func DecodeLen(x int) int 长度x的编码数据解码后的明文数据的长度 2)fun...阅读全文

Go语言执行效率

今天我用Qt和Golang写了一段代码用来对比它们的执行效率,代码很简单,就是求1到1000000000000的和,如下: Qt代码: ```c QElapsedTimer et; et.start(); long sum = 0; for(long i = 0; i < 1000000000000; ++i) { sum += i; } qDebug() << Q_FUNC_INFO << "Elapsed:" << et.elapsed(); qDebug() << Q_FUNC_INFO << "sum =" << sum; ``` Golang代码: ```go...阅读全文

Go语言 时间处理详解

编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔。本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过。 golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情。我们初步的学习下常用的函数。 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s manu@manu-hacks:~/code/go/self$ date +%s 1385131172 熟悉Linux下C编程的就是time函数的返回值: #include time_t n...阅读全文

博文 2015-06-17 20:05:17 abv123456789

Kratos--安装及配置

安装GO环境 安装protoc以及相关的包和插件 https://www.jianshu.com/p/6942a361e455 安装Kratos Go version>=1.12 and GO111MODULE=on go get -u github.com/bilibili/kratos/tool/kratos 提示:安装过程中可能会出现部分包下载失败,可以手动下载包然后拷贝至相应文件目录。 快速开始 cd $GOPATH/src kratos new kratos-demo cd kratos-demo/cmd go build ./cmd -conf ../configs 打开浏览器访问:http://localhost:8000/kratos-demo/start,你会看到输出了Go...阅读全文

博文 2019-06-26 17:32:44 凉初透的风

go build 不同系统下的可执行文件

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。 1、Mac下编译Linux, Windows平台的64位可执行程序: $ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go $ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 2、Linux下编译Mac, Windows平台的64位可执行程序: $ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go $ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 3、Windows下编...阅读全文

博文 2018-12-01 18:34:41 tt大眼仔

Golang Printf、Sprintf 、Fprintf 格式化

https://www.cnblogs.com/dfsxh/p/10316601.html /* %v 输出结构体 {10 30} %+v 输出结构体显示字段名 {one:10 tow:30} %#v 输出结构体源代码片段 main.Point{one:10, tow:30} %T 输出值的类型 main.Point %t 输出格式化布尔值 true %d输出标准的十进制格式化 100 %b输出标准的二进制格式化 99 对应 1100011 %c输出定整数的对应字符 99 对应 c %x输出十六进制编码 99 对应 63 %f输出十进制格式化 99 对应 63 %e输出科学技科学记数法表示形式 123400000.0 对应 1.234000e+08 %E输出科学技科学记数法表示形式 1234...阅读全文

博文 2019-06-18 14:02:47 w85278161

如何运行一个golang程序为守护进程

http://www.hiceon.com/topic/how-to-start-a-golang-program-as-a-daemon/ 安装daemonize 安装git环境 yum install git -y 获取daemonize git clone git://github.com/bmc/daemonize.git 安装daemonize cd daemonize./configuremake && make install 查看是否安装 daemonize -v 通过daemonize执行golang守护进程 你需要打包你的golang程序为可执行文件(go build),并通过daemonize来执行它来实现守护进程,如: daemonize -p /var/run/my...阅读全文

博文 2015-09-13 14:00:30 leonpengweicn

golang最小docker镜像制作

因为go语言编译好之后为可执行文件,不需要依赖go语言环境即可运行,所以可以在带go语言得docker镜像中编译,编译完成之后将二进制文件拷贝到一个不带go环境的较小的镜像即可,这里采用alpine镜像作为运行的镜像 FROM golang:alpine AS development WORKDIR $GOPATH/src COPY . . RUN go build -o app FROM alpine:latest AS production WORKDIR /root/ COPY --from=development /go/src/app . EXPOSE 8080 ENTRYPOINT ["./app"] 这样制作完成的镜像只有8.5M的大小,其中alpine基础包5.53...阅读全文

博文 2019-05-27 17:34:52 褪色的记忆1994

Golang的交互模式进阶-读取用户的输入

Golang的交互模式进阶-读取用户的输入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 读写数据除了 fmt 和 os 包,我们还需要用到 bufio 包来处理缓冲的输入和输出。 一.从控制台读取输入 我们如何读取用户的键盘(控制台)输入呢?从键盘和标准输入 os.Stdin 读取输入,最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。具体代码如下 1 /* 2 #!/usr/bin/env gorun 3 @author :yinzhengjie 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9...阅读全文

博文 2017-11-08 06:00:01 yinzhengjie

Golang多平台交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Wind...阅读全文

压缩go build打包的可执行文件

前言 最近在写一个cli程序,习惯性的go build之后发现简简单单的几行代码打包出来就3.0+MB了,为此被做Python的同学嘲笑了很久,于是就研究了一下go build产生的可执行文件的压缩 代码示例 代码如下: package main import ( "os" "gopkg.in/urfave/cli.v2" ) const ( APP_NAME = "etcd-cli" APP_VERSION = "0.1" APP_USAGE = "etcd-cli是一个简单实用的etcd命令行客户端,帮助你彻底解脱一次又一次的输入etcdctl" ) func main() { app := new(cli.App) app.Name = APP_NAME app.Version = A...阅读全文

博文 2017-08-17 17:05:04 gwpp

golang在当前执行目录创建日志文件

package main import ( "bufio" "log" "os" "os/exec" "path/filepath" "strings" "time" ) /*获取当前文件执行的路径*/ func GetCurrPath() string { file, _ := exec.LookPath(os.Args[0]) path, _ := filepath.Abs(file) splitstring := strings.Split(path, "\\") size := len(splitstring) splitstring = strings.Split(path, splitstring[size-1]) ret := strings.Replace(splitstri...阅读全文

博文 2014-10-04 19:27:13 xlplbo

go浮点数转字符串保留小数点后N位解决办法

最近在项目中碰到很多次float转string,同时要求保留小数点后几位,并且去掉小数点后0的场景 虽然问题很简单,但是隔了挺久没处理这种场景就有些生疏了,自己也搜了一下,很多回答都不太满意。这里贴一下自己的做法,如果有更好的解决办法的话,还请多多指教 // 主要逻辑就是先乘,trunc之后再除回去,就达到了保留N位小数的效果 func FormatFloat(num float64, decimal int) string { // 默认乘1 d := float64(1) if decimal > 0 { // 10的N次方 d = math.Pow10(decimal) } // math.trunc作用就是返回浮点数的整数部分 // 再除回去,小数点后无效的0也就不存在了 retur...阅读全文

Golang为什么没有整型的max/min方法

作为有一些经验的Golang开发者,你可能意识到了Golang并没有max/min方法来返回给定的两个或多个整型数值中的最大值或最小值。其他语言通常会在核心库中提供这类方法。 你有没有想过为什么Golang没有这么做? Golang确实在math包中提供了max/min方法,但是仅用于对比float64类型。方法的签名如下: math.Min(float64, float64) float64 math.Max(float64, float64) float64 Golang为float64提供max/min方法是浮点类型的比较对于大部分开发者来说比较困难。由于涉及精度问题,浮点数的对比往往没有那么直接。所以Golang在math包中提供了用于浮点数对比的内建方法。 对于int/int64数...阅读全文

博文 2019-12-07 20:32:40 李小西033

fmt包的Println,Printf和Sprintf的区别

fmt包实现了格式化的I/O,其功能类似于C的printf和scanf。这是官网给出的解释。 **Println:** 1. 用默认的类型格式显示方式将传入的参数写入到标准输出里面(即在终端中有显示), 2. 多个传入参数之间使用空格分隔, 3. 在显示的最后追加换行符, 4. 返回值为 写入标准输出的字节数和写入过程中遇到的问题。 **Printf:** 1. 用传入的格式化规则符将传入的变量写入到标准输出里面(即在终端中有显示), 2. 返回值为 写入标准输出的字节数和写入过程中遇到的问题。 **Sprintf:** 1. 用传入的格式化规则符将传入的变量格式化,(终端中不会有显示) 2. 返回为 格式化后的字符串。 ``` go testStr := []byte("test str"...阅读全文

博文 2018-11-08 09:49:02 lijingtian

VsCode配置Golang开发环境,基于Go Modules

本文参考 从零开始搭建Go语言开发环境 之前都是使用 LiteIDE 开发Go,在IDE里就能设置任意 GOPATH 目录,挺方便。后来看到 VsCode 这么强大,也打算折腾一下。折腾一两个小时发现其实不算太麻烦。 Go语言1.14版本之后推荐使用Go Modules管理,所以我们可以在任何目录里建立Go项目。 总共三步: 安装 Golang 配置代理 安装 VsCode 插件 1. 安装Golang 建议去官网下载安装,Homebrew 有时候很好用,不过有可能更新不及时,或者它自己无法更新,遇到问题还得再查,没必要。 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ Golang安装.png...阅读全文

博文 2020-04-04 14:32:50 看着我别说话

centos下安装UPX+压缩golang可执行程序

centos安装upx wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/ucl-1.03-2.el7.rf.x86_64.rpm rpm -Uvh ucl-1.03-2.el7.rf.x86_64.rpm yum install ucl wget -c http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/upx-3.91-1.el7.rf.x86_64.rpm rpm -Uvh upx-3.91-1.el7.rf.x86_64.rpm yum install upx #upx压缩...阅读全文

博文 2017-08-25 09:03:27 雨花

Go语言:crypto/ssh执行远程命令

golang_ssh00.png 前言 远程执行命令有什么用?为什么要远程执行命令? 如果你只有2,3台服务器需要管理的时候,远程执行命令确实没有没多大作用,你可以登录到每台服务器上去完成各种操作。 当你的服务器大于3台的时候,远程执行的命令的方式就可以大大提高你的生产力了。 如果你有一个可以远程执行命令的工具,那么就可以像操作单台机器那样操作多台机器,机器越多,效率提高的越多。 远程执行命令最常用的方法就是利用 SSH 协议,将命令发送到远程机器上执行,并获取返回结果。 连接 连接包含了认证,可以使用 password 或者 sshkey 2种方式来认证。下面的示例为了简单,使用了密码认证的方式来完成连接。 package main import ( "fmt" "github.com/m...阅读全文

博文 2019-05-22 01:34:43 mojotv

聊聊 g0

很多时候,当我们跟着源码去理解某种事物时,基本上可以认为是以时间顺序展开,这是编年体的逻辑。还有另一种逻辑,纪传体,它以人物为中心编排史事,使得读者更聚焦于某个人物。以一种新的视角,把所有的事情串连起来,令人大呼过瘾。今天我们试着以这样一种逻辑再看 g0。 回顾一下 Go 夜读第 78 期,关于调度器源码分析的内容。我们讲过,与主线程绑定的 M 对应的 g0 的主要作用是提供一个比一般 goroutine 要大的多栈(64K)供 runtime 代码执行。 初始化的过程中,在函数 runtime·rt0_go 里会给主线程的 g0 分配栈空间: 之后,主线程会与 m0 绑定,m0 又与 g0 绑定: 之后,又与 p0 绑定: 这样,主线程的这一套 GPM 就可以转起来了。接着,就创建了 ma...阅读全文

根据输入的日期(年月日)判断是星期几——golang实现

输入日期,如2018年11月07日,输出对应的星期数代码如下: // 历史上的某一天是星期几?未来的某一天是星期几? // 关于这个问题,最著名的计算公式是蔡勒(Zeller)公式。即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 // output: w: 0 - 周日; // 1 - 周一; // 2 - 周二; // 3 - 周三; // 4 - 周四; // 5 - 周五; // 6 - 周六; // 公式中的符号含义如下,w:星期; // c:世纪-1; // y:年(两位数); // m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算) // d:日;...阅读全文

博文 2018-11-08 00:34:44 逍遥子_

老虞学GoLang笔记-字符串

在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要。 Go中的字符串和C#中的一样,字符串内容在初始化后不可修改。 需要注意的是在Go中字符串是有UTF-8编码的,请注意保存文件时将文件编码格式改成UTF-8(特别是在windows下)。 初始化 var str string //声明一个字符串 str = "laoYu" //赋值 ch :=str[0] //获取第一个字符 len :=len(str) //字符串的长度,len是内置函数 ,len=5 字符串操作 编码过程中避免不了中文字符,那我们该如何提取一个中文呢?首先我们要知道string[index]获取的是字符byte,就无法像C#中"老虞"[0]来取到‘老’,在Go中需要将字符串转换成rune数组,ru...阅读全文

博文 2015-07-21 15:00:00 Gopher老虞