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

Golang map

前些天看了DAVE CHENEY大神的直播。里面讲到了go的map实现。做个笔记 (我用的是go1.13 貌似大神直播时候用的是还没发布的1.15 所以本文中的代码都是1.13中的。与1.15略有差异) compile time rewriting: 左边对map的操作实际上被编译成了右边的调用 v := m["key"] -> runtime.mapaccess1(m, "key", &v) v, ok := m["key"] -> runtime.mapaccess2(m, "key", &v, &ok) m["key"] = 9001 -> runtime.mapinsert(m, "key", 9001) delete(m, "key") -> runtime.mapdelete(m...阅读全文

博文 2020-05-12 11:35:48 郭老汉

软件结构很重要!嵌入式C语言修炼之道

模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了>相对论),C语言模块化程序设计需理解如下概念:(1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;(2) 某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;(3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;(4) 永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外...阅读全文

博文 2019-01-17 17:14:57 wangzijuan

【Golang 基础】Go 语言的 Map

Go 语言中的Map   Map 是一个无序的键值对数据集合,通过 key 快速检索数据。 通过 map[keyType]valueType 格式声明 Map; package basic import "fmt" func DeclaratMap(){ // 声明一个空的 map m1 := map[int]string{} fmt.Println(m1) // map[] // 声明一个 map 并赋初始值 m2 := map[int]string{ 0: "Java", 1: "C#", 2: "Python", 3: "Golang" } fmt.Println(m2) // map[3:Golang 0:Java 1:C# 2:Python] } 通过 make(map[keyTy...阅读全文

博文 2019-03-28 02:34:38 爱写作的程序猿

Go的接口

有意思的接口规则:自动实现 Go语言也支持接口,但是它的接口规则很有意思: 一个struct不需要显示声明它要实现的接口,只要实现了接口中规定的所有方法,那么就自动实现了相应的接口了。 所以正常情况下,如果有如下一个struct type A struct { } func (*A) func Foo() {} func (*A) func Bar(i int) int { return i } 那么它就自动同时实现了下面三个接口 type IFoo interface { Foo() } type IBar interface { Bar(i int) int } type IFooBar interface { IFoo IBar } 所以我们可以进行如下的赋值: var a *A = ...阅读全文

博文 2019-07-10 03:32:40 千寻客

13. Maps

13. Maps 什么是 map ? map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。 如何创建 map ? 通过向 make 函数传入键和值的类型,可以创建 map。make(map[type of key]type of value) 是创建 map 的语法。 personSalary := make(map[string]int) 上面的代码创建了一个名为 personSalary 的 map,其中键是 string 类型,而值是 int 类型。 map 的零值是 nil。如果你想添加元素到 nil map 中,会触发运行时 panic。因此 map 必须使用 make 函数初始化。 package main import ( "fmt"...阅读全文

博文 2019-08-29 11:32:54 泷汰泱

Go入门系列(六)I/O

目录: 一、终端I/O 二、文件I/O 一、终端I/O Go语言的终端I/O操作在基础包上有封装了多种,我们以fmt包为例: 如果为单次输入,可使用Scanln,如一次输入多个变量,可使用Scanf。 func main() { var name string var age int fmt.Print("请输入姓名:") _, _ = fmt.Scanln(&name) fmt.Print("请输入年龄:") _, _ = fmt.Scanln(&age) fmt.Printf("您的姓名为:%s,您的年龄为:%d",name,age) } #输出 请输入姓名:rabbit 请输入年龄:18 您的姓名为:rabbit,您的年龄为:18 大家可能注意到与网上常见的教程不一样,这里使用了两个忽...阅读全文

博文 2020-03-17 05:32:50 RabbitMask

Go随笔——函数的用法

定义函数包含函数名,行参列表,函数体和返回值列表,使用func进行声明,函数无参数或返回值时则形参列表和返回值列表省略func name(parameters) returns { }形参列表需要描述参数名及参数类型,所有形参为函数块局部变量,返回值需要描述返回值类型举例 1.无参 无返回值 func sayHello() { fmt.Println("hello world") } 2.有参 无返回值 func say(name string, name2 string) { fmt.Println("hello world:", name, name2) } 3.有参 有返回值 func add (a int, b int) int { return a + b } func main(...阅读全文

博文 2020-05-25 09:33:16 wujunqi1996

GoLang 学习笔记 - 函数(Function)

函数是基本的代码块,用于实现一个特定功能(Go 程序中必须要有一个 main() 函数)。   你可以通过函数来划分不同功能,逻辑上每个函数只执行指定的任务。函数声明会告诉 Go 编译器函数的名称,返回类型,和参数。   GoLang 标准库提供了多种可直接调用的内置函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度,如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。 函数定义   GoLang 语言函数定义格式如下: func function_name( [parameter list] ) [return_types] { // 函数体 } 函数定义解析: func:函数声明语句 function_name:函数名称,函数名和参数列...阅读全文

博文 2019-07-22 19:32:42 凉丶心园

go基础系列:简介

1.Go简介 Go语言是编译型、静态类型的类C的语言,并带有GC(垃圾收集器,garbage collection)。这意味着什么? 另外,Go是一种非常严格的语言,它几乎总是要求我们"以标准答案去答题",在其它语言可以容忍的不规范编码方式在Go语言中几乎都会抛异常。例如导入了包却没有使用这个包,Go不会去编译它并报错。再例如,定义了一个变量但从来没用过,也会报错。 初学Go的时候,这可能是件无比的苦恼事情,但习惯了之后,编写出来的程序自然是无比规范的。这也正是Go和不少语言的区别:其它语言编码、调试阶段可能很快,但维护和优化阶段可能会非常长;而Go的编码周期可能稍长,但编码完成后几乎都是足够优化的,维护和优化周期足够短。 编译型 编译表示的是将你所写的源代码转换为低层次的语言,例如汇编语言...阅读全文

博文 2018-11-23 09:06:24 f-ck-need-u

golang[32]-区块链-base58

base58Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号。设计Base58主要的目的是:避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。不使用"+“和”/"的原因是非字母或数字的字符串作为帐号较难被接受。没有标点符号,通常不会被从中间分行。大部分的软件支持双击选择整个字符串。base58编码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545...阅读全文

博文 2019-02-21 15:35:52 jonson_jackson

Go 每日一库之 validator

简介 今天我们来介绍一个非常实用的库——validator。validator用于对数据进行校验。在 Web 开发中,对用户传过来的数据我们都需要进行严格校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。 快速使用 先安装: $ go get gopkg.in/go-playground/validator.v10 复制代码后使用: package main import ( "fmt" "gopkg.in/go-playground/validator.v10" ) type User struct { Name string `validate:"min=6,max=10"` Age int `validate:"min=1,max=100"` } f...阅读全文

博文 2020-04-06 00:34:22 darjun

Go语言学习笔记03--流程控制循环语句与函数

1.三目运算符 特别注意!在go语言中不存在三目运算符这个东西! 不是不推荐使用,就是完全不存在! 2.循环结构 go语言中有且仅有一种循环结构,就是for循环结构。不存在while或者dowhile这样的循环结构。 for 表达式1;表达式2;表达式3{ 循环体 } 循环的结构与标识符含义几乎与传统c语言相同。 (1)表达式1:循环变量赋初值 (2)表达式2:循环能够继续的循环条件 (3)表达式3:循环变量向着循环结束的方向变化 eg: for num:=0; num<10; num++{ fmt.Println(num); } 注意:go语言中的变量作用域为块级作用域,而不是函数级作用域! 因此定义在for循环内部的变量,其作用域仅能够在for循环内部生效, 因此它们在for循环之外是不...阅读全文

博文 2018-11-30 17:02:11 FrankAdd

Blog.1 database.sql.driver

在事务操作中,要求事务的各个阶段都使用一个Conn连接。在连接被关闭之前,还需要执行rollback操作。 文章翻译了Go源码下database.sql.driver的接口规范,具体实现可以查看源码。 // 包driver定义了数据驱动要实现的接口,具体的实现会在包sql中用到。 // // 更多还是使用包sql中的代码 package driver import ( "context" "errors" "reflect" ) // Value必须是一个驱动可以处理的值、NamedValueChecker接口能够处理的类型 // 或者下面这些类型的实例 // // int64 // float64 // bool // []byte // string // time.Time // //...阅读全文

博文 2019-07-17 23:02:41 渐行渐远

Container - 为 Go语言而生的运行时依赖注入容器

Container 是一款为 Go 语言开发的运行时依赖注入库。Go 语言的语言特性决定了实现一款类型安全的依赖注入容器并不太容易,因此 Container 大量使用了 Go 的反射机制。如果你的使用场景对性能要求并不是那个苛刻,那 Container 非常适合你。 并不是说对性能要求苛刻的环境中就不能使用了,你可以把 Container 作为一个对象依赖管理工具,在你的业务初始化时获取依赖的对象。 使用方式 go get github.com/mylxsw/container 要创建一个 Container 实例,使用 containier.New 方法 cc := container.New() 此时就创建了一个空的容器。 你也可以使用 container.NewWithContext(...阅读全文

博文 2020-05-25 18:32:43 mylxsw

Golang学习笔记-函数

Go函数定义格式如下: func function_name( [parameter list] ) [return_types] { 函数体 } 例如: func add(n1, n2 int) int{ return n1 + n2 } Go函数可以返回多个值,这个时候返回值类型要用括号括起来,例如: func div(n1, n2 int) (int,int){ return n1 / n2, n1 % n2 } Go函数可以给返回值命名,这个时候即使只有一个返回值也要用括号括起来,例如: func add(n1, n2 int) (result int){ result= n1 + n2 return } func div(n1, n2 int) (result int,remain...阅读全文

博文 2019-09-27 23:33:00 aside section ._1OhGeD

golang 基础(9)函数

square-gopher.png 函数 函数是由函数名,参数,返回值和函数体所组成。 func add(a, b int) int {} 定义函数并且复习一下之前的 switch 语句 func eval(a, b int,op string) int { switch op { case "+": return a + b case "-": return a - b case "*": return a * b case "/": return a / b default: panic("unsupported operation: " + op) } } 在 go 语言中 { 需要 bar() 在同一行不言就会报错 func bar() //报错 { } .\funtions.go:...阅读全文

博文 2019-03-17 20:34:42 zidea

golang-101-hacks(18)——map类型访问

Map是一种指向哈希表的引用类型,可以使用map构造一个“键值”类型的数据库,这在实际编程中非常高效。例如,下面的代码是统计切片中每个元素的总数: package main import ( "fmt" ) func main() { s := []int{1, 1, 2, 2, 3, 3, 3} m := make(map[int]int) for _, v := range s { m[v]++ } for key, value := range m { fmt.Printf("%d occurs %d times\n", key, value) } } 运行结果 3 occurs 3 times 1 occurs 2 times 2 occurs 2 times 此外,根据Go spe...阅读全文

博文 2019-06-09 11:02:40 羊羽share

golang语言defer特性详解.md

[TOC] golang语言defer特性详解 defer语句是go语言提供的一种用于注册延迟调用的机制,它可以让函数在当前函数执行完毕后执行,是go语言中一种很有用的特性。由于它使用起来简单又方便,所以深得go语言开发者的欢迎。但是,真正想要使用好这一特性,却得对这一特性深入理解它的原理,不然很容易掉进一些奇怪的坑里还找不到原因。接下来,我们将一起来探讨defer的使用方式,使用场景及一些容易产生误解、混淆的规则。 什么是defer 首先我们来看下defer语句的官方解释 A "defer" statement invokes a function whose execution is deferred to the moment the surrounding function retu...阅读全文

博文 2019-07-12 21:32:43 木鸟飞鱼

Go语言核心之美 4.1-函数声明

函数有以下几个优点:可以把一系列语句打包成一个程序单元;可以把大的工作分解为小的任务,这些任务可以让不同程序员在不同时间、不同地点独立完成;一个函数可以对用户隐藏实现细节。这些优点,让函数变成了程序不可或缺的最重要的部分之一。 在此章之前,我们已经见过很多函数了,现在是时候彻底讨论函数的特性了。本章用的例子是一个网络爬虫,也是web搜索引擎中负责抓取网页的组件,他们会根据抓取到的网页中的链接继续去抓取该链接指向的页面,这个例子可以让我们学习递归函数、匿名函数、错误处理及函数的很多其它特性。 函数声明包含了函数名,可省略的参数列表、返回值列表以及函数体:func name(parameter-list) (result-list) { body } 参数列表描述了参数名和参数类型,这些参数是函...阅读全文

博文 2017-10-27 20:59:22 erlib

7.Go语言基础之函数

1.函数 1.1函数定义 Go语言中定义函数使用fun关键字,具体格式为 func 函数名(参数)(返回值){ 函数体 } 其中: 1.函数名:由字母,数字,下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名不能重名。 2.参数:参数由变量名和变量类型组成。 3.返回值:可以只写返回值类型,多个返回值必须用()包裹,并用,分隔。 4.函数体:实现指定功能的代码块。 定义一个求两个数和的函数: func intSum(x int, y int) int { return x + y } 函数的参数和返回值是可选的,我们也可以不传参也没有返回值。 func sayHello() { fmt.Println("Hello vita") } 1.2函数的调用 定义了函数后,可以通过 函...阅读全文

博文 2019-12-12 12:33:10 DevOperater

defer 的一些用法和猜测

以前的代码中,基本上只使用了 defer 作为防御程序 panic 退出的手段,没有仔细考虑过对返回值的影响。今天有同事提到: 如果执行过程中发生 panic,defer函数 recover() != nil的情况下,未命名的返回值的函数会返回什么呢? 之前并没有没有想过这个问题,猜想应该是返回该类型的默认值,试了一下果然如此。 func fooA() float64 { defer func() { if err := recover(); err != nil { } }() *(*float64)(nil) = 0.1 // panic return 1.0 } fooA() 返回0。 那么如果 defer 函数返回值和上层函数一致,会不会替换掉返回值呢?(会就有鬼了) func fo...阅读全文

博文 2019-08-22 02:32:46 SpikeQin

golang-nsq系列(一)--初识

nsq 最初是由 bitly 公司开源出来的一款简单易用的分布式消息中间件,它可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息。 nsq 它具有以下特性: 分布式。它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。 易于扩展。它支持水平扩展,没有中心化的消息代理(Broker),内置的发现服务让集群中增加节点非常容易。 运维方便。它非常容易配置和部署,灵活性高。 高度集成。现在已经有官方的Golang、Python和JavaScript客户端,社区也有了其他各个语言的客户端库方便接入,自定义客户端也非常容易。 1. 首先到官方文档看用法: https://nsq.io/overview/quick_start.html q...阅读全文

博文 2019-08-19 02:32:44 热爱coding的稻草

C++服务端面试准备(1)C++相关

声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作参考,如有错误,博主强烈希望您指出。如果您是某个知识点的原创博主,如有需要,可联系本人加上链接。本文内容会根据博主所需进行更新,希望大家多多关照。 面向对象 把数据及对数据的操作方法放在一起,作为一个相互依存的整体 OOP——面向对象的编程,OOD——面向对象的设计,OOA——面向对象的分析 三大特征: 1.封装 将对象的属性和方法封装到一个独立单元中,并且隐藏对象的属性和方法,仅对外提供公共访问方式,将变化隔离,便于使用。 2.继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法。继承是多态的前提。 3.多态 多态是面向对象的最后一个主要特征,它本身主要分为两个方面: 方法的多态性:重载与覆写 重载:...阅读全文

博文 2020-04-07 18:32:46 DX3906

defer 的一些用法和猜测

以前的代码中,基本上只使用了 defer 作为防御程序 panic 退出的手段,没有仔细考虑过对返回值的影响。今天有同事提到: 如果执行过程中发生 panic,defer函数 recover() != nil的情况下,未命名的返回值的函数会返回什么呢? 之前并没有没有想过这个问题,猜想应该是返回该类型的默认值,试了一下果然如此。 func fooA() float64 { defer func() { if err := recover(); err != nil { } }() *(*float64)(nil) = 0.1 // panic return 1.0 } fooA() 返回0。 那么如果 defer 函数返回值和上层函数一致,会不会替换掉返回值呢?(会就有鬼了) func fo...阅读全文

博文 2019-09-03 20:32:43 秦川

Golang错误和异常处理的正确姿势

序言 错误和异常是两个不同的概念,非常容易混淆。很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误。从表面上看,一切皆错误的思路更简单,而异常的引入仅仅增加了额外的复杂度。 但事实并非如此。众所周知,Golang遵循“少即是多”的设计哲学,追求简洁优雅,就是说如果异常价值不大,就不会将异常加入到语言特性中。 错误和异常处理是程序的重要组成部分,我们先看看下面几个问题: 错误和异常如何区分? 错误处理的方式有哪几种? 什么时候需要使用异常终止程序? 什么时候需要捕获异常? ... 如果你对这几个问题的答案不是太清楚,那么就抽一点时间看看本文,或许能给你一些启发。 face-to-exception.png 基础知识 错误指的是可...阅读全文

博文 2018-12-24 18:31:34 u013589865

Golang学习笔记-定时器

Timer 使用time.NewTimer()创建Timer后,经过其指定的时间后,它会向其管道发送当前时间。time.After()也是创建Timer,不过返回值不是Timer而是其管道。 package main import ( "fmt" "sync" "time" ) func main(){ //5秒后将当前时间发送给管道 timer:=time.NewTimer(time.Second*2) if t,ok:=<-timer.C;ok{ fmt.Println(t) } //After()内部调用NewTimer()然后返回其管道 timeChan:=time.After(time.Second*2) if t,ok:=<-timeChan;ok{ fmt.Println(t)...阅读全文

博文 2019-12-27 21:33:09 土豆吞噬者

Golang学习——interface接口学习(二)

Golang接口断言学习 一.类型断言 二.接口断言 1.if else结构 接口断言2.switch结构 接口断言 在Golang中,空接口 interface{}没有定义任何函数,因此Golang 中所有类型都实现了空接口。当一个函数的形参是interface{},那么在函数中,需要对形参进行断言,从而得到它的真实类型。 一.类型断言 在学习接口断言之前,先了解一下类型断言,其实接口断言也是在判断类型。 类型断言,通过它可以做到以下几件事情: 检查 i 是否为 nil检查 i 存储的值是否为某个类型 通常有两种方式: 第一种: t := i.(T) 复制代码 这个表达式可以断言一个接口对象i里不是 nil,并且接口对象i存储的值的类型是 T,如果断言成功,就会返回值给t,如果断言失败,就...阅读全文

博文 2020-05-07 11:36:19 相守之路

在 MaxCompute UDF 中运行 Scipy

摘要: 新版 MaxCompute Isolation Session 支持 Python UDF。也就是说,Python UDF 中已经可以跑二进制包。刚才以 Scipy 为例踩了一下坑,把相关的过程分享出来。 新版 MaxCompute Isolation Session 支持 Python UDF。也就是说,Python UDF 中已经可以跑二进制包。刚才以 Scipy 为例踩了一下坑,把相关的过程分享出来。 下载 Scipy 包并上传资源 首先,从 PyPI 或其他镜像下载 Scipy 包。你需要下载后缀为“cp27-cp27m-manylinux1_x86_64.whl”的包,其他的包会无法加载,包括名为“cp27-cp27mu”的包。以下的截图来自 https://...阅读全文

A Tour of Go: Basics 1

Packages, variables and functions Packages packages中,以大写字母开头的name是exported name,当import package时,只有exported name可以被从外部访问。 Functions 同type的连续参数可以只在最后指明type。函数可以有多个返回值。 func swap(x, y string) (string, string) { return y, x } Go支持有name的返回值: 函数定义时就定义好返回变量名,在函数内操作返回变量。 用naked return语句返回。 func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x retur...阅读全文

博文 2018-10-07 17:35:15 zxdevops

07GO语言函数

go语言函数 1、函数定义 2、参数 3、返回值 4、匿名函数 5、闭包 6、递归 7、延迟调用 8、错误处理 函数特性: Go 函数 不支持 嵌套、重载和默认参数 函数无需声明原型、支持不定长度变参、多返回值、命名返回值参数 支持匿名函数、闭包 函数也可以作为一种类型使用 函数是一等公民,可作为参数传递 函数传递是值的拷贝或者是指针的拷贝,区别在于会不会影响原始值 不定长变参,如果传入slice,一定要用 ...展开传入 1、函数定义 定义函数使用关键字 func,且左大括号不能另起一行 func A(a int,b string) int{ // 参数 a, b 名在前,类型在后 // 如果只有一个返回值,直接写个int就行。表示返回值是一个int型 } func A(a int,b s...阅读全文

博文 2019-03-01 16:34:45 杨旭

golang编程常见问题

1. gitlab/github提交非项目文件(如编译后的二进制文件). 使用.gitignore来忽略提交的文件2. 使用字符串拼接JSON问题举例: responseString := "{ \"code\" : \"0\" , \"data\": { \"username\": " + username + " }}" return []byte(responseString) 如上代码块,因username从外部传入,有JSON注入风险,最佳方法为:使用json.Marshal结构体封装返回值 // JSONStyle return http.data like json style type JSONStyle struct { Code string `json:"code"` ...阅读全文

博文 2019-08-08 10:33:10 道闻

如何才能写出正确的程序?

平时我们写程序的时候,总是莫名其妙的出现Bug,一鼓作气的写完一个接口后,经常被队友喷「你怎么一回事?结果与预期不一致啊」 老脸一红,然后一个人藏在角落调试半天,才发现原来是某一个边界条件没处理好,导致Bug重重,今天我们从二分查找算法,来聊聊如何写出正确的程序 像我们熟知的二分查找算法,在1946年就被提出来了,但是到了1962年才出现了完全没有Bug的二分查找法 二分查找法的思想并不复杂,我们很多人张口就能来,但是为什么间隔了辣么多年,才诞生完全没有Bug的二分查找算法呢? 二分查找算法,难就难在边界条件的处理上,我们经常写出Bug,往往也是出现在边界条件没处理好而导致 因为学习一个算法的思想是很简单的,但是让思想落地,写出完全没有Bug的二分查找,却并不是一件容易的事情 所以我们在写程...阅读全文

博文 2019-06-08 23:32:43 闹闹吃鱼

Go 语言 2019 调查报告发布(内含 Go 语言图谱下载)

<关注公众号,回复 Go 即可下载清晰知识图谱> 对 Go 语言感兴趣但又不知从何学起的同学,可以参考一下 Go 语言系列文章: 为什么你要选择 Go? Go 面向失败编程 带着服务器编程金刚经走进 2020 年 敢问路在何方? Go 官方博客近日公布了 2019 年 Go 语言调查报告。本次调查收到的回复达到 10,975 份,约为去年的两倍。这些受访者的反馈意见将被选取用于改进 Go 语言的发展。 以下是 2019 年度的调查报告摘要: 此调查中,受访者的受众特征与 Stack Overflow 的受访者相似,因此这些结果在某种程度上可以代表更广泛的 Go 开发人员; 大多数受访者每天都要用到 Go 语言,并且该数字在逐年上升; Go 的使用仍集中在技术公司,但它同时也被用于越来越多的行...阅读全文

博文 2020-04-26 10:34:38 阿里巴巴云原生

golang语言渐入佳境[31]-错误处理

12345678910111213//1、创建error对象的方式1 err1 := errors.New("自己创建的错误!") fmt.Println(err1.Error()) fmt.Println(err1) fmt.Printf("err1的类型:%T\n", err1) //*errors.errorString fmt.Println("-----------------") //2、创建error对象的方式2 err2 := fmt.Errorf("错误的类型%d", 10) fmt.Println(err2.Error()) fmt.Println(err2) fmt.Printf("err2的类型:%T\n", err2) //*errors.errorString f...阅读全文

博文 2019-02-21 15:35:51 jonson_jackson

240.搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ] 给定 target = 5,返回 true。 给定 target = 20,返回 false。 思路 1.根据此二维矩阵给出的性质,可以从二维数组的右上角开始搜索,若target大于当前元素,我们的检索方向就向下,若小于,我们的检索方向就向左,若检索出界,还没找到结果,直...阅读全文

博文 2020-01-01 02:32:55 youzhihua

Go 译文之 defer、panic 和 recover

作者:Andrew Gerrand翻译:https://blog.golang.org/defer-panic-and-recoverGo有和其他语言一样常见的流程控制语句:if, for, switch, goto。同时也有go表达式来实现在不同的goroutine中运行代码(并发)。而今天我们将讨论的是go的异常控制流程:defer、panic和recover。Deferdefer语句会将函数推入到一个列表中。同时列表中的函数会在return语句执行后被调用。defer常常会被用来简化资源清理释放之类的操作。举个例子,我们来观察下下面这个函数,它的主要功能是打开两个文件并将一个文件的内容拷贝到另一个文件:func CopyFile(dstName, srcName string) (wr...阅读全文

博文 2019-06-09 09:52:37 波罗学​

Go语言入门(四)Map&函数

map&函数 map类型 map的申明和定义 map是一个key-value的数据结构,是引用类型的数据结构,需要初始化 初始化的时候容量可以定义,也可以不定义 map必须初始化才能使用,否则会panic var a map[key的类型]value的类型 func defineMap() { var user map[string]int = make(map[string]int) user["abc"] = 38 fmt.Printf("user:%v\n",user) a := make(map[string]int) a["jack"] = 1001 a["handsome"] = 1002 a["shark"] = 1003 //根据key获取value fmt.Printf("...阅读全文

博文 2020-03-17 21:33:15 wx5b285b48ed74e

defer ,panic,recover

defer的执行顺序 多个defer出现的时候,它是一个“栈”的关系,也就是先进后出。一个函数中,写在前面的defer会比写在后面的defer调用的晚。 package main import "fmt" func main() { defer func1() defer func2() defer func3() } func func1() { fmt.Println("A") } func func2() { fmt.Println("B") } func func3() { fmt.Println("C") } //输出结果:C B A defer和return的先后顺序 return之后的语句先执行,defer后的语句后执行。 package main import "fmt" f...阅读全文

博文 2020-04-26 13:33:11 普朗tong

23. 一篇文章 说清楚 Go语言里的函数

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。 在 Go 语言中,函数可以分为两种: 带有名字的普通函数 没有名字的匿名函数 由于 Go语言是编译型语言,所以函数编写的顺...阅读全文

博文 2020-05-30 10:32:46 Python编程时光

golang reflect 反射包

基础类型描述 Type Kind type Kind uint 基础类型常量 const ( Invalid Kind = iota Bool Int Int8 Int16 Int32 Int64 Uint Uint8 Uint16 Uint32 Uint64 Uintptr Float32 Float64 Complex64 Complex128 Array Chan Func Interface Map Ptr Slice String Struct UnsafePointer ) func String 获取类型字符名称 func (k Kind) String() string intType := reflect.Int typeName := intType.String() /...阅读全文

博文 2019-07-30 03:32:39 直立猿

golang面试基础系列-range的坑(三)

在 Go 中,for range 用来遍历 slice, map, chan 等,使用频率很高,但遍历虽好用,却很容易踩坑,且看 demo 如下: 1. 只有一个返回值时,则第一个参数是 index package main import "fmt" func main() { s := []string{"a", "b", "c"} // 只有一个返回值:则第一个参数是index for v := range s { fmt.Println(v) } // 两个返回值 for i, v := range s { fmt.Println(i, v) } } 输出结果如下: 0 1 2 ============= 0 a 1 b 2 c 2. 遍历 map 为随机序输出,slice 为索引序输...阅读全文

博文 2019-07-21 20:02:37 热爱coding的稻草

Golang 学习笔记:函数

函数 在Go语言中,函数可以分为具名函数和匿名函数,包级函数一般是具名函数,具名函数是匿名函数的一种特例。函数也可以看成是封装好一系列语句的代码块,用以提高代码的模块度和复用率。 Go语言的函数属于“一等值,(first-class)”,满足以下特点: 函数本身可以被当成值传递 函数本身可以满足接口 支持匿名函数和闭包 函数调用 需求:定义两个函数,实现两数相加和两数相乘的功能,允许被main函数外部调用。 //定义一个小马函数实现两数相加功能 func Xiaoma(a int,b int)int{ sum := a + b fmt.Println("小马a+b:",sum) return sum //当有返回值语句时,谁调用就返回给谁 } //定义一个佳豪函数实现两数相乘功能 func ...阅读全文

博文 2020-06-03 13:32:43 sunlingbot

defer 链如何被遍历

去年开始写文章的第一篇就是关于 defer,名字比较文艺:《Golang 之轻松化解 defer 的温柔陷阱》,还被吐槽了。因为这篇文章,到《Go 夜读》讲了一期。不过当时纯粹是应用层面的,也还没有跳进 Go 源码这个大坑,文章看着比较清新,也没有大段的源码解析。 自从听了曹大在《Go 夜读》分享的 Go 汇编,以及研读了阿波张的 Go 调度器源码分析的文章后,各种源码、汇编满天飞…… 上次欧神写了一篇《Go GC 20 问》,全文也没有一行源码,整体读下来很畅快。今天这篇也来尝试一下这种写法,不过,我们先从一个小的主题开始:defer 链表是如何被遍历并执行的。 关于 defer 的源码分析文章,网络上也有很多。不过,很少有能完全说明白这个话题的,除了阿波张的。 我们知道,为了在退出函数前...阅读全文

博文 2020-03-23 21:46:11 qcrao-2018

Golang中defer、return、返回值之间执行顺序的坑

载自:https://studygolang.com/articles/4809 Go语言中延迟函数defer充当着 cry...catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱! 先来运行下面两段代码: A. 无名返回值的情况 package main import ( "fmt" ) func main() { fmt.Println("return:", a()) // 打印结果为 return: 0 } func a() int { var i int defer func() { i++ fmt.Println("defer2:", i) // 打印结...阅读全文

博文 2020-05-19 15:32:47 大菜狗RookieDog

让我们一起啃算法----搜索插入位置

搜索插入位置( Search-Insert-Position ) 题干: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1: 输入: [1,3,5,6], 5 输入: 输出: 2示例 3: 输入: 输入: [1,3,5,6], 7 输入: 输出: 4示例 4: 输入: 输入: [1,3,5,6], 0 输入: 输出: 0来源:力扣 这题主要应用 二分查找 的思路来解题,题目是比较简单的,但是 二分查找 这个思路还是蛮重要的。 解题思路 一般使用 二分查找 都需要先对原数组进行排序,题中给到的数组是已经排序的,因此这一步可以省去。 二分查找 思路比较简单,首先初始化三个指针: left ...阅读全文

博文 2020-05-20 17:33:02 三斤和他的朋友们

图解kubernetes服务打散算法的实现源码

在分布式调度中为了保证服务的高可用和容灾需求,通常都会讲服务在多个区域、机架、节点上平均分布,从而避免单点故障引起的服务不可用,在k8s中自然也实现了该算法即SelectorSpread, 本文就来学习下这个算法的底层实现细节 1. 设计要点 1.1 zone与node zone即代表一个区域,node则是一个具体的节点,而该打散算法的目标就是将pod在zone和node之间进行打散操作 1.2 namespace namespace是k8s中进行资源隔离的实现,同样的筛选也是如此,在筛选的过程中,不同namespace下面的pod并不会相互影响 1.3 计数与聚合 SelectorSpread算法是scheduler中优先级算法的一种,其实现了优先级算法的map/reduce方法,其中ma...阅读全文

Go关键字defer的特性

Go里面,流程控制语句中有一个defer的关键字,翻译过来就是延迟的意思。下面用代码说话。 func deferFunc() { defer fmt.Println("后打印") fmt.Println("先打印") } defer在函数执行完毕之后,才会执行,所以,我们经常在释放资源或异常处理等需要收尾的场景下会用到defer。 不过defer也有一些“坑”,大家需要注意一下。 func printNumbers() { for i := 0; i < 5; i++ { defer func() { fmt.Print(i) // 输出55555 }() } } 上面例子中,defer是在for循环全部执行完毕之后才会执行,所以i已经变成了5,正确做法是下面这样 func printNum...阅读全文

博文 2020-02-26 15:32:40 iuoui

Go 语言学习笔记-文件操作

打开、创建文件 创建文件 Create file, err := os.Create("F:/futureWeb/goLang/testFile.go") 参数:name。打开文件的路径:绝对路径、相对路径 目录分隔符:/ 文件不存在,则创建。文件存在,则将文件内容清空。 打开文件 Open 参数:name。打开文件的路径:绝对路径、相对路径 以只读方式打开文件。文件不存在,则打开失败。 f, err := os.Open("F:/futureWeb/goLang/testFile.go") 打开文件 OpenFile f, err := os.OpenFile("F:/futureWeb/goLang/testFile.go", os.O_RDONLY, 6) 参数1:name。打开文件的...阅读全文

博文 2020-04-12 19:32:42 梁坤同学

Lite语言——从入门到放弃(二)

github.com/kulics/lite​这次我们来看看 Lite 的函数和结构设计。 函数声明 在 Lite 中,函数声明的格式为 # id(->) {} # function(->) { # 函数逻辑 # a = 1 + 1 } 这是一个没有参数也没有返回值的函数。 函数的调用方式和其它大部分语言一样。 # 调用 # function() 参数 函数的参数定义与定义变量的方式一样,写在函数定义括号箭头前面部分,多个参数用逗号隔开。 # 声明参数 # processInt(x int, y int ->) { a = x + y } # 调用传参 # processInt(1, 2) 返回值 函数可以输出返回值,这样就可以将处理后的数据返回给调用者去使用。 函数的返回值定义与参数定义相...阅读全文

博文 2019-07-23 13:02:37 kulics

Go 每日一库之 sqlc

简介 在 Go 语言中编写数据库操作代码真的非常痛苦!database/sql标准库提供的都是比较底层的接口。我们需要编写大量重复的代码。大量的模板代码不仅写起来烦,而且还容易出错。有时候字段类型修改了一下,可能就需要改动很多地方;添加了一个新字段,之前使用select *查询语句的地方都要修改。如果有些地方有遗漏,可能就会造成运行时panic。即使使用 ORM 库,这些问题也不能完全解决!这时候,sqlc来了!sqlc可以根据我们编写的 SQL 语句生成类型安全的、地道的 Go 接口代码,我们要做的只是调用这些方法。 快速使用 先安装: $ go get github.com/kyleconroy/sqlc/cmd/sqlc 复制代码当然还有对应的数据库驱动: $ go get githu...阅读全文

博文 2020-05-02 12:35:18 darjun