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

    Go?Docker?技术人快速学习新技术

    云计算,Go,中国程序员 上个月,Go 语言的创始人之一,Unix 老牌黑客罗勃·派克(Rob Pike)在新文章中提到,Go 语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言 ,中国程序员对 Go 语言的热爱完全超出了他们的想象。 中国是除了美国本土之外的另一个如此喜欢 Docker 技术的国家。 Go 语言和 Docker 已经成为新一代的云计算核心技术,对待这两项技术,你是在观望,还是要学习。 作为技术人员,如何识别什么样的新技术会是未来的趋势,这是这篇文章的缘起。 LAMP 对于 Go 语言,能清楚的看到 Go 语言容易上手,社区异常活跃 Go 语言有 Google 这个世界一流的技术公司在后面推动标准 Go 语言的杀手级应用是 Docker,而 Docker

    82070发布于 2018-03-02
  • 来自专栏算法之美

    Go语言,Docker和新技术

    的确如他们所说,Go 语言和 Docker 这两种技术已经成为新一代的云计算技术,而且可以看到其发展态势非常迅猛。而中国也成为了像美国一样在强力推动这两种技术的国家。 ,这些问题看来,对于 Go 语言和 Docker 这两种技术,在国内的技术圈中有相当大的一部分人和群体还在执观望或是不信任的态度。 一个方面,为什么 Go 语言和 Docker 会是新一代的云计算技术。 另一个方面,作为技术人员,我们如何识别什么样的新技术会是未来的趋势。 这两个问题是相辅相成的,所以我会把这两个问题揉在一起谈。 用这些标尺来量一下 Go 语言,我们可以清楚地看到: Go 语言容易上手; Go 语言解决了并发编程和写底层应用开发效率的痛点; Go 语言有 Google 这个世界一流的技术公司在后面; Go 语言的杀手级应用是 我进入 Go 和 Docker 的技术不能算早,但也不算晚,从 2012 年学习 Go,到 2013 年学习 Docker 到今天,我清楚地看到了这两种技术的生态圈发展过程。

    1K90发布于 2018-04-13
  • 来自专栏我的小碗汤

    go语言、docker和新技术

    的确如他们所说,Go 语言和 Docker 这两种技术已经成为新一代的云计算技术,而且可以看到其发展态势非常迅猛。而中国也成为了像美国一样在强力推动这两种技术的国家。 ,这些问题看来,对于 Go 语言和 Docker 这两种技术,在国内的技术圈中有相当大的一部分人和群体还在执观望或是不信任的态度。 一个方面,为什么 Go 语言和 Docker 会是新一代的云计算技术。 另一个方面,作为技术人员,我们如何识别什么样的新技术会是未来的趋势。 用这些标尺来量一下 Go 语言,我们可以清楚地看到: Go 语言容易上手; Go 语言解决了并发编程和写底层应用开发效率的痛点; Go 语言有 Google 这个世界一流的技术公司在后面; Go 语言的杀手级应用是 我进入 Go 和 Docker 的技术不能算早,但也不算晚,从 2012 年学习 Go,到 2013 年学习 Docker 到今天,我清楚地看到了这两种技术的生态圈发展过程。

    75020发布于 2018-08-22
  • 来自专栏FunTester

    Go 语言常见错误——优化技术

    Go 语言开发中,性能优化是确保程序高效运行的重要环节。然而,优化并非一蹴而就,开发者常因缺乏经验或误判而陷入误区,比如盲目优化、选错优化方向或忽视 Go 的并发特性。 Go 中,基本类型通常与其大小对齐,未对齐的数据会增加额外开销。 未充分利用 Go 诊断工具 Go 提供了强大的性能分析工具,包括: pprof:分析 CPU 和内存使用情况,定位瓶颈。 trace:查看程序执行细节,优化并发逻辑。 示例: go test -bench=. 忽视 Docker 对 Go 应用的影响 在 Docker 或 Kubernetes 环境中运行 Go 应用时,需注意以下问题: CPU 限频: Go 应用对 CFS(完全公平调度器)无感知,若超出 CPU

    25900编辑于 2025-04-16
  • 来自专栏腾讯云TI平台

    技术干货 | 理解 Go 内存分配

    本文简单介绍了 Go 的内存分配逻辑,介绍了 Go 内存划分模型。并以代码为例子,简要介绍了几种场景下 Go 内存分配逻辑。随后使用go build 命令验证了内存逃逸等相关验证。 在面对 sharing up 场景时,go 通常会将变量分配到堆中,如下图所示: 通过上面的分析,可以看到在面对被调用的函数返回一个指针类型时将对象分配到栈上会带来严重的问题,因此 Go 将变量分配到了堆上 查看 go help 可以看到 go build 其实是在调用 go tool compile。 go help build ... -gcflags '[pattern=]arg list' arguments to pass on each go tool compile invocation.... go tool /main.go:19:2: moved to heap: i./main.go:24:9: &Obj literal escapes to heap.

    63520编辑于 2022-01-27
  • 来自专栏腾讯云TI平台

    技术干货 | 理解 Go 内存分配

    本文简单介绍了 Go 的内存分配逻辑,介绍了 Go 内存划分模型。并以代码为例子,简要介绍了几种场景下 Go 内存分配逻辑。随后使用go build 命令验证了内存逃逸等相关验证。 使用 go build 命令确定内存逃逸情况 ---- 值得注意的是,Go 在判断一个变量或对象是否需要逃逸到堆的操作,是在编译器完成的;也就是说,当代码写好后,经过编译器编译后,会在二进制中进行特定的标注 查看 go help 可以看到 go build 其实是在调用 go tool compile。 go help build ... -gcflags '[pattern=]arg list' arguments to pass on each go tool compile invocation.... go tool /main.go:19:2: moved to heap: i./main.go:24:9: &Obj literal escapes to heap.

    6.9K40发布于 2021-08-13
  • Go技术专家进阶营 从代码开发到架构设计,开启Go技术专家之路

    Go技术专家之路:深入Goroutine调度器、内存模型与GC优化Go语言以其高效的并发模型和简洁的语法成为后端开发的首选语言之一。 要成为Go技术专家,需深入理解其底层机制,尤其是Goroutine调度器、内存模型和GC(垃圾回收)优化。本文将从这三个维度展开,结合原理、实现与优化策略,助你掌握Go语言的核心竞争力。 Goroutine的本质Goroutine是Go语言实现的轻量级线程,由Go运行时(runtime)管理,而非操作系统线程。 技术专家的路径深入原理:理解GPM调度模型、内存分配与GC机制。 持续学习:关注Go官方博客和社区动态(如Go 2提案)。Go语言的并发模型和内存管理是其核心优势,掌握这些底层机制后,你将能编写出高效、稳定且可扩展的后端服务,真正踏上Go技术专家之路。

    40110编辑于 2025-11-06
  • 来自专栏csico

    Go语言核心36讲(Go语言进阶技术八)--学习笔记

    Go语言核心36讲(Go语言进阶技术八)--学习笔记 14 | 接口类型的合理运用 前导内容:正确使用接口的基础知识 在 Go 语言的语境中,当我们在谈论“接口”的时候,一定指的是接口类型。 你可以在 demo32.go 文件中找到本问题的代码。 然后,Go 语言会用我上面提到的那个专用数据结构iface的实例包装这个dog2的值的副本,这里是nil。 虽然dog2的值是真正的nil,但是当我们把这个变量赋给pet的时候,Go 语言会把它的类型和值放在一起考虑。 也就是说,这时 Go 语言会识别出赋予pet的值是一个*Dog类型的nil。 Go 语言团队鼓励我们声明体量较小的接口,并建议我们通过这种接口间的组合来扩展程序、增加程序的灵活性。

    48930发布于 2021-10-28
  • 来自专栏安全学习记录

    免杀技术-go shellcode加载bypassAV

    go shellcode加载 bypass AV 在攻防实战中免杀技术尤为重要,站在巨人的肩膀上学习go shellcode免杀加载的方法 相关代码打包至github https://github.com 哪怕只是请求百度这种正常的域名 var ( get = exec.Command("cmd", "/c", "curl", "http://www.baidu.com") ) 那我们换一种方式,使用 Go allocSize:allocSize] copy(buffer, message) // 执行 shellcode syscall.Syscall(mem, 0, 0, 0, 0) } go 编译参数 go编译参数免杀影响 参数 参数说明 免杀影响 备注 -race 竞态检测编译 很大 加了race参数,文件更大比原始的还大,曾经不错,但如今效果很差 -ldflags ‘-s -w’ 去除编译信息 现在基本都被杀软拦截,不推荐使用,增加查杀率 garble -tiny -literals -seed=random build -ldflags="-w -s -H windowsgui" -race go-sc.go

    3K21编辑于 2023-04-27
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术七)--学习笔记

    Go 语言摄取了面向对象编程中的很多优秀特性,同时也推荐这种封装的做法。从这方面看,Go 语言其实是支持面向对象编程的,但它选择摒弃了一些在实际运用过程中容易引起程序开发者困惑的特性和规则。 这里强调一下,Go 语言中根本没有继承的概念,它所做的是通过嵌入字段的方式实现了类型之间的组合。 在我面试过的众多 Go 工程师中,有很多人都在说“Go 语言用嵌入字段实现了继承”,而且深信不疑。 要么是他们还在用其他编程语言的视角和理念来看待 Go 语言,要么就是受到了某些所谓的“Go 语言教程”的误导。每当这时,我都忍不住当场纠正他们,并建议他们去看看官网上的解答。 但是,Go 语言会适时地为我们进行自动地转译,使得我们在这样的值上也能调用到它的指针方法。

    50301发布于 2021-10-25
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术六)--学习笔记

    从今天开始,我会开始向你介绍使用 Go 语言进行模块化编程时,必须了解的知识,这包括几个重要的数据类型以及一些模块化编程的技巧。首先我们需要了解的是 Go 语言的函数以及函数类型。 前导内容:函数是一等的公民 在 Go 语言中,函数可是一等的(first-class)公民,函数类型也是一等的数据类型。这是什么意思呢? 你可以看看我在 demo27.go 文件中声明的函数类型calculateFunc和函数genCalculator。 即使对于像 Go 语言这种静态类型的编程语言而言,我们在定义闭包函数的时候最多也只能知道自由变量的类型。 你需要记住 Go 语言是怎样鉴别一个函数的,函数的签名在这里起到了至关重要的作用。 函数是 Go 语言支持函数式编程的主要体现。

    79801发布于 2021-10-24
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术十二)--学习笔记

    我今天要讲的if语句、for语句和switch语句都属于 Go 语言的基本流程控制语句。它们的语法看起来很朴素,但实际上也会有一些使用技巧和注意事项。 本问题中的代码都被放在了命令源码文件 demo41.go 的main函数中的。为了专注问题本身,本篇文章中展示的编程题会省略掉一部分代码包声明语句、代码包导入语句和main函数本身的声明部分。 毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作。 我们需要多加注意的往往是那些隐藏在 Go 语言规范和最佳实践里的细节。 这些细节其实就是我们很多技术初学者所谓的“坑”。 笔记源码 https://github.com/MingsonZheng/go-core-demo

    60001发布于 2021-11-02
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术十四)--学习笔记

    由于在 Go 语言中实现接口是非侵入式的,所以我们可以做得很灵活。比如,在标准库的net代码包中,有一个名为Error的接口类型。 这是 Go 语言标准库给予我们的优秀范本,非常有借鉴意义。 不过要注意,如果你不想让包外代码改动你返回的错误值的话,一定要小写其中字段的名称首字母。 // 并且,这会影响到当前Go程序中所有的此类判断。 // 所以,一定要避免这样做! 我在这里提出了两个在 Go 语言标准库中使用很广泛的方案,即:立体的错误类型体系和扁平的错误值列表。 之所以说错误类型体系是立体的,是因为从整体上看它往往呈现出树形的结构。 笔记源码 https://github.com/MingsonZheng/go-core-demo

    41901发布于 2021-11-07
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术五)--学习笔记

    顺便说一下,我们在调用SendInt函数的时候,只需要把一个元素类型匹配的双向通道传给它就行了,没必要用发送通道,因为 Go 语言在这种情况下会自动地把双向通道转换为函数所需的单向通道。 另外,我们在 Go 语言中还可以声明函数类型,如果我们在函数类型中使用了单向通道,那么就相等于在约束所有实现了这个函数类型的函数。 除此之外,Go 语言还有一种专门为了操作通道而存在的语句:select语句。 知识扩展 问题 1:select语句与通道怎样联用,应该注意些什么? 这个例子以及前面那个例子都可以在 demo24.go 文件中被找到。你应该运行下,看看结果如何。 上面这些注意事项中的一部分涉及到了select语句的分支选择规则。 我把与以上规则相关的示例放在 demo25.go 文件中了。你一定要去试运行一下,然后尝试用上面的规则去解释它的输出内容。

    57001发布于 2021-10-22
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术二)--学习笔记

    那么 Go 语言的链表是什么样的呢? Go 语言的链表实现在标准库的container/list代码包中。 Go 语言标准库中很多结构体类型的程序实体都做到了开箱即用。这也是在编写可供别人使用的代码包(或者说程序库)时,我们推荐遵循的最佳实践之一。 实际上,Go 语言的切片就起到了延迟初始化其底层数组的作用,你可以想一想为什么会这么说的理由。延迟初始化的缺点恰恰也在于“延后”。 它们都是 Go 语言原生的数据结构,使用起来也都很方便. 不过,你的集合类工具箱中不应该只有它们。这就是我们使用链表的原因。

    65201发布于 2021-10-19
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术三)--学习笔记

    这个问题你可以在 Go 语言规范中找到答案,但却没那么简单。它的典型回答是:Go 语言字典的键类型不可以是函数类型、字典类型和切片类型。 这样的键值也不会让 Go 语言编译器报错,因为从语法上说,这样做是可以的。 Go 语言会用被查找键的哈希值与这些哈希值逐个对比,看看是否有相等的。如果一个相等的都没有,那么就说明这个桶中没有要查找的键值,这时 Go 语言就会立刻返回结果了。 当我们试图在一个值为nil的字典中添加键 - 元素对的时候,Go 语言的运行时系统就会立即抛出一个 panic。你可以运行一下 demo19.go 文件试试看。 我以 Go 语言规范为起始,并以 Go 语言源码为依据回答了这些问题。认真看了这篇文章之后,你应该对字典中的映射过程有了一定的理解。

    96801发布于 2021-10-20
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术八)--学习笔记

    你可以在 demo32.go 文件中找到本问题的代码。 然后,Go 语言会用我上面提到的那个专用数据结构iface的实例包装这个dog2的值的副本,这里是nil。 在 Go 语言中,我们把由字面量nil表示的值叫做无类型的nil。这是真正的nil,因为它的类型也是nil的。 虽然dog2的值是真正的nil,但是当我们把这个变量赋给pet的时候,Go 语言会把它的类型和值放在一起考虑。 也就是说,这时 Go 语言会识别出赋予pet的值是一个*Dog类型的nil。 Go 语言团队鼓励我们声明体量较小的接口,并建议我们通过这种接口间的组合来扩展程序、增加程序的灵活性。

    53401发布于 2021-10-27
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术十六)--学习笔记

    这与go语句有些类似,一个defer语句总是由一个defer关键字和一个调用表达式组成。 这里存在一些限制,有一些调用表达式是不能出现在这里的,包括:针对 Go 语言内建函数的调用表达式,以及针对unsafe包中的函数的调用表达式。 顺便说一下,对于go语句中的调用表达式,限制也是一样的。 其实也并不复杂,在defer语句每次执行的时候,Go 语言会把它携带的defer函数及其参数值另行存储到一个链表中。 下面该你出场了,我在 demo51.go 文件中编写了一个与本问题有关的示例,其中的核心代码很简单,只有几行而已。 笔记源码 https://github.com/MingsonZheng/go-core-demo

    58701发布于 2021-11-09
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术十五)--学习笔记

    21 | panic函数、recover函数以及defer语句 (上) 在本篇,我要给你展示 Go 语言的另外一种错误处理方式。 package main func main() { s1 := []int{0, 1, 2, 3, 4} e5 := s1[5] _ = e5 } Go 程序,确切地说是程序内嵌的 Go 语言运行时系统 在 Go 语言中,因 panic 导致程序结束运行的退出状态码一般都会是2。 这里的最外层函数指的是go函数,对于主 goroutine 来说就是main函数。但是控制权也不会停留在那里,而是被 Go 语言运行时系统收回。 深入地了解此过程,以及正确地解读 panic 详情应该是我们的必备技能,这在调试 Go 程序或者为 Go 程序排查错误的时候非常重要。

    52401发布于 2021-11-08
  • 来自专栏DotNet NB && CloudNative

    Go语言核心36讲(Go语言进阶技术九)--学习笔记

    这应该就是我们在编写 Go 程序的过程中,用得最频繁的“指针”了。 从传统意义上说,指针是一个指向某个确切的内存地址的值。 我们刚刚只提到了其中的一种情况,在 Go 语言中还有其他几样东西可以代表“指针”。其中最贴近传统意义的当属uintptr类型了。该类型实际上是一个数值类型,也是 Go 语言内建的数据类型之一。 再来看 Go 语言标准库中的unsafe包。unsafe包中有一个类型叫做Pointer,也代表了“指针”。 别忘了,我在讲结构体类型及其方法的时候还说过,我们可以在一个基本类型的值上调用它的指针方法,这是因为 Go 语言会自动地帮我们转译。 除此之外,我们都知道,Go 语言中的++和--并不属于操作符,而分别是自增语句和自减语句的重要组成部分。

    65401发布于 2021-10-28
领券