Golang面试题解析(三)

21.编译执行下面代码会出现什么? package main var( size :=1024 max_size = size*2 ) func main() { println(size,max_size) } 解析 考点:变量简短模式 变量简短模式限制: 定义变量同时显式初始化 不能提供数据类型 只能在函数内部使用 结果: syntax error: unexpected := 22.下面函数有什么问题? package main const cl = 100 var bl = 123 fu...阅读全文

2017-09-10 23:03:16 梦朝思夕
阅读:9442 评论:1

Golang面试题解析

最近在很多地方看到了golang的面试题,看到了很多人对Golang的面试题心存恐惧,也是为了复习基础,我把解题的过程总结下来。 面试题 1. 写出下面代码输出内容。 package main import ( "fmt" ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func(...阅读全文

2017-09-12 11:49:12 梦朝思夕
阅读:16528 评论:16

Golang面试题解析(四)

这是我整理的第四份Golang的面试题了,如果有同学遇到更好的题目欢迎给我反馈。 31. 算法 在utf8字符串判断是否包含指定字符串,并返回下标。 "北京天安门最美丽" , "天安门" 结果:2 解答: import ( "fmt" "strings" ) func main(){ fmt.Println(Utf8Index("北京天安门最美丽", "天安门")) fmt.Println(strings.Index("北京天安门最美丽", "男")) fmt.Println(strings.I...阅读全文

2018-03-30 12:33:08 梦朝思夕
阅读:1967 评论:0

Golang面试题解析(四)

31. 算法 在utf8字符串判断是否包含指定字符串,并返回下标。"北京天安门最美丽" , "天安门"结果:2 解答: import ( "fmt" "strings" ) func main(){ fmt.Println(Utf8Index("北京天安门最美丽", "天安门")) fmt.Println(strings.Index("北京天安门最美丽", "男")) fmt.Println(strings.Index("", "男")) fmt.Println(Utf8Index("12ws北...阅读全文

2018-03-30 13:57:28 梦朝思夕
阅读:2729 评论:0

Golang面试题解析(五)

41.执行下面的代码发生什么? package main type Param map[string]interface{} type Show struct { *Param } func main() { s := new(Show) s.Param["RMB"] = 10000 } 考点:map初始化 map需要初始化后才能使用。 编译错误:invalid operation: s.Param["RMB"] (type *Param does not support indexing) 4...阅读全文

2018-09-17 11:42:59 梦朝思夕
阅读:836 评论:0

Golang range 的一些坑

先举个栗子: package main import ( "fmt" ) type Foo struct { Bar string } func main() { list := []Foo{Foo{"bar1"}, Foo{"bar2"}, Foo{"bar3"}} for i, v := range list { v.Bar = "change" + string(i) } fmt.Println(list) } 我们期望的结果是 [{change1} {change2} {change3}...阅读全文

2018.10.18 17:05 youmisun
阅读:3245 评论:0

当 Go 遇上了 Lua

在 GitHub 玩耍时,偶然发现了 gopher-lua ,这是一个纯 Golang 实现的 Lua 虚拟机。我们知道 Golang 是静态语言,而 Lua 是动态语言,Golang 的性能和效率各语言中表现得非常不错,但在动态能力上,肯定是无法于 Lua 相比。那么如果我们能够将二者结合起来,就能综合二者各自的长处了(手动滑稽。 在项目 Wiki 中,我们可以知道 gopher-lua 的执行效率和性能仅比 C 实现的 bindings 差。因此从性能方面考虑,这应该是一款非常不错的虚拟机方...阅读全文

2019-03-13 07:34:38 Jiahonzheng
阅读:13657 评论:0

golang绑定lua脚本

1,go执行 go get github.com/Shopify/go-lua 2,创建lua对象: luaState = lua.NewState()lua.OpenLibraries(luaState) 3, 加载lua文件:if err := lua.DoFile(luaState, "test.lua"); err != nil {panic(err)} 4, 加载 lua函数luaState.Global("add") 5, 传递参数给lua函数luaState.PushInteger...阅读全文

2019-04-07 09:23:52 jingrongcheng
阅读:1349 评论:0

《Go语言101》:一本在线Golang电子书

大致是从2016年7月开始打算写一本罗列各种Go编程中的细节的小册子。 但没想到在随后的两年半中,这本原计划中的小册子演变成了一本近500页专注于Go语言语法和语义的书。 原本的三个月的写作计划也拖成了两年半的一场马拉松。 真累了,另外也耽误了太多事儿。实在没有心力再准备排版和操心出版纸质书了。 有兴趣学习Go语言的,请点击以下链接: 本书官网(在线阅读版,有可能间歇性被墙) 本书github项目(可用来开启本地阅读版) 离线版下载(目前包括pdf和epub格式) 觉得此书对学习Go语言有帮助的...阅读全文

阅读:7485 评论:1

Golang中的CPU占满100%及解决方案

有一个流媒体适配服务,出现了`CPU`开销很大的问题,一个服务把`CPU`资源占满了,导致其他服务无法正常工作。 下面来详细记录发现`bug`和解决的流程。 # 发现CPU开销很大 扫描发现,是垃圾回收导致 `CPU` 使用上升 : ``` Time: Mar 22, 2019 at 5:52pm (CST) Duration: 1mins, Total samples = 1.43mins (142.57%) Entering interactive m...阅读全文

2019-05-27 00:10:24 OctopusLian
阅读:10934 评论:1

大话图解golang map

前言 网上分析golang中map的源码的博客已经非常多了,随便一搜就有,而且也非常详细,所以如果我再来写就有点画蛇添足了(而且我也写不好,手动滑稽)。但是我还是要写,略略略,这篇博客的意义在于能从几张图片,然后用我最通俗的文字,让没看过源码的人最快程度上了解golang中map是怎么样的。 当然,因为简单,所以不完美。有很多地方省略了细节问题,如果你觉得没看够,或者本来就想了解详细情况的话在文末给出了一些非常不错的博客,当然有能力还是自己去阅读源码比较靠谱。 那么下面我将从这几个方面来说明,你...阅读全文

2019.06.10 17:00* LinkinStar
阅读:2212 评论:0

Golang的协程调度器原理及GMP设计思想?

一、Golang“调度器”的由来? (1) 单进程时代不需要调度器 我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是“单进程时代” 一切的程序只能串行发生。 5-单进程操作系统.png 早期的单进程操作系统,面临2个问题: 1.单一的执行流程,计算机只能一个任务一个任务处理。 2.进程阻塞所带来的CPU时间浪费。 那么能不能有多个进程来宏观一起来执行多个任务呢? 后来操作系统就具有了最早的并发...阅读全文

2020-02-25 22:33:23 刘丹冰Aceld
阅读:5714 评论:0

面试:反转链表

题目:反转链表 要求:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 反转链表算是面试中比较常见的一个关于链表的题,整体上难度不大,但如果你能掌握多种的解法,往往可以让面试官眼前一亮 注意提醒一点,在面对链表的面试题时,建议多画一下图理解一下 解法1:简单双指针 通过双指针,遍历 head 指针,通过中间变量,逐步指向新的 ...阅读全文

2020-03-04 16:32:36 若鱼治水
阅读:2460 评论:0

[典藏版]Golang调度器GMP原理与调度全分析

该文章主要详细具体的介绍Goroutine调度器过程及原理,可以对Go调度器的详细调度过程有一个清晰的理解,花 费4天时间作了30+张图(推荐收藏),包括如下几个章节。 第一章 Golang调度器的由来 第二章 Goroutine调度器的GMP模型及设计思想 第三章 Goroutine调度场景过程全图文解析 一、Golang“调度器”的由来? (1) 单进程时代不需要调度器 我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,知道一个程序运...阅读全文

阅读:1153 评论:0

Golang中的Defer必掌握的7知识点

在用Golang开发的时候,defer这个语法也是必备的知识,但是我们除了知道他是在一个函数退出之前执行,对于defer是否还有其他地方需要注意的呢。 本文整理的defer的全场景使用情况,部分场景源自网络,加上自己的额外观点和分析,完成了这份defer的7个隐性必备知识点。 提纲如下: 知识点1: defer的执行顺序 知识点2:defer与return谁先谁后 知识点3:函数的返回值初始化与defer间接影响 知识点4:有名函数返回值遇见defer情况 知识点5:defer遇见panic 知...阅读全文

阅读:2423 评论:2

指针的详细讲解

指针是一个代表着某个内存地址的值, 这个内存地址往往是在内存中存储的另一个变量的值的起始位置. Go语言对指针的支持介于Java语言和 C/C++ 语言之间, 它既没有像Java那样取消了代码对指针的直接操作的能力, 也避免了 C/C++ 中由于对指针的滥用而造成的安全和可靠性问题. ## 指针地址和变量空间 Go语言保留了指针, 但是与C语言指针有所不同. 主要体现在: - 默认值: nil. - 操作符 `&` 取变量地址, `*` 通过指针访问目标对象. -...阅读全文

2020-04-15 22:52:51 Conan_1996
阅读:701 评论:1

【golang】性能优化

内存管理 在栈中创建对象比在堆中创建对象性能高,少用new来创建对象,多用object{}创建,如果需要创建大量相同临时对象,使用sync.pool减少gc压力。 原因:因为heap上的变量需要gc,而stack上的自动释放,如果在函数里面创建许多生命周期很短的heap变量,会不断触发gc。阅读全文

阅读:540 评论:1

Go 语言踩坑记——panic 与 recover

题记   Go 语言自发布以来,一直以高性能、高并发著称。因为标准库提供了 http 包,即使刚学不久的程序员,也能轻松写出 http 服务程序。   不过,任何事情都有两面性。一门语言,有它值得骄傲的有点,也必定隐藏了不少坑。新手若不知道这些坑,很容易就会掉进坑里。《 Go 语言踩坑记》系列博文将以 Go 语言中的 panic 与 recover 开头,给大家介绍笔者踩过的各种坑,以及填坑方法。 初识 panic 和 recover panic   panic 这个词,在英语中具有恐慌、恐慌的...阅读全文

2020年04月15日 初一公主奶爸
阅读:882 评论:1

25. 学习 Go 协程:详解信道/通道

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 go...阅读全文

2020-06-03 13:32:34 Python编程时光
阅读:434 评论:0

昨天那个在for循环里append元素的同事,今天还在么?

昨天那个在for循环里append元素的同事,今天还在么?问题package main import "fmt" func main() { s := []int{1,2,3,4,5} for _, v:=range s { s =append(s, v) fmt.Printf("len(s)=%v\n",len(s)) } }这个代码会造成死循环吗?怎么答不会死循环,for range其实是golang的语法糖,在循环开始前会获取切片的长度 len(切片),然后再执行len(切片)次数的循环。...阅读全文

阅读:808 评论:0