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

Delve代码分析笔记(5)——debug命令

dlv debug命令会编译并且调试一个package,其代码如下: func debugCmd(cmd *cobra.Command, args []string) { status := func() int { var pkg string dlvArgs, targetArgs := splitArgs(cmd, args) if len(dlvArgs) > 0 { pkg = args[0] } err := gobuild(debugname, pkg) if err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) return 1 } fp, err := filepath.Abs("./" + debugname) if err !...阅读全文

mac下编译go-ethereum

macos: 10.14.4 下载go-ethereum源码,按照文档执行命令编译: $ make all 报错:fatal error: 'stdlib.h' file not found /usr/include 查看xcode是否安装: $ xcode-select --install xcode-select: error: command line tools are already installed, use "Software Update" to install updates $ xcode-select -p /Applications/Xcode.app/Contents/Developer $ brew config Clang: 10.0 build 1001Gi...阅读全文

博文 2019-03-29 18:34:38 lansheng228

Float的基本介绍

关于浮点数,为什么它生来就可能存在误差?带着好奇查阅了一些介绍,然后做了简单汇总。这只是一段知识的开始,后续还会继续完善。—— 荡荡上帝,下民之辟。疾威上帝,其命多辟。天生烝民,其命匪谌。靡不有初,鲜克有终。 Floating-point represent 浮点数在计算机中是如何表示的?因为它有小数点,那么小数点后面的数,该如何用二进制来表示呢?我们都知道,浮点数本身就存在误差,在工作中,你所使用的float都是一个近似数。这又是什么原因导致的呢? 1. Fixed-point fixed-point 是将bit位拆分成固定的两部分:小数点前的部分和小数点后的部分。拿32 bit的fixed-point表示举例,可以将其中的24 bit用于表示整数部分,剩余的8 bit表示小数部分。 假如...阅读全文

Visual Code+Golang环境手工安装依赖

#01 综述 微软发布的visual code studio是款简单易用的轻量级IDE,支持众多语言,包括Go语言。 通过extensions:install extensions安装了Go语言支持插件后,还需要安装gopls、gocode等依赖,因为golang.org无法直接访问,所以有时需要通过GitHub下载后手工安装依赖。 #02 下载和安装 使用git clone指令下载源文件至对应的 src 目录下,使用go install进行安装。(需要保持src下的目录路径与安装时提交的路径参数一致,如使用go install golang.org/x/tools/cmd/guru,下载时存放路径应是 src\golang.org\x\tools\cmd\guru ) #安装guru和go...阅读全文

博文 2020-02-08 01:32:45 ponder4

MAY-Lesson 1

笔记 - unsafe Package unsafe contains operations that step around the type safety of Go programs. Packages that import unsafe may be non-portable and are not protected by the Go 1 compatibility guidelines. unsafe 库让 golang 可以像C语言一样操作计算机内存,但这并不是golang推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它绕过了golang的内存安全原则,是不安全的,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。 unsafe.Sizeof Sizeof ...阅读全文

博文 2019-05-22 17:34:53 夜空一起砍猩猩

GO 语言交叉编译

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 Win...阅读全文

浮点数格式化输出的原理是什么?

fmt.Printf("1.8350 => %.2f\n",float64(1.835)) fmt.Printf("1.8450 => %.2f\n",float64(1.845)) fmt.Printf("5.8350 => %.2f\n",float64(5.835)) fmt.Printf("5.8450 => %.2f\n",float64(5.845)) fmt.Printf("7.8350 => %.2f\n",float64(7.835)) fmt.Printf("7.8450 => %.2f\n",float64(7.845)) fmt.Printf("8.8350 => %.2f\n",float64(8.835)) fmt.Printf("8.8450 => %.2f\n...阅读全文

博文 2020-05-18 20:43:21 Y-dc

《Go语言四十二章经》第二十八章 unsafe包

《Go语言四十二章经》第二十八章 unsafe包 作者:李骁 ## 28.1 unsafe 包 ```go func Alignof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Sizeof(x ArbitraryType) uintptr type ArbitraryType int type Pointer *ArbitraryType ``` 这个包中,只提供了3个函数,两个类型。就这么少的量,却有着超级强悍的功能。学过C语言的都可能比较清楚,通过指针,知道变量在内存中占用的字节数,就可以通过指针加偏移量的操作,在地址中,修改,访问变量的值。在Go 语言中,怎么去实现这么疯狂的操作呢?就得靠u...阅读全文

博文 2018-10-12 20:37:14 roteman

Golang学习笔记-1.8 switch语句

本文系第八篇Golang语言学习教程 switch是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据情况执行相应代码。是替代if else的常用方式。 下面通过讲解一个简单的运算程序来了解switch语句 package main import "fmt" func eval(a, b int, op string) int { //定义eval函数,输入三个值 a, b, op 输出类型为 int var result int switch op { // op 为表达式,将 op 的值与下面 case 比较 case "+": //若 op 值为 + , 则将 result 赋值 a + b 以此类推 result = a + b case "-": result = ...阅读全文

博文 2018-07-14 15:34:46 xunk1900

3. Go语言中的整型与浮点型

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 系列导读 1. 一文搞定Go语言开发环境的搭建 2. Go 语言中五种变量创建的方法 1. 整型 Go 语言中,整数类型可以再细分成10个类型,为了方便大家学习,我将这些类型整理成一张表格。 int 和 uint 的区别就在于一个 u,有 u 说明是无符号,没有 u 代表有符号。 解释这个符号的区别 以 int8 和 uint8 举例,8 代表 8个bit,能表示的数值个数有 2^8 = 256。 uint8 是无符号,能表示的都是正数,0-255,刚好256个数。 int8 是有符号,既可以正数,也可以负数,那怎么...阅读全文

博文 2020-03-27 14:34:36 王一白

4. Go 语言数据类型:byte、rune与字符串

Hi,大家好。 我是明哥,在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. byte 与 rune byte,占用1个节字,就 8 个比特位,所以它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符。 如下这段代码,分别定义了 byte 类型和 uint8 类型的变量 a 和 b import "fmt" func main(...阅读全文

博文 2020-04-26 13:33:04 Python编程时光

golang 指针类型引起的神奇 bug

下面是使用的结构体接口抽象定义,其实就是将结构体存进一个 map里。由于是读写都比较频繁,我加了读写锁。 // add progress listener. func (upload *UploaderGateway) AddProgress(key string, v ProgressListener) { upload.mutex.Lock() defer upload.mutex.Unlock() upload.ProgressMap[key] = v } //get progress listener. func (upload *UploaderGateway) GetProgress(key string) (v ProgressListener, err error) { up...阅读全文

博文 2019-06-03 23:34:19 张高元

Golang strconv包使用

// atob.go ------------------------------------------------------------ // ParseBool 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False. // 其它任何值都返回一个错误 func ParseBool(str string) (value bool, err error) func main() { fmt.Println(strconv.ParseBool("1")) // true fmt.Println(strconv.ParseBool("t")) // true fmt.Println...阅读全文

博文 2019-01-28 15:34:50 小马哥_Magical

AES代码实现-Golang源码

引流 : AES 原理 / DES 原理和Golang实现 / 个人主页 参考 : 标准AES-FIPS197 /《深入浅出密码学》 crypto/aes 包 Golang中aes和des采用了相同的设计模式,都实现了cipher.block接口,整体的代码设计思路是类似的。 主要涉及下面三个文件 -aes -cipher.go //提供构造方法,暴露加解密方法 -block.go // Golang加解密的具体实现 -const.go // 定义算法所需要的常量和测试数据 对于包中的其他文件*asm.go , *_gcm.go 是直接操作汇编码进行加解密,前提是操作系统支持。 对于模块中的方法:*Go()表示用纯Go实现的;*Asm()和*Gcm()都是工具人,下面是汇编。 为什么AES整...阅读全文

博文 2020-03-31 23:32:48 Jupiter_Van

[BUG]int64(1.1*float64(time.Minute))会报错但其他浮点数不会

可参考stackoverflow https://stackoverflow.com/questions/47568254/why-int641-1float64time-minute-is-error-but-int641-1float64time-minute 今天写着写着发现这个活见鬼的bug,想不懂为什么 int64(1.1*float64(time.Minute)) 就编译不过,其他浮点数就可以,没想通哪里不符合类型转换条件了 而且把这句话拆开来写就pass......阅读全文

go可执行程序携带附件

###### 1.灵感来源 主要是看到这个开源项目: https://github.com/jteeuwen/go-bindata 该项目就是将文件生成go代码,编译出来的可执行程序可以创建携带的文件。我之前有个工具需要7za.exe,因为怕别人的电脑上没有这个文件,所以我想在我代码中判断环境不存在7za.exe或md5值不正确的时候,自动生成正确的7za.exe。当时就是使用上面的库,但是我仔细研究了一下源码发现生成的go源文件还是有点大,而且我也不需要太多复杂功能,因此我自己写了一个简化版的代码。 ###### 2.放上源码 ```go package main import ( "compress/zlib" "fmt" "io" "log" "os" "path/filepath" ...阅读全文

golang-nsq系列(二)--nsqd源码解析

上一篇初识了 nsq 三个模块(nsqd, nsqlookupd, nsqadmin)的 demo演示,本篇则从源码开始,一步一步去解析 nsqd 的执行流程和逻辑处理,学习别人优秀的项目架构,以期学以致用。 1. nsqd 执行入口 在 nsq/apps/nsqd/main.go 可以找到执行入口文件,如下: 2. nsqd 执行主逻辑源码 2.1 通过第三方 svc 包进行优雅的后台进程管理,svc.Run() -> svc.Init() -> svc.Start(),启动 nsqd 实例; func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil...阅读全文

博文 2019-09-01 22:02:39 热爱coding的稻草

Visual Code+Golang手工安装必要依赖

微软发布的visual code studio是款简单易用的轻量级IDE,支持众多语言,包括Go语言。通过extensions:install extensions安装了Go语言支持插件后,还需要安装gopls、gocode等依赖,因为golang.org无法直接访问,所以有时需要通过GitHub下载后手工安装依赖。简单如下:#安装guru和gorename git clone https://github.com/golang/tools.git "%GOPATH%\src\golang.org\x\tools" go install golang.org/x/tools/cmd/guru go install golang.org/x/tools/cmd/gorename #安装goli...阅读全文

博文 2020-02-07 07:32:41 ponder4

[转载]Golang 交叉编译跨平台的可执行程序 (Mac、Linux、Windows )

Golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序.mac 下可以编译linux 下的执行程序 又或者windows下的执行程序 交叉编译依赖下面几个环境变量: GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows) 各平台的GOOS和GOARCH参考 OS ARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386 / amd64 OS X (Snow Leopard + Lion) freebsd 386 / amd64 >= FreeBSD 7 windows 386 / amd64 >= Windows 2000 跨...阅读全文

博文 2019-10-19 23:32:48 aside section ._1OhGeD

开发完成的golang项目如何上线部署到Linu服务器上?

方法二:本地编译 cmd控制台到main.go文件目录下 set GOARCH=amd64 set GOOS=linux go build main.go 会生成一个没有后缀的二进制文件 main 将该文件放入linux系统某个文件夹下 赋予权限 chmod 777 main 最后执行 ./main 就行了。 windows服务器 先本地编译 go build main.go 编译后会在同级目录生成可执行文件 main.exe linux服务器 方法一:服务器上去编译 安装go,配置GOPATH 1,把服务器上配置成本地一样的环境 2,包括项目里面所依赖的包 3,项目源码拷贝到与服务器,服务器上编译 go build main.go 编译后会在同级目录生成可执行文件 main 最后执行 ./...阅读全文

博文 2019-10-15 11:32:58 aside section ._1OhGeD

Golang 在 Mac、Linux、Windows 下如何交叉编译

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...阅读全文

博文 2018-12-17 11:34:55 柠檬信息技术有限公司

golang循环跳转语句

golang循环跳转语句 跳转语句 goto break continue 三个语法都可以配合标签使用 标签名区分大小写,若不使用会造成编译错误 break与continue配合标签可用于多层循环的跳出 goto是调整执行位置,与其他2个语句配合标签使用的结果不同 break func main() { LABEL1: for { for i := 0; i < 10; i++ { if i > 3 { fmt.Println(i) break LABEL1 } } } fmt.Println("执行结束") } 输出结果 API server listening at: 127.0.0.1:5587 4 执行结束 Process exiting with code: 0 添加LABEL1标...阅读全文

博文 2019-07-30 03:32:39 iXiAo9

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 Wi...阅读全文

博文 2018-12-01 11:34:41 泡泡龙吐泡泡

Go Redigo 源码分析(三) 执行命令

简单使用 简单使用Do函数获取单条和使用童丹请求多条获取多条数据。 func main() { // 1. 创建连接池 // 2. 简单设置连接池的最大链接数等参数 // 3. 注入拨号函数 // 4. 调用pool.Get() 获取连接 pool := &redis.Pool{ MaxIdle: 4, MaxActive: 4, Dial: func() (redis.Conn, error) { rc, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { return nil, err } return rc, nil }, IdleTimeout: time.Second, Wait: true, } con := po...阅读全文

博文 2019-05-30 18:34:37 大二小的宝

golang语言渐入佳境[28]-time包核心方法

time包核心方法12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915...阅读全文

博文 2018-12-12 00:35:17 jonson_jackson

2019-08-06 go 交叉编译

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 Windows 下编译 Mac 和 Linux 6...阅读全文

博文 2019-08-07 08:32:41 cityhash123

go交叉编译

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.go2.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.go3.Windows下编译Mac, Linu...阅读全文

博文 2019-10-09 19:32:42 aside section ._1OhGeD

Golang 交叉编译

golang 跨平台(跨操作系统系统)编译 Windows 下编译 Mac 64位可执行程序: SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build -v Windows 下编译 Linux 64位可执行程序: set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build Mac 下编译 Linux 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build Mac 下编译 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go ...阅读全文

GO语言学习笔记(三)初写GO程序

一、第一个程序名称:helloworld.go package main import "fmt" func main() { fmt.Println("hello world!") } 知识点1:Go语言的代码文件一般是以.go作为后缀。 运行helloworld.go执行:go run helloworld.go输出结果:hello world!知识点2:使用run参数的意思是编译并运行。 编译成二进制文件执行:go build -o helloworld helloworld.go执行:ls查看helloworld helloworld.go在当前目录下会产生一个helloworld的二进制文件,我们可以直接运行这个二进制文件执行二进制文件:./helloworld执行结果:hello...阅读全文

博文 2019-01-25 18:35:14 Mr大表哥

go语言渐入佳境[5]-printf格式化打印

golang输出的格式化打印1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package mainimport "fmt"func main(){ //通用的格式 str:="jonson" fmt.Printf("%T,%v\n",str,str) //布尔 var booeanl = true fmt.Printf("%T,%t\n",booeanl,booeanl) //特殊字符 fmt.Printf("%%\n") fmt.Printf("\"\n") fmt.Printf("\\\n") //整数 fmt.Printf("%T,%d\n",123,...阅读全文

博文 2018-12-04 00:35:13 jonson_jackson

Go 语言, defer

Go 语言的 defer 语句是一个非常有用的特性,可以将一个方法延迟到包裹该方法的方法返回时执行,在实际应用中,defer 语句可以充当其他语言中try…catch…的角色,也可以用来处理关闭文件句柄等收尾操作。 相信很多初学者已经被上面加粗这句话搞懵逼了。而这种神乎其技的特性就是引发各种坑的元凶。 下面这段代码执行超乎预期: package main import "fmt" type Slice []int func NewSlice() Slice { return make(Slice, 0) } func (s *Slice) Add(elem int) *Slice { *s = append(*s, elem) fmt.Print(elem) return s } func ...阅读全文

博文 2019-06-13 23:03:12 qq5c822f9bb7f5c

Golang之旅3-基本数据类型

基本数据类型 GO语言中的数据类型十分丰富,包含:整型、浮点型、布尔型,还有数组、切片、结构体、函数、map、通道chanel等 go基本数据类型 整型 无符号整型 uint8:,0到255 uint16:,0到65535 uint32 uint64 有符号整型 int8:-128到127 int16:-32768到32767 int32 int64 其他数字类型 uint:32/64位系统上就是uint32/uint64 int:32/64位系统上就是int32/int64 uintptr:无符号整型,用于存放一个指针 注意: 在使用int和 uint类型时,不能假定它是32位或64位的整型,而是考虑int和uint可能在不同平台上的差异。 获取对象的长度的内建len()函数返回的长度可以...阅读全文

博文 2019-10-19 01:32:43 aside section ._1OhGeD

Ruby程序员的Golang之旅03

Golang声明变量 VS Ruby声明变量 所有编程语言里面,我敢相信没有一门能比在Ruby里面声明一个变量来的更加快活了,以至于我再刚开始使用Golang的时候,被各种类型限制搞得十分头疼 foo = 1 => 1 foo.class => Fixnum foo = 1.0 => 1.0 foo.class => Float foo = 1111111111111111111111111111111 => 1111111111111111111111111111111 foo.class => Bignum foo = "bar" => "bar" foo.class => String a,b,c = 1,'2',3 => [1, "2", 3] ... 不需要var 关键字,也不需要...阅读全文

博文 2017-08-13 14:05:11 peter_ji

我要在栈上。不,你应该在堆上

我要在栈上。不,你应该在堆上 我们在写代码的时候,有时候会想这个变量到底分配到哪里了?这时候可能会有人说,在栈上,在堆上。信我准没错... 但从结果上来讲你还是一知半解,这可不行,万一被人懵了呢。今天我们一起来深挖下 Go 在这块的奥妙,自己动手丰衣足食 问题 type User struct { ID int64 Name string Avatar string } func GetUserInfo() *User { return &User{ID: 13746731, Name: "EDDYCJY", Avatar: "https://avatars0.githubusercontent.com/u/13746731"} } func main() { _ = GetUserInfo...阅读全文

博文 2019-06-11 19:42:21 EDDYCJY

go基本类型使用细节

整型的使用细节 Golang 各整数类型分:有符号和无符号 ,int uint的大小和系统有关。 Golang 的整型默认声明为int型 var n1 = 100 fmt.Printf('n1的数据类型%T',n1) 如何在程序查看某个变量的字节大小和数据类型(使用较多) var n2 int64 = 10 fmt.Printf('n2的 数据类型 %T n2占用的字节数是 %d',n2,unsaft.Sizeof(n2)) 浮点型使用细节 Golang 浮点类型有固定的范围和字段长度,不受具体OS(操作系统)的影响。 Golang 的浮点型默认声明为float64 类型。 浮点型常量有两种表示形式 十进制数形式:如:5.12 .512 (必须有小数点) 科学计数法形式:如:5.1234e2...阅读全文

博文 2019-01-03 18:34:44 StevenQin

06-Go语言命令行参数

GO命令行操作指令 标准go语言项目文件目录格式 项目文件夹就是GOPATH指向的文件夹 src文件夹是专门用于存放源码文件的 main文件夹是专门用于存储package main包相关源码文件的 其它文件夹是专门用于存储除package main包以外源码文件的 bin文件夹是专门用于存储编译之后的可执行程序的 pkg文件夹是专门用于存储编译之后的.a文件的 |---项目文件夹 -----------|--------src文件夹 -----------------------------|--------main文件夹 -----------------------------|--------其它文件夹 -----------|--------bin文件夹 -----------|--...阅读全文

博文 2018-10-15 19:34:39 月色下的阳光

OS Thread Model

概念 线程: 程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,线程由CPU独立调度,在多CPU下可以多线程同时运行。 进程: 进程是资源(CPU、内存等)分配的基本单位,拥有独立的地址空间,它是程序执行时的一个实例,一个进程可有多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。 操作系统线程模型 1:1核心线程模型 pthread线程库--NPTL image.png 内核线程(KLT)由操作系统内核直接支持的线程,内核通过操纵调度器对线程进行调用,程序不直接与内核线程接触而是通过轻量级进程(LWP),LWP内核线程一一对应,程序和内核线程通过轻量级进程联系起,这样的局限性就是每次线程操作都需要从用户态到内核态的转化,代价高,而且由于一一对应的...阅读全文

博文 2019-10-11 01:32:45 aside section ._1OhGeD

golang 项目实战简明指南

开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行程序。本文不再赘述如何搭建 golang 开发环境,只说明下需要注意的地方。 从官网下载对应平台的 golang 安装包中包括 golang 的编译器、一些工具程序和标准库源码。早期的 golang 版本中,需要设置 GOROOT 和 GOPATH 两个环境变量。 从 1.8 版开始,GOPATH 不再需要显示设置。如果没有显示设置,则 GOPATH 的默认值为 $HOME/go 。GOPATH 可以设置多个目录,但推荐只设置一个或直接使用默认值,多个 GOPATH 会造成依赖管理的困难。推荐将 $GOP...阅读全文

博文 2018-12-10 14:43:13 litang.me

关于浮点数精度再各个编程语言需要注意点

浮点数保留N位 (2位),为货币类场景常用选项。比较合理的做法是使用分来存储(int),然后前端在进行转换。否则你就需要关心浮点数自动 四拾伍入。分清自己使用场景选择自己的合适的方法。已知 (mysql(douboule10,2),golang "%.2f",python "%.2f" ) package main import ( "fmt" "math" ) func main() { //四拾伍入了 fmt.Printf("%.2f\n", 1.244444) fmt.Printf("%.2f\n", 1.245444) //自己实现四拾伍入 fmt.Printf("%.2f\n", math.Trunc(1.244444*1e2+)*1e-2) fmt.Printf("%.2f\n"...阅读全文

博文 2019-02-19 16:34:46 数据小菜鸟

Golang基础语法:变量(二)--十安辰

加号的基础应用 1、当左右两边都是数值型时,为加法运算 2、当左右两边都是字符串运算的时候,做字符串拼接 例子: package main import "fmt" //+号的运用 func main() { var i, j = 1, 2 var r = i + j //加法运算 fmt.Println("r=", r) var str1, str2 = "hello", "world" var str = str1 + str2 //做字符串pin'jie fmt.Println("str=", str) } 变量的数据类型 基本数据类型 (a) 整数类型(int) (b) 浮点类型(float) (c) 字符型(byte) (d) 布尔类型(bool) (e) 字符串类型(string...阅读全文

博文 2020-05-14 08:32:43 十安辰

5.1.1Golang开发环境搭建

目录:https://www.jianshu.com/p/e406a9bc93a9 搭建go开发环境 安装go开发包 Go官方镜像站(推荐):https://golang.google.cn/dl/ 根据系统下载相应的安装包。Windows直接是msi文件,直接安装即可。 安装完成 配置GOPATH 因为go是一个编译性语言,所以他需要一个自己的工作空间来存储代码文件(src),中间文件(pkg),编译文件(bin)。 示意图 同时配置环境变量: 示意图 安装vscode 官方文档:https://code.visualstudio.com/docs/?dv=win 中文插件 go插件 第一个go语言程序 目录树 package main import "fmt" func main() {...阅读全文

Golang——安装和第一个Go语言

Go(Golang)、静态编译型语言 UTF8编码 1.官网下载安装包(Mac) 安装包完成之后,在命令后确认 $ go version go version go1.14.2 darwin/amd64 # Go语言默认安装目录 $ echo $GOROOT #查看go的相关环境变量 $ go env 2.配置GOPATH GOPATH是一个环境变量,用来表示go项目的存放路径(工作目录)。 GOPATH路径最好只设置一个,所有的项目代码放到GOPATH的src目录下。 3.Go目录结构 在GOPATH有三个目录 (1)bin:存放编译后的二进制文件 (2)pkg:存放编译后的库文件 (3)src:存放源码文件,可以放多个项目的 image.png image.png image.png 4...阅读全文

Golang学习 - io 包

先说一下接口,Go 语言中的接口很简单,在 Go 语言的 io 包中有这样一个函数: func ReadFull(r Reader, buf []byte) (n int, err error) 这个函数可以把对象 r 中的数据读出来,然后存入一个缓冲区 buf 中,以便其它代码可以处理 buf 中的数据。 这里有个问题,ReadFull 函数究竟可以读取哪些对象的数据?可以读文件中的数据吗?可以读网络中的数据吗?可以读数据库中的数据吗?可以读磁盘中的扇区吗?可以读内存中的数据吗? 答案是 ReadFull 可以读取任何对象的数据,但是有个前提,就是这个对象必须符合 Reader 的标准。 Reader 的标准是什么呢?下面是 Reader 的定义: type Reader interfac...阅读全文

博文 2019-04-19 18:34:41 佛心看世界

go语言学习笔记(三)

分享几门我自学go语言的教程,这几门课可以说是go语言学习的新华字典了!Go语言从入门到实战——简明高效的Go语言实战指南 Google资深工程师深度讲解Go语言Go实战仿百度云盘 实现企业级分布式云存储系统Go语言实战流媒体视频网站Go语言开发分布式任务调度 轻松搞定高性能Crontab高并发&高性能 Go语言开发企业级抽奖项目GO从0到1实战微服务版抢红包系统【区块链实战】Golang公链项目实战go语言教程零基础入门到精通小白的福音:20小时快速入门Go语言一、go语言浮点数表示 go语言浮点数类型有两个,即float32和float64。存储这两个类型的值的空间分别需要4个字节和8个字节。 浮点数类型的值一般由整数部分、小数点“.”和小数部分组成。其中,整数部分和小数部分均由10进制...阅读全文

博文 2019-08-10 18:08:32 zhangaijia

golang笔记之数据类型

基础数据类型 整形、浮点数、复数、布尔型、常量 复合数据类型 slice、数组、map、struct slices使用注意点: slice与数组的区别为在声明时不需要指定长度。 数组的初始化 var a [4]int slice的初始化 var s []byte Slices hold references to an underlying array, and if you assign one slice to another, both refer to the same array. Slice持有一个潜在的数组,如果你将一个slice赋值给另一个slice,那么两个slice有共同的数组。 重新分片一个slice不会拷贝此slice的内部数组。当只使用数据量比较大的sclice的一...阅读全文

博文 2019-05-05 21:34:58 月下独酌100

Go 笔记之详解 Go 的编译执行流程

上篇文章介绍了Golang在不同系统下的安装,并完成了经典的Hello World案例。在这个过程中,我们用到了go run命令,它完成源码从编译到执行的整个过程。 今天来详细介绍下这个过程。简单理解,go run 可等价于 go build + 执行。 build命令简述 在Golang中,build过程主要由go build执行。它完成了源码的编译与可执行文件的生成。 go build接收参数为.go文件或目录,默认情况下编译当前目录下所有.go文件。在main包下执行会生成相应的可执行文件,在非main包下,它会做一些检查,生成的库文件放在缓存目录下,在工作目录下并无新文件生成。 新建hello案例 在正式介绍编译流程前,再重新演示下Hello World案例,新建hello.go文件...阅读全文

「golang」go 交叉编译 (转)

自“http://blog.csdn.net/panshiqu/article/details/53788067” 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...阅读全文

Golang学习 - bytes 包

对于传入 []byte 的函数,都不会修改传入的参数,返回值要么是参数的副本,要么是参数的切片。 // 转换 // 将 s 中的所有字符修改为大写(小写、标题)格式返回。 func ToUpper(s []byte) []byte func ToLower(s []byte) []byte func ToTitle(s []byte) []byte // 使用指定的映射表将 s 中的所有字符修改为大写(小写、标题)格式返回。 func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte func To...阅读全文

博文 2019-04-19 18:34:42 佛心看世界

golang在编译时用ldflags设置变量的值

The Go linker (go tool link) has an option to set the value of an uninitialised string variable: -X importpath.name=value Set the value of the string variable in importpath named name to value. Note that before Go 1.5 this option took two separate arguments. Now it takes one argument split on the first = sign. As part of your build process, you cou...阅读全文

博文 2019-09-09 16:32:49 seamounts