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

Deno 并不是下一代 Node.js

这几天前端圈最火的事件莫过于 ry(Ryan Dahl) 的新项目 deno 了,很多 IT 新闻和媒体都用了标题:“下一代 Node.js”。这周末读了一遍 deno 的源码,特意写了这篇文章。长文预警(5000字,11图)。 0. 为什么开发 Deno? 这是我上周做的一张图,介绍了 JavaScript 的发展简史。刚才修改了一下,添加了对 Node.js 和 Deno 发布时间的标注。Node.js 和 Deno 分别是 Ryan Dahl 在 2009 年和 2018 年,基于当年最新的前端技术开发的非浏览器 JavaScript 运行时。 Ryan Dahl 开发 deno 并不是因为 “just for fun”,也不是为了取代 node。下面慢慢解释。 1. 目前 deno ...阅读全文

博文 2018-06-04 11:34:38 justjavac

Go 系列教程 —— 29. Defer

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 29 篇。 ## 什么是 defer? `defer` 语句的用途是:含有 `defer` 语句的函数,会在该函数将要返回之前,调用另一个函数。这个定义可能看起来很复杂,我们通过一个示例就很容易明白了。 ## 示例 ```go package main import ( "fmt" ) func finished() { fmt.Println("Finished finding largest") } func largest(nums []int) { defer finished() fmt.Println("Started finding largest") max := ...阅读全文

博文 2018-03-30 23:05:21 heyulong

golang中的格式化输入输出

【简介】 fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf。格式“占位符”衍生自 C,但比 C 更简单。 【打印】 占位符: [一般] %v 相应值的默认格式。在打印结构体时,“加号”标记(%+v)会添加字段名 %#v 相应值的 Go 语法表示 %T 相应值的类型的 Go 语法表示 %% 字面上的百分号,并非值的占位符 [布尔] %t 单词 true 或 false。 [整数] %b 二进制表示 %c 相应 Unicode 码点所表示的字符 %d 十进制表示 %o 八进制表示 %q 单引号围绕的字符字面值,由 Go 语法安全地转义 %x 十六进制表示,字母形式为小写 a-f %X 十六进制表示,字母形式为大写 A-F %U Unicode 格式:U+1234...阅读全文

博文 2016-06-01 11:00:01 xiaoyida11

golang 函数一 (定义、参数、返回值)

对于GoLang函数的定义或者说理解:函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你的代码。另外为了更好的重用你的代码,可以把重复性的任务抽象成一个函数。Go语言中使用关键词func来定义一个函数,并且左花括号不能另起一行,比如:func hello(){ //左花括号不能另起一行 println("hello") }Go语言中定义和应用函数时,有如下需要注意的点: 函数无须前置声明 不支持命名嵌套定义,支持匿名嵌套 函数只能判断是否为nil,不支持其它比较操作 支持多返回值 支持命名返回值 支持返回局部变量指针 支持匿名函数和闭包func hello() { //左括号不能另起...阅读全文

博文 2017-02-10 11:05:00 100018

go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。 1、常规传递 使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响原来实参的值。 例如: package main import ( "fmt" ) func swap(a int, b int) { var temp int temp = a a = b b = temp } func main() { x := 5 y := 10 swap(x, y) fmt.Print(x, y) } 输出结果:5 10 传递给swap的是x,y的值得拷贝...阅读全文

博文 2016-07-03 02:00:01 chase-wind

go interface的一点心得

先看golanger.com关于interface的说明 *Interfaces in Go provide a way to specify the behavior of an object: if something can do this, then it can be used here* 翻译下来就是: interfaces 用来指定一个object的的行为,如果该object能够执行该行为,这个接口就可以替代这个对象。 文档中举了一个例子: fmt包中的Fprintf方法 `func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)...阅读全文

Go语言中的多维数组传递

在Go语言中,当多维数组直接作为函数实参进行参数传递的时候,会有很大的限制性,比如除第一维数组的其他维数需要显式给出等;此时可以使用多维切片来作为参数传递: type s1 []int type s2 []s1 剑指offer一书面试题3: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下的顺序排序。完成一个函数,输入二维数组和要查找的数,判断该数是否存在于二维数组中。 代码: package main import ( "errors" "fmt" "os" ) type s1 []int type s2 []s1 var searchErr error = errors.New("search error") func main() { a := s2{ s1{1...阅读全文

博文 2016-05-13 08:00:02 air_upc

golang学习的点点滴滴:指针,地址,形参,实参

学习Go语言的过程中,会发现它的指针,地址,还有函数参数跟平常我们理解的不太一样. 上代码: package main //学习指针用法 import ( "fmt" ) func main() { var i int; // i 的类型是int型 var p *int; // p 的类型是[int型的指针] i = 1; // i 的值为 1; p = &i; // p 的值为 [i的地址] fmt.Printf("i=%d;p=%d;*p=%d\n",i,p,*p); *p = 2; // *p 的值为 [[i的地址]的指针](其实就是i嘛),这行代码也就等价于 i = 2 fmt.Printf("i=%d;p=%d;*p=%d\n",i,p,*p); i = 3; // 验证我的想法 ...阅读全文

博文 2014-10-04 19:27:24 亓斌哥哥

第二届Gopher大会即将在北京举行,就等你来

去年我们在上海举行了第一届Gopher大会,那一次大会参会人员在500人左右,会后大家都觉得这是参加过的最实在,最物超所值,干货最多的大会。这里有去年参会的人员写的一些回顾,大家可以体会当时的情形 - http://thinkandcode.info/gopherchina2015can-hui-ji-lu/ - http://fuxiaohei.me/2015/4/29/gopher-china-2015.html - http://life.leanote.com/post/gopher-china-2015-my-golang-way 说了那么多,回到我们今年这一届的大会,因为北京可以说是中国的互联网中心,这里有着大量的Go使用者,而且我去年也答应了很多北京的同学,...阅读全文

golang fmt.printf I/O 函数格式化说明

[TOC] 说明 fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf格式“占位符”衍生自 C,但比 C 更简单 常用格式化输出 fmt.Printf("start at number %v, end count %v\n",start, count) 注意参数输出数量和占位符数量要一致 IDEA开发快速格式化模板 使用IDEA开发可以配置自定义代码模板快速生成 Settings -> Editor -> Live Templates 选中 go 语言展开 选则增加一条 Abbreviation 填写 fpf Description 填写 print fmt format Template text fmt.Printf("$END$",$VAR$) Appli...阅读全文

博文 2017-03-05 19:34:39 泛原罪

golang 格式化输入输出

fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf。格式“占位符”衍生自 C,但比 C 更简单。 【打印】 占位符: [一般] %v 相应值的默认格式。在打印结构体时,“加号”标记(%+v)会添加字段名 %#v 相应值的 Go 语法表示 %T 相应值的类型的 Go 语法表示 %% 字面上的百分号,并非值的占位符 [布尔] %t 单词 true 或 false。 [整数] %b 二进制表示 %c 相应 Unicode 码点所表示的字符 %d 十进制表示 %o 八进制表示 %q 单引号围绕的字符字面值,由 Go 语法安全地转义 %x 十六进制表示,字母形式为小写 a-f %X 十六进制表示,字母形式为大写 A-F %U Unicode 格式:U+1234,等同于 ...阅读全文

博文 2015-12-22 12:00:05 zhangxing__

Go语言的指针 & *

Go语言保留着C中值和指针的区别,但是对于指针繁琐用法进行了大量的简化,引入引用的概念。所以在Go语言中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误。Go语言的指针,基本上只剩下用于区分 byref 和 byval 语义。 运算符就是简单的 & 和 * 一个取地址、一个解析地址。 package main import( "fmt" ) func main(){ var i int // i 的类型是int型 i=1 // i 的值为 1; var p *int // p 的类型是[int型的指针] p=&i // p 的值为 [i的地址] fmt.Printf("i=%d;p=%d;*p=%d\n",i,p,*p) *p=2 // *p 的值为 [[i的地址]的指针] (其实就是...阅读全文

博文 2014-10-29 14:40:07 ghj1976

腾讯云360元 6年时长最新完整方案

腾讯云新用户认证学生身份可享受1核CPU、2G内存、1M带宽的云服务器10元/月的价格。 同时买1年(120元)送4个月,特价续费两年(120元*2),共支出360元。 得到3年的特价学生云服务器,然后在控制面板降配,会获得5年左右的时长。 具体步骤: 1、准备一个未购买过腾讯云的新账号,新注册QQ也可。 2、进入参团链接:https://cloud.tencent.com/act/campus/group/detail?group=20561 3、登陆腾讯云账号,进行实名认证(这个带参团性质,貌似需要参团才可以参与) 4、进行学生认证,(随便填就可以):https://cloud.tencent.com/act/campus/student_ver...阅读全文

go 协程与主线程强占运行

最近在学习了go 语言 , 正好学习到了 协程这一块 ,遇到了困惑的地方.这个是go语言官方文档 . 在我的理解当中是,协程只能在主线程释放时间片后才会经过系统调度来运行协程,其实正确的也确实是这样的,但是我遇到了协程强占主线程的一个问题,经过帮助,现在已经了解.废话不多说,先看代码 1 package main 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 func main() { 9 go say("world") 10 say("hello") 11 /* 12 fmt.Println("---------------1") 13 14 a := []int{7, 2, 8, -9, 4, 0} 15 fmt.Println("===", a[:len(...阅读全文

博文 2017-02-17 15:00:14 qo2yycc2

腾讯云360元 6年时长最新完整方案, 亲测

腾讯云新用户认证学生身份可享受1核CPU、2G内存、1M带宽的云服务器10元/月的价格。 同时买1年(120元)送4个月,特价续费两年(120元*2),共支出360元。 得到3年的特价学生云服务器,然后在控制面板降配,会获得5年左右的时长。 具体步骤: 1、准备一个未购买过腾讯云的新账号,新注册QQ也可。 2、进入参团链接:https://cloud.tencent.com/act/campus/group/detail?group=21901 3、登陆腾讯云账号,进行实名认证(这个带参团性质,貌似需要参团才可以参与) 4、进行学生认证,(随便填就可以):https://cloud.tencent.com/act/campus/student_ver...阅读全文

C语言、python、go、C#版本选择排序

C语言版本 #include void swap(int *a,int *b) { *a=*a+*b; *b=*a-*b; *a=*a-*b; } int getminkey(int *arr,int start,int len) { int k = start,i, minkey=arr[start]; for(i = start + 1; i < len ;i++) { if(arr[i] < minkey) { minkey=arr[i]; k=i; } } return k; } void select_sort(int *arr,int len) { int i; for(i = 0;i < len ; i++) { int k = getminkey(arr,...阅读全文

博文 2015-06-17 23:00:40 zhouqinghe24

腾讯云360元 6年时长完整方案

腾讯云新用户认证学生身份可享受1核CPU、2G内存、1M带宽的云服务器10元/月的价格。 同时买1年(120元)送4个月,特价续费两年(120元*2),共支出360元。 得到3年的特价学生云服务器,然后在控制面板降配,会获得5年左右的时长。 具体步骤: 1、准备一个未购买过腾讯云的新账号,新注册QQ也可。 2、进入参团链接:https://cloud.tencent.com/act/campus/group/detail?group=16924 3、登陆腾讯云账号,进行实名认证(这个带参团性质,貌似需要参团才可以参与) 4、进行学生认证,(随便填就可以):https://cloud.tencent.com/act/campus/student_ver...阅读全文

[杭州][数澜科技][梦想小镇] 招聘 Node.js 工程师,急得就像大四了还没找到女朋友

公司官网:https://www.dtwave.com 招聘职位: 资深 /高级 /初级 Node.js 开发工程师 职位要求: 1、熟练掌握 JavaScript 语言特性,深刻理解 Node.js 后端技术栈的用武之地。 2、一年以上 Node.js 相关开发经验,熟悉 Koa、Express 等 web 框架。 3、基于 Node.js 开发过的产品至少使用到 MySQL、Redis、MongoDB、ZooKeeper 中的一项或多项。 4、对代码质量,技术文档有强迫症般的自我要求。 4、良好的沟通能力和团队协作能力,乐于探索和分享新技术。 加分项: 1、长期有任何形式的技术经验输出习惯,如:博客,开源项目,技术分享大会等。 2、熟悉其他优秀的编程语言,如 Python、Golang ...阅读全文

博文 2017-08-24 15:34:50 干了这瓶妇炎洁

棒棒哒的Go Interface

棒棒哒的Go Interface 原文:Interface: the awesomesause of Go 译文出处:酱油蔡的酱油坛 让我们稍微重温下。我们知道基本的数据类型,使用它们,并且学会创建复合数据类型。我们还知道一些基本的流程控制结构。所以我们能基于这些编程实现功能。 接下来我们发现函数实际上也是一种数据,它们是它们自己的值并且也有类型。我们继续学习方法。我们使用方法写函数来操作数据,然后继续实现功能性的数据类型。 这一章我们将进入Go的下一个境界。我们将学习对象的一些天生的洪荒之力来做一些实际事情。 废话少说,直奔主题! Interface是什么? 简而言之,Interface就是一组方法的集合。我们使用Interface指定一个给定对象的行为。例如前面章节提到的,Student...阅读全文

博文 2016-09-15 18:00:02 xingwangc2014

go语言中数组

数组是go语言内置的一种数据类型,对于该类型,将通过几下几点进行展开 数组声明和初始化 数组有以下几种声明初始化的方式 // 方法1 var arr [5]int // 方法2 var arr = [5]int{1,2,3,4,5} // 方法3 arr := [5]int{1,2,3,4,5} // 方法4 arr := [...]int{1,2,3,4,5} // 特定赋值 arr := [5]int{1:2,4:3} 数组使用 数组赋值 var arr = [5]int{} arr[1]=3 数组取值 var arr = [5]int{5,4,3,2,1} num := arr[1] 数组遍历 // for 遍历 var arr = [5]int{1,2,3,4,5} for i :=...阅读全文

博文 2018-08-12 16:34:59 暮雨

腾讯云+校园服务器,360元3年4个月

1.注册新用户,老用户可以直接注册个新号,使用绑定银行卡的手机认证即可。 2.点击**参团链接**:有效期到3月9号10点:https://cloud.tencent.com/act/campus/group/detail?group=15533 3.购买1年,付120元,可送4个月 4.可续费两年,付款240 5.最后可以花**360元**购买到**3年4个月**的服务器时长。 6.**配置**是**1核2G内存** ...阅读全文

golang类和结构体

golang结构体和类 golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。 类声明 type Poem struct { Title string Author string intro string } 这样就声明了一个类,其中没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。注意: p1 := &Poem{ "zhangsan", 25, []string{"lisi", "wangwu"}, } 使用中如果包含数组,结构体的实例化需要加上类型如上如果intro的类型是[]string...阅读全文

博文 2017-12-07 07:04:42 卢春风

golang深入源代码系列之三:自动生成代码

这是系列博文的第三篇,第一篇在此:[golang深入源代码之一:AST的遍历](http://baixiaoustc.com/2019/01/14/2019-01-14-golang-code-inspector-1-all-case),第二篇在此:[golang深入源代码系列之二:反向调用关系的生成](http://baixiaoustc.com/2019/01/17/2019-01-17-golang-code-inspector-2-reverse-call-graph/)。 # 问题描述 第一篇讲了怎么遍历一个项目的源代码,第二篇讲了怎么构建内部某个package的某个函数`package.XYZ()`的反向调用关系(一颗多叉树)。那么问题来了,如果我们想在`package.XYZ(...阅读全文

博文 2019-04-18 09:26:06 baixiaoustc

golang中方法的receiver为指针和不为指针的区别

前言 最近看网站有同学提问golang中方法的receiver为指针和不为指针有什么区别,在这里我以简单易懂的方法进行说明,帮助刚刚学习golang的同学. 方法是什么 其实只要明白这个原理,基本就能理解上面提到的问题. 方法其实就是一种特殊的函数,receiver就是隐式传入的第一实参. 举个例子 type test struct{ name string } func (t test) TestValue() { } func (t *test) TestPointer() { } func main(){ t := test{} m := test.TestValue m(t) m1 := (*test).TestPointer m1(&t) } 是不是很简单就明白了呢?现在我们来加入...阅读全文

博文 2017-06-22 15:06:08 pinecone

go语言的参数传递

对于一门语言,在函数传参时,存在两种方式,一种是值传递,一种是引用传递,那么go语言是怎么进行参数传递的值传递是传递的变量的副本,引用传递指的是传递该变量的地址,在值传递过程中,函数对函数形参数的修改,不会导致实参的修改,而引用传参,对形参的修改,会导致该实参的修改,这是过去我们在其它语言中的一些认知,那么go语言会颠覆我们过去的认知,使用了一种新的方式. demo1 package main import ( "fmt" ) func main() { a := 10 fmt.Println("实参的地址",&a) update(a) fmt.Println(a) } func update(b int) { b = 1 fmt.Println("形参的地址",&b) } // 运行结果 ...阅读全文

博文 2018-08-12 00:34:58 暮雨

Go 中的可变参函数

当函数最后一个参数为 *...T* 时(*T* 前面的三个点是特意的),就叫*可变参函数*: ```go package main import "fmt" func sum(numbers ...float64) (res float64) { for _, number := range numbers { res += number } return } func main() { fmt.Println(sum(1.1, 2.2, 3.3)) } ``` 可变参函数允许传递任意数量(可变)的实参,在函数内部通过一个 [slice](https://golang.org/ref/spec#Slice_types) 来访问这些参数的值(例如上面代码中的参数成员)。 > 只有在最后一个形参...阅读全文

博文 2018-07-30 21:32:54 polaris

golang的"..."备忘

1. 用于数组: 表示长度与元素个数相同. 在golang中数组的长度是类型的一部分,不同长度,不同类型. 2. 用于参数: 用于形参表示可变参数. 用于实参表示直接传递. 具体解释参数见官方文档: 传递可变参数时: (1) 如果实参后不跟..., 则在底层创建与形参类型相同的slice,然后将实参赋值后传递. (2) 如果实参后跟..., 则不在底层创建与形参类型相同的slice,而是直接将实参传递给形参. /ref/spec#Passing_arguments_to_..._parameters Passing arguments to ... parameters If f is variadic with a final parameter p of type ...T, then ...阅读全文

博文 2016-09-09 18:00:01 zolo

Golang中defer、闭包以及命名返回值

defer 后面跟普通函数 package main func main() { run() } func run() { name := "Paul" defer sayHello(name) name = "John" } func sayHello(name string) { println("Hello " + name) } // Hello Paul 只是延缓执行,实参会按照正常顺序传入函数中 defer、return 和未命名的返回值 package main func main() { name := run() println("return: name = " + name) } func run() (string) { name := "Paul" defer sa...阅读全文

博文 2018-07-21 22:34:46 永遠的草莓地

go 的变参函数

package main import "fmt" // Here's a function that will take an arbitrary number // of `ints` as arguments. func sum(nums ...int) { fmt.Print(nums, " ") total := 0 for _, num := range nums { total += num } fmt.Println(total) } func main() { // Variadic functions can be called in the usual way // with individual arguments. sum(1, 2) sum(1, 2, 3) //...阅读全文

博文 2017-02-10 12:22:11 谢权

Go语言学习笔记(七)之方法

在面对对象编程(OOP),我们常把某个对象实现的具体行为的函数称作方法。例如 C++中A类的某个函数实现了某种行为,我们就叫做 A 的方法。在 golang 中如果要定义一个方法,只需要在函数声明时,在函数名前加上某个变量,即该变量实现了某个方法。 ##### 方法声明 ```go type Point struct{ X, Y float64 } //按照传统方法,我们可能会按照下面的方式来写 func Distance(p, q Point) float64 { return math.Hypot(q.X - p.X, q.Y - p.Y) } //但在 go 语言中则是这样 func (p Point) Distance(q Point) float64 { return math.H...阅读全文

博文 2019-04-13 16:19:16 goelo

golang中nil有趣转化

nil 函数自动转化 函数形参:nil; 测试函数 func nilTest(in []int) []int { // 验证 转化 fmt.Println(in) m := make([]int, 10) ret := append(in, m...) return ret } 猜想测试 func main() { fmt.Println(nilTest(nil)) } // 输出信息: [] [0 0 0 0 0 0 0 0 0 0] 得出结论 当调用函数时候,实参是nil,会自动转化成形式参数类型,目前测试,只能转化切边类型...阅读全文

博文 2018-07-04 18:34:42 Tim_SSS

方法,接口学习笔记

之前在开发中编得过就行,没有好好地去思考一些细节问题,比如interface到底有什么用,现在好好总结下1.方法 package main import "fmt" import "reflect" type S struct { a int } func (s S) Set1(v int) { s.a = v } func (s *S) Set2(v int) { s.a = v } func (s *S) Get() int { return s.a } func main() { var s1 S var s2 *S s1.Set1(100)//receiver类型为T的实例,Set1修改的只是s1的副本 fmt.Println(s1.Get()) s1.Set2(100)//rece...阅读全文

一文理清 Go 引用的常见疑惑

今天,尝试谈下 Go 中的引用。 之所以要谈它,一方面是之前的我也有些概念混乱,想梳理下,另一方面是因为很多人对引用都有疑问。我经常会看到与引用有关的问题。 比如,什么是引用?引用和指针有什么区别?Go 中有引用类型吗?什么是值传递?址传递?引用传递? 在开始谈论之前,我已经感觉到这必定是一个非常头疼的话题。这或许就是学了那么多语言,但没有深入总结,从而导致的思维混乱。 前言 我的理解是,要彻底搞懂引用,得从类型和传递两个角度分别进行思考。 从类型角度,类型可分为值类型和引用类型,一般而言,我们说到引用,强调的都是类型。 从传递角度,有值传递、址传递和引用传递,传递是在函数调用时才会提到的概念,用于表明实参与形参的关系。 引用类型和引用传递的关系,我尝试用一句话概括,引用类型不一定是引用传递...阅读全文

博文 2019-09-29 00:04:22 波罗学

Go语言数组浅析

先看一个简单的数组定义: var array [3]int 上面语句定义了变量array,这个变量是一个包含3个整数的数组类型。可以使用Go语言内置的len函数得到数组长度: package main import ( "fmt" ) func main() { var array [3]int fmt.Println(len(array)) } 执行以上程序结果: 3 需要注意的是,在Go语言中,数组的长度是数组类型的一部分,它必须是一个常量表达式,即长度的值在程序编译时是可以得到的。请看下面这个程序: package main import ( "fmt" ) func print_array(array []int) { fmt.Printf("In function, array i...阅读全文

博文 2017-06-24 19:15:22 肖楠

GO-函数学习

函数的声明 go的函数声明通过func这个关键字,params是他的形参设置,result是他的return值 当设置params后调用func必须传入对应函数参数,当设置result后也必须有return,且params和result类型符合声明的 func name(params) (result) { } // 普通函数的声明 func getMax(num1 int, num2 int) (min int, max int) { // 推荐直接赋值给需要return的值 if num1 > num2 { max = num1 min = num2 } else { max = num2 min = num1 } return // 每一个函数必须要有return } 可变参数类型函数...阅读全文

博文 2018-12-02 03:34:40 GGBO0M

应用编程基础课第三讲:Go编程基础

上面两次课我讲解了编程方面的基础知识,这次开始,我使用Go语言来做一些编程实践方面的讲解。 今天先来说下Go语言中的一些我认为比较重要的知识点。 关于Go的基础使用,这里不做过多介绍,可以阅读: How to Write Go Code:https://golang.org/doc/code.html Effective Go:https://golang.org/doc/effective_go.html The Way to Go:https://github.com/Unknwon/the-way-to-go_ZH_CN 重要的数据结构 slice 基础知识 slice是go中最常用的数据结构之一,它相当于动态数组,了解下它的内部实现,对我们是用来说有很大的好处: slice的数据结构...阅读全文

博文 2018-09-30 23:34:39 ligang1109

golang数据类型

Go语言中有四种复合数据类型:数组,slice,map,结构体 数组和结构体都是聚合类型,长度固定。而slice和map都是动态数据结构,长度可变。 数组 var arrName [len]T arrName := [...]int{1, 2, 3} arrName是数组的名字,len是数组的长度,需要时常量,在编译时确定。T是数组元素的类型。 长度也可以通过初始化元素个数决定,这时,len部分使用"..."代替。 如果数组元素是可比较的,那么数组也是可比较的。但只能是同类型的数组才能比较,否则编译错误。 %t - 输出一个bool值,%T - 输出一个变量的类型。 ****** 数组是按值传递的,但可以通过传递一个数组指针。 2.slice 表示一个拥有相同类型元素的可变长度序列:[]T,...阅读全文

博文 2018-12-19 10:34:45 陈卧虫

golang中builtin包

1、介绍builtin包 中文官方标准库给出的介绍:builtin包为Go预声明标识符提供了文档。 2、builtin内容 const ( true = 0 == 0 // 无类型布尔值 false = 0 != 0 // 无类型布尔值 ) true和false是两个无类型布尔值 const iota = 0 // 无类型整数值 iota是一个预定义的标识符,代表顺序按行增加的无符号整数。每个const声明单元(被括号括起来)相互独立,分别从0开始。 type bool bool 布尔类型 type byte byte 8位无符号整型。是uint8的别名,二者视为同一类型 type rune rune 32位有符号整型,int32的别名,二者视为同一类型。 type int int 至少32...阅读全文

博文 2018-12-02 17:34:40 laijh

切片传参中的坑

一,切片传参切片在工作中使用频率很高,但是不谨慎使用的话,很容易踩坑,特别是在传参的时候。话不多说,先看一段代码:func main() { slice := make([]int, 1, 3) fmt.Printf("before,slice %v, addr is %p \n", slice, &slice) changeSlice(slice) fmt.Printf("after,slice %v, addr is %p \n", slice, &slice) } func changeSlice(slice2 []int) { slice2 = append(slice2, 5) slice2[0] = 1 fmt.Printf("during,slice2 %v, addr is ...阅读全文

博文 2019-07-01 00:24:45 Finn

Golang 学习笔记六 函数和方法的区别

参考 golang 函数以及函数和方法的区别 在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。 一、函数 1.定义 函数声明包括函数名、形式参数列表、返回值列表( 可省略) 以及函数体。 func name(parameter-list) (result-list) { body } 比如 func hypot(x, y float64) float64 { return math.Sqrt(x*x + y*y) } fmt.Println(hypot(3,4)) // "5" 正如hypot一样,如果一组形参或返回值有相同的类型...阅读全文

博文 2019-01-27 09:34:43 懒皮

go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。 1、常规传递 使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响原来实参的值。 例如: package main import ( "fmt" ) func swap(a int, b int) { var temp int temp = a a = b b = temp } func main() { x := 5 y := 10 swap(x, y) fmt.Print(x, y) } 输出结果:5 10 传递给swap的是x,y的值得拷贝...阅读全文

博文 2019-04-17 21:34:40 QFdongdong

一文理清 Go 引用的常见疑惑

今天,尝试谈下 Go 中的引用。 之所以要谈它,一方面是之前的我也有些概念混乱,想梳理下,另一方面是因为很多人对引用都有疑问。我经常会看到与引用有关的问题。 比如,什么是引用?引用和指针有什么区别?Go 中有引用类型吗?什么是值传递?址传递?引用传递? 在开始谈论之前,我已经感觉到这必定是一个非常头疼的话题。这或许就是学了那么多语言,但没有深入总结,从而导致的思维混乱。 前言 我的理解是,要彻底搞懂引用,得从类型和传递两个角度分别进行思考。 从类型角度,类型可分为值类型和引用类型,一般而言,我们说到引用,强调的都是类型。 从传递角度,有值传递、址传递和引用传递,传递是在函数调用时才会提到的概念,用于表明实参与形参的关系。 引用类型和引用传递的关系,我尝试用一句话概括,引用类型不一定是引用传递...阅读全文

博文 2019-09-28 19:02:39 波罗学

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

Go语言之可变参数函数

文转自公众号:灰子学技术原文链接:https://mp.weixin.qq.com/s/1ZLeWvORqR-MKBgn5hAvnAGo中的函数支持可变参数,这一特性其实只是Go语言的一种语法糖,格式如下所:func function(values...Type) {} // Type:表示的是具体的参数归属类型,可以是int,string...甚至interface例子1: 可变参数是同一种类型的​通过上面的代码可以看出,可变参数的函数,对4种参数的输入方式都支持,它们分别是:1.不输入参数;2.输入一个参数;3.输入多个参数;4.按照slice的方式输入。输出的结果则都可以正常计算这些不同输入的计算结果。备注:相同类型的可变参数方式,其实输入的参数类似与[]type的这种slice作为入...阅读全文

博文 2019-11-12 17:27:40 ZhDavis