首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏jerryteng的专栏

    学习Go语言-组织源码文件

    go命令文件 命令代码文件,这是程序的运行入口,是每个可独立运行的程序必须拥有的。 如果一个源码文件声明属于 main 包,并且包含一个无参数声明且无结果声明的 main 函数,那么就是命令源码文件 go的命令行功能一般都会结合flag包作为参数输入,flag包可以解析多种类型的数据, 测试代码文件 测试代码分为 单元测试和 性能测试, 含有单元测试代码的go文件必须以_test.go结尾,_test.go前面的部分最好是被测试的方法所在go文件文件名,比如文件是xxx.go,那么测试文件是 第一条规则,同目录下的源码文件的代码包声明语句要一致。 如果目录中有命令源码文件,那么其他种类的源码文件也应该声明属于main包。 第二条规则,源码文件声明的代码包的名称可以与其所在的目录的名称不同。

    1.1K90发布于 2018-09-29
  • 来自专栏个人开发

    go语言学习(三):源码文件

    go语言的源码文件包括命令源码文件、库源码文件和测试源码文件。 测试源码文件主要存放测试相关的源码文件,包括功能测试、性能测试、程序运行示例等。 如上代码,我们在IDE中执行run操作,或者在命令行执行go run Demo1.go ? 2)命令源码文件怎么接受参数呢? \n", name)} 2.库源码文件源码文件是不能直接运行的文件,只能被其他程序使用。go语言中,如果当前文件要使用某个文件中声明的函数,需要跟这个文件在同一个包下面。 要依赖Demo6.go文件,需要先安装一下lib包,go install demo2\lib 这时候就会生成一个归档文件,接着编译和运行 ?

    63620发布于 2020-08-20
  • 来自专栏Golang语言社区

    Go源码编译

    Go is compiled with … Go! ? using /usr/local/Cellar/go/1.10.3/libexec. 5 Building Go bootstrap cmd/go (go_bootstrap) using Go toolchain1 . 6 Building Go toolchain2 using go_bootstrap and Go toolchain1. 7 Building Go toolchain3 using go_bootstrap and Go toolchain2. 8 Building packages and commands for darwin/amd64. 9 --- 10 Installed Go for darwin pkg 7 │ │ └── errors 8 │ │ └── @v 9 │ │ ├── list 10

    90510发布于 2018-07-26
  • 来自专栏后端云

    client-go 源码分析(10) - 使用client-go实现一个简单controller的例子

    下面的example也是client-go官方的例子。通过这个简单的例子正好把之前的源码分析的一个个模块都串起来了。 /kubernetes" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util controller.Run(1, stop) // Wait forever select {} } 运行main方法: GOROOT=C:\go\go1.19 #gosetup GOPATH =C:\Users\hanwei\go #gosetup C:\go\go1.19\bin\go.exe build -o C:\Users\hanwei\AppData\Local\Temp\GoLand \___go_build_k8s_io_client_go_examples_workqueue.exe k8s.io/client-go/examples/workqueue #gosetup C:\

    1K11编辑于 2023-02-10
  • 来自专栏码神路漫漫

    Go 回答之如何阅读 Go 源码

    我的知乎回答,问题是关于如何阅读 Go 源码。地址。胡扯了些自己的想法。 Go源码在安装包的 src/ 目录下。怎么看它的源码呢?直接看吧!没人教的情况下,只能自己撸了。 它主要是为 UNIX 下的调试器提供必要的调试信息,例如 PC 地址对应的文件名行号等信息,以方便源码级调试。 要阅读这段源码,同样需要先了解什么是 Mach-O,它是 Mach object 文件格式的缩写,用于可执行文件、目标代码、内核转储的文件格式。 打开 math 源码文件夹,发现里面有大量的汇编代码,数学相对片底层,对性能要求会比较高,有必要用汇编实现。 int b int expected int }{ {1, 1, 2}, {2, 1, 3}, {3, 2, 5}, {4, 3, 7}, {5, 5, 10

    2.7K41发布于 2019-08-29
  • 来自专栏sktj

    Go文件

    image.png os.Open os.Stderr err!=nil image.png

    1.6K20发布于 2019-07-17
  • 来自专栏用户7873631的专栏

    go上传文件

    helloworld/index.go: package main import ( "fmt" "io" "net/http" "os" ) //写入响应.读取请求 func uploadFile (w http.ResponseWriter,r *http.Request){ err:=r.ParseMultipartForm(10<<20) //10<<20代表二进制10左移动20位1010000000000000000000 转换成mb的话,是10mb if err! submit"> </form> </body> </html> 目录结构: 运行: http://localhost:8080/ cmd: F:\gorun\src\HelloWorld>go run index.go 就行了

    28410编辑于 2024-03-14
  • 来自专栏Golang语言社区

    go rpc 源码分析

    1.概述 go 源码中带了rpc框架,以相对精简的当时方式实现了rpc功能,目前源码中的rpc官方已经宣布不再添加新功能,并推荐使用grpc. 作为go标准库中rpc框架,还是有很多地方值得借鉴及学习,这里将从源码角度分析go原生rpc框架,以及分享一些在使用过程中遇到的坑. 2.server端 server端主要分为两个步骤,首先进行方法注册 = nil { ... } //调用 go service.call(server, sending, mtype, req, argv 异步调用超时后会内存泄漏 基于异步调用加channel实现超时功能也会存在泄漏问题,原因是client的请求会存在map结构中,Go函数退出并不会清理map的内容,因此如果server端不返回的话,map 总结 总的来说,go原生rpc算是个基础版本的rpc,代码精简,可扩展性高,但是只是实现了rpc最基本的网络通讯,像超时熔断,链接管理(保活与重连),服务注册发现,还是欠缺的,因此还是达不到生产环境开箱即用

    1.1K40发布于 2018-07-26
  • 来自专栏BPM云

    源码方式安装go

    参考官方文档: https://golang.org/doc/install/source#environment 1) 下载 go1.4-bootstrap-20171003.tar.gz (注,其他版本 1.4编译可能会有问题) 2) 编译1.4 $ cd /path/to/go1.4/src $ GOOS=darwin GOARCH=amd64 GOROOT_BOOTSTRAP=/path/to/go1.4 /make.bash 3) 编译指定版本go 下载: $ git clone https://go.googlesource.com/go $ cd go $ git checkout go1.11.4 编译: $ cd /path/to/go1.11.4 $ .

    85820发布于 2019-03-13
  • 来自专栏跟我一起学 K8s

    syncmap.go 源码

    1 代码路径 golang源码:https://github.com/golang/go commit c62099cfac6b0fd46efbdab7205bb17597096472 这里使用最新的 master 代码进行学习,与时俱进; 提前安装好 go 的开发环境,下载好 go源码,如果这些都不会的话,这边建议先不着急学习源码go version go1.24.3 windows/amd64 \golang\go\src\sync\map.go sync 包是 Go 标准库中的一个基础并发原语包,提供了多种用于并发控制的结构和原语,比如互斥锁(Mutex)、等待组(WaitGroup)、一次性执行 2.1 src\sync\map.go type Map struct { // go vet 工具会检查当前的结构体实例是否被复制,编译器会忽略该字段 _ noCopy 下的 type Pointer[T any] struct {} 结构体,当前只需要了解,这个 Pointer 结构体提供原子操作 T 类型的值的方法,后续会在 atomic 源码进行详细的讲解;

    19420编辑于 2025-05-15
  • 来自专栏FunTester

    Go Channel【源码分析】

    本文是基于Go1.18.1源码的学习笔记。 Channel的底层源码Go1.14到现在的Go1.19之间几乎没有变化,这也是Go最早引入的组件之一,体现了Go并发思想: Do not communicate by sharing memory; 如果违反了这种定义,Go会让程序直接panic或阻塞,无法往后执行。 创建Chan Channel的创建会使用make关键字: ch := make(chan int, 10) 编译器编译上述代码,在检查ir节点时,根据节点op不同类型,进行不同的检查,源码如下: func (*ir.MakeExpr) return walkMakeChan(n, init) ...... } 编译器会将 make(chan int, 10) 表达式转换成 OMAKE 类型的节点

    41220编辑于 2023-08-04
  • 来自专栏JuneBao

    Go】RWMutex 源码分析

    读写锁相较于互斥锁有更低的粒度,它允许并发读,因此在读操作明显多于写操作的场景下能减少锁竞争的次数,提高程序效率。

    32820编辑于 2022-10-26
  • 来自专栏用户1175783的专栏

    # 如何调试go源码

    # 如何调试go源码 go版本:1.13.4 # 为什么要调试go源码 相信你有足够的理由让你尝试去调试go源码 # 网络上已有的调试教程 使用GDB,LLDB等工具命令行的方式调试 优点:工具强大, 支持调试多种程序,不限于go 缺点:go不同版本编译的程序,可能需要不同版本的GDB才能调试,命令行麻烦 使用dlv命令行,或者vscode,Goland等ide工具 优点:go官方推荐,更强到的调试功能 ,多种ide工具支持 缺点:调试无法进入runtime等私有方法 # 新调试教程 ​ 该尝试基于第二种调试方式,然后配合go tool 命令进入源码 # 需要做什么前期准备 1. 从上一条命令的产物中找对应源码行数的CALL指令 # 主要代码 0x008f 00143 (main.go:7) CALL runtime.fastrand(SB) 3. # 开启源码调试之旅 下面是一个简单的例子 ?

    1.9K21发布于 2020-05-25
  • 来自专栏呆呆熊的技术路

    如何修改go源码

    看了一篇文章改go源码重新编译, 虽然工作中没使用到但是好奇试下, 下面是最简单的修改 fmt 包的 Println 函数为例进行了修改, 1.下载源代码 项目地址: https://github.com /src/make.bash 如果遇到 make.bash must be run from $GOROOT/src, 则需要修改 GOROOT 指向项目源码目录即可, 再进入到src目录执行 make.bash 编译成功后则在src目录下生成bin目录 查看新编译 go 执行文件 3. 测试 调用 Println package main import "fmt" func main(){ fmt.Println("123") } 编译go源码 . /bin/go run main.go 注意这里 go 命令必须是我们刚编译成功的执行文件 output: hello 小宇 123

    1.7K40编辑于 2022-04-19
  • 来自专栏solate 杂货铺

    go 读取文件

    按字节读取 将整个文件读入内存 标准库提供了多种函数和实用程序来读取文件数据。 这意味着两个先决条件: 该文件必须适合内存 我们需要知道文件的大小,以便实例化一个足够大的缓冲区来保存它。 同时读取文件块 如果我们想要加快上面提到的块的处理呢?一种方法是使用多个go routines! 使用ReadAt与read是有一些区别的。 = nil { fmt.Println(err) return } filesize := int(fileinfo.Size()) // Number of go routines we need Add one more go routine if required. //如果没除尽,就要加1 if remainder := filesize % BufferSize; remainder ! concurrency++ } var wg sync.WaitGroup wg.Add(concurrency) for i := 0; i < concurrency; i++ { go

    2.7K20发布于 2019-07-22
  • 来自专栏coder修行路

    go 源码学习之---Tail 源码分析

    已经有两个月没有写博客了,也有好几个月没有看go相关的内容了,由于工作原因最近在做java以及大数据相关的内容,导致最近工作较忙,博客停止了更新,正好想捡起之前go的东西,所以找了一个源码学习 这个也是之前用 go写日志收集的时候用到的一个包 :github.com/hpcloud/tail, 这次就学习一下人家的源码,为了方便看这个代码,我将这个包进行了简化,也是用于方便理解,代码放到了:https://github.com inotify.go inotify_tracker.go watch.go tail.go: 这里包含着tail包的核心代码,主要的逻辑处理时在这个里面 watch: 这个包主要用于对文件的监控,用于将文件的变化通知到tail.如:文件修改了,文件删除了,文件内容追加了 tail.go 代码分析 在tail.go中主要有几下几个结构体: // Line 如果最开始的时候可以允许文件不存在,那么就会 在这里通过for循环一直等待,知道文件存在 再看看filechanges.go 文件,代码内容如下: type FileChanges struct {

    1.2K20发布于 2018-09-27
  • 来自专栏博思奥园

    Go(三)Go配置文件

    Go系列: Go(一)基础入门 Go(二)结构体 Go(三)Go配置文件 Go(四)Redis操作 熟悉使用SpringBoot的同学,再去使用Go之后,就会发现SpringBoot的配置文件是真的很方便 而在Go,他却不支持这样的做法,那么,我们只能自己实现类似于SpringBoot配置文件的做法了。 host: localhost port: 32306 username: root password: 123456 dbname: test max_idle_conn: 10 前提:引入依赖 go get gopkg.in/yaml.v2 需要做的就是将配置文件中的信息读取出来,并且绑定到相应的结构体当中。 /qq_41929184/article/details/119995581 [3] Go(三)Go配置文件: https://blog.csdn.net/qq_41929184/article/details

    1.5K40发布于 2021-10-27
  • 来自专栏Golang语言社区

    Go Channel 源码剖析

    代码版本 go1.9rc1,部分无关代码直接略去,比如 race detect,对应的代码中的 raceenabled。 go func() 向 nil channel 发送数据,也进入休眠。然后 Go 语言启动的时候还有一个goroutine sysmon 会一直检测系统的运行情况,比如 checkdead()。 6. select channel golang 中的 select 语句的实现,在 runtime/select.go 文件中,这篇文章并不打算看 select 的实现。 总结 Golang 的 channel 实现集中在文件 runtime/chan.go 中,本身的代码不是很复杂,但是涉及到很多其他的细节,比如 gopark 等,读起来还是有点费劲的。 8. 参考 Go Source Code 1.9rc1

    1.6K60发布于 2018-03-27
  • 来自专栏Go 技术

    Go singleflight 源码剖析

    前言 前面的一篇文章 Go singleflight:防缓存击穿利器 详细介绍 singleflight 包的使用,展示如何利用它来避免缓存击穿。 而本篇文章,我们来剖析 singleflight 包的源码实现和工作原理,探索单飞的奥秘。 准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。 这个方法使得 panicError 能够与 Go 的错误处理机制(如 errors.Is 和 errors.As)更好地集成。 if len(c.chans) > 0 { // 开一个新的协程去 panic,这个 panic 就不会被捕获了 go 小结 本文对 Go singleflight 的源码进行剖析,该包的主要作用是用于防止重复的请求,它确保给定的 key,函数在同一时间内只执行一次,多个请求共享同一结果。

    67841编辑于 2024-04-16
  • 来自专栏seth-shi的专栏

    Go 上传一个10M的文件, 真的会用10M的内存吗?

    查阅了资料, 找到一篇鸟哥关联的PHP文件上传源码分析(RFC1867) 但也没有说明具体原因, 于是看了一下Go文件上传的实现. Go Go中获取上传的文件方式很简单, 只要通过http.Request.FormFile方法即可拿到上传的文件 package main import ( "log" "net/http" ) , 取决于给定的maxMemory参数是否大于上传的文件大小(多个文件合计计算) 注意的是,表单参数值也受maxMemory限制,不过给了10M.意思是我们如果设置maxMemory=32M, 那么提交的 = nil { form.RemoveAll() } }() // Reserve an additional 10 MB for non-file parts. : Go中的Request Body只能读取一次

    61310编辑于 2023-12-18
领券