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

Go语言实战笔记(六)| Go Map

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org,第一时间看后续笔记。 书里把Map翻译为映射,我觉得太硬,所以这篇文章里,我还是用英文Map。 Map是一种数据结构,是一个集合,用于存储一系列无序的键值对。它基于键存储的,键就像一个索引一样,这也是Map强大的地方,可以快速快速检索数据,键指向与该键关联的值。 内部实现Map是给予散列表来实现,就是我们常说的Hash表,所以我们每次迭代Map的时候,打印的Key和Value是无序的,每次迭代的都不一样,即使我们按照一定的顺序存在也不行。 Map的散列表包含一组桶,每次存储和查找键值对的时候,都要先选择一个桶。如何选择桶呢?就是把指定的键传给散列函数,就可以索引到相应的桶了,进而找到对应的键值。 这种方式的好处在于...阅读全文

博文 2017-07-04 02:20:11 飞雪无情

Golang 知识点总结

各种类型复制的时候的花费本节标题也可以叫做“各种类型的值的大小” (the sizes of values of all kinds of types),底层可被不同的值共享的数据的大小未被计算。下面的表格中一个 word在32bit操作系统中代表4个字节,在64bit操作系统中代表8个字节,内容基于官方的Go 1.7的编译器。TypeCost Of Value Copying (Value Size)bool1 byteint8, uint8, byte1 byteint16, uint162 bytesint32, uint32, rune4 bytesint64, uint648 bytesint, uint, uintptr1 wordstring2 wordspointer1 wo...阅读全文

博文 2017-09-02 07:30:06 zhangboyu

LeetCode刷题 - (01)两数之和

题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例:

给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 
解法一 暴力解法 解题思路 最容易想到的就是暴力法,使用两个遍历,查找两数之和是否为target。流程如下: 使用i来遍历数组每个元素 在i的每一个循环中,使用j从i + 1开始遍历 判断i和j对应的值的和是否为target 代码实现 func twoSum(nums []int, target ...阅读全文

博文 2019-09-02 00:32:50 vangoleo

《Go语言程序设计》读书笔记(二)函数

《Go 语言程序设计》在线阅读地址:https://yar999.gitbooks.io/go... 函数 函数声明 函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。 func name(parameter-list) (result-list) { body } 形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值也可以像形式参数一样被命名,在这种情况下,每个返回值被声明成一个局部变量,并初始化为其类型的零值。 用 _ 符号作为形参名可以强调某个参数未被使用。 func first(x int, _ int) int { return x } 函数的类型被称为函数的标识符。如果两个函数形式参数列表和返回值列表中的变量类型一一对应,...阅读全文

博文 2019-12-20 13:32:40 KevinYan

golang基础(3)函数

我们还是用 javascript 来做对比,在golang 语言中 func 关键字来声名函数 func foo(){ // do stuff... } func foo(){ // do stuff... return 3; // foo 应该无返回值 } foo(x,y) // 调用时应该无参数 我们在定义 foo 然后返回一个数值,需要为函数 foo 指定返回值类型,否则默认为无返回值,而且 golang 作为一门静态语言,没有 javascript 那么自由,我们函数也需要根据函数声名时参数保存一致 func foo(x string, y bool) int { // do stuff... return 3; } func foo(x string, y bool) int { ...阅读全文

两数之和

计划从这周开始,每周刷一道leetcode,目的在于练习基础算法,同时每次强制用golang实现,以此达到学习golang的目的。由于刚开始,所以这一题也比较简单。 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 实现思路: 从前往后遍历数组,每次那当前数组和后面所有的数字进行相加比较,如果符合条件,返回两数索引。 这里贴一下java实现 public stat...阅读全文

博文 2019-06-16 20:32:44 杨比轩

golang 标准命令行解析库 flag

flag 库实现了对命令行参数的解析 基本用法 package main import ( "fmt" "flag" ) func main() { b := flag.Bool("b", false, "bool flag") s := flag.String("s", "hello golang", "string flag") flag.Parse() fmt.Println("b is", *b) fmt.Println("s is", *s) } 上面代码指定了两个选项: bool 类型的 b 选项,默认值为 false,帮助信息 bool flag string 类型的 s 选项,默认值为 hello golang,帮助信息 string flag 执行 go run main....阅读全文

006_golang中的init函数和main函数

一、 (1)init函数 init 函数可在package main中,可在其他package中,可在同一个package中出现多次。 (2)main函数 main 函数只能在package main中。 (3)执行顺序如下图: golang里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值。 虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。 go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都...阅读全文

博文 2018-06-02 17:30:01 arun-python

Go语言基础(四)—— 优质的容错处理

前言: 本专题用于记录自己(647)在Go语言方向的学习和积累。 系列内容比较偏基础,推荐给想要入门Go语言开发者们阅读。 目录如下: Go语言基础(一)—— 简介、环境配置、HelloWorld Go语言基础(二)—— 基本常用语法 Go语言基础(三)—— 面向对象编程 Go语言基础(四)—— 优质的容错处理 Go语言基础(五)—— 并发编程 Go语言基础(六)—— 测试、反射、Unsafe Go语言基础(七)—— 架构 & 常见任务 Go语言基础(八)—— 性能调优 引子: Go语言本身没有try/catch异常机制,因为Go的三位创始人在设计Go语言之出觉得这样写会变得很繁琐。 但因为:Go本身支持函数多返回值,因此在写函数的时候,可以优先考虑容错处理。 接下来,我们来看看在Go语言中...阅读全文

博文 2020-02-03 21:34:19 奇舞647

深入浅出Rust Future - Part 1

本文译自Rust futures: an uneducated, short and hopefully not boring tutorial - Part 1,时间:2018-12-02,译者:motecshine, 简介:motecshine 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 Rust中文社区首页 Rust中文社区Rust文章栏目 知乎专栏Rust语言 sf.gg专栏Rust语言 Intro 如果你是一个程序员并且也喜欢Rust这门语言, 那么你应该经常在社区听到讨论Future 这个库的声音, 一些很优秀的Rust Crates都使用了Future 所以我们也应该对它有足够的了解并且使用它. 但是大多数程序员很难理解Future到底是怎么工作的, 当然有...阅读全文

博文 2018-12-03 12:34:41 krircc

golang 中的 defer

defer 是在return 之前执行的 但是return xxx 并不是一条原始指令 package main import ( "fmt" ) // my : 1 // res : 1 func f1() (result int) { defer func() { result++ }() return 0 } // my : 10 // res : 5 -- 我误判的原因, t为局部变量了. defer 影响的是局部变量 t. // -- r在return的时候已经拷贝赋值了. func f2() (r int) { t := 5 defer func() { t = t + 5 }() return t } // my : 1 func f3() (r int) { defer fu...阅读全文

博文 2019-04-10 01:34:42 个00个

以 Wagon 为例, Golang 解析 wasm

wasm 原理 wasm 指令的解析,其实都是 入栈,出栈的操作, 它是一个基于栈的虚拟机,比如 get_local 0, 它就是获取函数的第一个参数,并把它放到栈里. i32.const 42 就是把一个 42(int32)放入栈中. i32.add 就是从栈中取出两个数,相加后再放回栈里。 下面看一个具体的例子 cpp 如下 extern "C" { int large(int num) { if (num > 10) { num = num + 12; } else { num = num + 100; } return num; } } 指定 Optimization Level -o3 优化后 编译后的 wast 如下 (table 0 anyfunc) (memory $0 1)...阅读全文

博文 2020-04-23 22:32:53 不要人夸颜色好

go defer 的关键特性解读和示例

defer 的作用和执行时机go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return 之后,比如 1234func a() int { defer b() return 0} b 的执行是发生在 return 0 之后,注意 defer 的语法,关键字 defer 之后是函数的调用。 defer 的重要用途一:清理释放资源由于 defer 的延迟特性,defer 常用在函数调用结束之后清理相关的资源,比如 12f, _ := os.Open(filename)defer f.Close() 文件资源的释放会在函数调用结束之后借助 defer 自动执行,不需要时刻记住哪里的资源需要释放,打开和释放必须相对应。 用一个例子深刻诠释一下 defer 带来的便利和简洁。 ...阅读全文

博文 2017-07-28 13:54:52 三月沙

Go 中的 Defer 和 Closure

学习 Go 中的 defer 相关知识疑惑之处以及闭包的概念和用法。Defer 的理解按照官方的解释,defer 后面的表达式会被放入一个列表中,在当前方法返回的时候,列表中的表达式就会被执行。一个方法中可以在一个或者多个地方使用defer表达式。文档中一个例子如下:func a() { i := 0 defer fmt.Println(i) // defer fmt.Println(2) // defer fmt.Println(3) i++ return } 打印出来的数值为 0 ,这就很诧异了,即使按照 defer 最后被执行,那 i 的数值也应该是 1 啊。仔细看了官方文档原来原因:上面的这段代码,defer 表达式中用到了i这个变量,i 在初始化之后的值为 0,接着程序执行到 de...阅读全文

博文 2017-09-27 11:25:44 allenwu.itscoder.com

Go接口之nil != nil

本文来自“灰子学技术”,原文链接如下所示:https://mp.weixin.qq.com/s/ZBd1UcIJFk_DonkxVNgERA一、引出话题:在开始这个话题之前,我们先看一段代码以及其输出结果,代码如下所示: Output: 从上面的输出结果来看,GetA()返回的类型为*A就算赋值为nil,也不等于nil。看到这里笔者觉得很奇怪,明明是GetA()返回值是nil,为什么nil的判断条件是false呢?二、原因分析:在研究了interface之后,笔者发现了真相,原来Go语言中的interface是不是nil的条件,不单单是interface中的值是nil,类型还需要是nil才行。通过Go的官方文档描述来看,原因如下:// 原文链接:https://golang.org/doc/...阅读全文

我设计的golang面试题

1 golang中的引用类型 切片,map,channel和interface2、map如何顺序读取map不能顺序读取,是因为他是无序的,想要有序读取,首先的解决的问题就是,把key变为有序,所以可以把key放入切片,对切片进行排序,遍历切片,通过key取值。3 如何向main函数传参?main不能带参数,没有返回值. 可以使用flag包获取和解析命令行参...阅读全文

博文 2020-03-28 03:32:44 voidFan

广度优先配合匿名函数爬取

package mainimport ( "fmt" "log" "net/http" "os" "golang.org/x/net/html")var ( str string = "https://docs.hacknode.org/gopl-zh/")//CreatFile is a func ti make infomation in filefunc CreatFile(bt []byte) { f, err := os.OpenFile("F:/MyGo/src/practice/url.txt", os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatal(err) } defer f.Close() res, err :=...阅读全文

博文 2018-06-27 11:34:55 哆啦在这A梦在哪

Go defer分析

什么是defer A "defer" statement invokes a function whose execution is deferred to the moment the surrounding function returns, either because the surrounding function executed a return statement, reached the end of its function body, or because the corresponding goroutine is panicking. 通过使用 defer 修饰一个函数,使其在外部函数返回后才被执行,一种是因为周围的函数执行了一个 return语句,到达了它的函数体...阅读全文

博文 2018-12-20 20:34:47 WalkingInTheAir

【Golang小知识】new与make的区别

定义 func new(Type) *Type func make(t Type, size ...IntegerType) Type 其中Type代表某一个数据类型。 区别 1.返回值 从定义中可以看出,new返回的是指向Type的指针。make直接返回的是Type类型值。 2.入参 new只有一个Type参数,Type可以是任意类型数据。make可以有多个参数,其中第一个参数与new的参数相同,但是只能是slice,map,或者chan中的一种。对于不同类型,size参数说明如下: 对于slice,第一个size表示长度,第二个size表示容量,且容量不能小于长度。如果省略第二个size,默认容量等于长度。 对于map,会根据size大小分配资源,以足够存储size个元素。如果省略siz...阅读全文

博文 2019-11-17 17:32:41 moonbamboo

4. golang 函数

函数基本组成: 关键字func 函数名 参数列表 返回值 函数体 返回语句 go的函数不支持重载、默认参数值,支持不定长变参、多个返回值等。 func main() { /* 定义局部变量 */ var a, b = 4, 5 s := add(a,b) fmt.Println(s) } func add(a, b int) int { return a + b } 注意:小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用。 不定参类型函数:函数传入的参数个数为不定数量 func main() { myFunc(1,2,3) } func myFunc(args ...int) { for _,arg := range args { fmt.Println(arg) } }...阅读全文

Golang学习笔记-1.6 函数

本文系第六篇Golang语言学习教程 声明函数 语法 func name(parametername type) returntype { //函数体(具体实现的功能) } 函数声明包括: 函数名name:自定义的函数名 形式参数列表():()中定义,描述了函数的参数名以及参数类型 返回值列表rerurntype:描述了函数返回值的变量以及类型 函数体{}:具体实现功能的代码 函数声明释义 函数的声明以关键词func开始,后面紧跟自己定义的函数名name(函数名), 函数的参数列表定义在()之间, 返回值的类型定义在returntype(返回值列表)处, 包含在{}之间的就是函数体。 注:声明一个参数的语法为参数名 参数类型,声明多个参数采用(参数名 参数类型, 参数名 参数类型)的形式。 ...阅读全文

博文 2018-07-11 02:34:42 xunk1900

2017-11-23 step

1 Golang的返回值,return,defer 多个defer的顺序是stack顺序,FILO 正确的顺序是: return 先执行,将结果写入返回值,接着defer执行扫尾工作,当defer结束后,函数携带当前返回值返回。 可以认为函数在开始执行的时候已经为返回值分配好了空间,只不过返回值的空间是否标号,标志着返回值是否可以被defer(其实还有其他函数)操作到。所以在命名返回值的时候,defer操作完返回值,返回值也随之改变了。 2 Vim的插件 vim-airline还是一个不错的status bar。 vim-atom-dark 我很喜欢的colorscheme。 3 C++ std::numeric_limits 浮点数不能和0.0比查出的知识,std::numeric_lim...阅读全文

博文 2018-10-22 23:34:39 11bansakana

Go语言的异常处理之errors,panic, recover

error接口:源码 Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下: type error interface { Error() string } Go语言的标准库代码包errors为用户提供如下方法: package errors type errorString struct { text string } func New(text string) error { return &errorString{text} } func (e *errorString) Error() string { return e.text } 另一个可以生成error类型值的方法是调用fmt包中的Errorf函数: package fmt ...阅读全文

golang 反射

反射机制是指在程序运行的时候动态地获取对象的属性后者调用对象方法的功能。golang 支持反射,原生的 json 库就是用反射机制实现。 golang 的反射有两个主要的概念: `reflect.Type` 和 `reflect.Value` 从字面上理解就是类型和值 ## `reflect.Type` `reflect.Type` 指的就是一个类型,可以是基本类型 int,string,也可以是自定义的结构体类型,可以通过 `reflect.TypeOf()` 获取对象的类型 ``` go TypeOf(i interface{}) Type // 获取任意一个对象的 Type 对象 (t *Type) NumField() int // 字段数量 (t *Type) NumMethod(...阅读全文

博文 2019-11-27 21:02:24 hatlonely

Golang学习 - bytes 包

对于传入 []byte 的函数,都不会修改传入的参数,返回值要么是参数的副本,要么是参数的切片。 // 转换 // 将 s 中的所有字符修改为大写(小写、标题)格式返回。 func ToUpper(s []byte) []byte func ToLower(s []byte) []byte func ToTitle(s []byte) []byte // 使用指定的映射表将 s 中的所有字符修改为大写(小写、标题)格式返回。 func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte func To...阅读全文

博文 2019-04-19 18:34:42 佛心看世界

Go语言实现的Java Stream API

学习Go语言时实现的集合操作工具库,类似于Java 8 中新增的Stream API。由于Go语言不支持泛型,所以基于反射实现。只用于学习目的,不要用于生产(PS:当然也不会有人用)。 项目地址:https://github.com/tk103331/s... 集合操作包括生成操作、中间操作和终止操作。生成操作返回值是Steam对象,相当于数据的源头,可以调用Stream的其他方法;中间操作返回值是Stream对象,可以继续调用Stream的方法,即可以链式调用方法;终止操作不能继续调用方法。 下面介绍下这个库的API: 数据准备后面的操作都是基于集合数据的,先准备一些测试数据。 type student struct { id int name string ageint scores [...阅读全文

博文 2019-09-05 10:02:41 tk103331

go 关键字之 defer

我是谁 defer - 顾名思义翻译过来叫 延迟, 所以我们通常称呼 defer func() 这样 defer 后面紧跟的函数为 延迟函数. 作者注: 不过从实际应用来讲, 延迟函数通常用来做一些函数最终返回前的一些收尾工作, 所以称呼为收尾函数其实更贴切. 三围几何 defer 有其独特的一面, 了解其个性, 才能更好的下手...对待妹纸, 应该也是这么个理 延迟性 顾名思义, 既然叫延迟函数, 那么肯定具备延迟性. 我们来看看怎么个延迟法, defer_defer.go // defer_defer.go package main import ( "fmt" ) func main() { foo() } func foo() { fmt.Println(1) defer fmt.P...阅读全文

博文 2019-06-14 16:00:25 taadis

Golang 基本语法速查——变量、控制结构与函数

一、基本结构 hello world 程序: package main import "fmt" func main(){ fmt.Println("你好,世界") } 直接运行: $ go run hello.go 你好,世界 构建可执行程序: $ go build hello.go $ ./hello 你好,世界 PS Package 用于组织代码架构,类似于其他语言中的库或命名空间 每个 go 源文件都必须属于(且只属于一个)特定的 package,一个 package 可以包含多个 go 代码文件 import 导入某个 package ,意味着获取了该 package 中可见对象的访问权限 import 导入的 package 未在后面的代码中使用会报错,no unnecessar...阅读全文

博文 2019-12-11 06:32:39 rollingstarky

《快学 Go 语言》第 10 课 —— 错误与异常

Go 语言的异常处理语法绝对是独树一帜,在我见过的诸多高级语言中,Go 语言的错误处理形式就是一朵奇葩。一方面它鼓励你使用 C 语言的形式将错误通过返回值来进行传递,另一方面它还提供了高级语言一般都有的异常抛出和捕获的形式,但是又不鼓励你使用这个形式。后面我们统一将返回值形式的称为「错误」,将抛出捕获形式的称为「异常」。Go 语言的错误处理在业界饱受批评,不过既然我们已经入了这个坑,那还是好好蹲着吧。错误接口Go 语言规定凡是实现了错误接口的对象都是错误对象,这个错误接口只定义了一个方法。type error interface { Error() string}注意这个接口的名称,它是小写的,是内置的全局接口。通常一个名字如果是小写字母开头,那么它在包外就是不可见的,不过 error 是内...阅读全文

博文 2018-12-15 21:02:57 码洞

【Golang基础】 Android工程师学Golang(1)

Golang函数 注:是用的测试方法写的例子。 Golang所有都是传值,不是传引用 为什么会出现,函数内部的修改,会影响外部的变量的情况,例如切片背后对应的是一个数组,这个数据结构包含指针,在赋值的过程中结构被复制了,结构被改变所以外部也被改变了,例如:slice,map,channel. 函数可以有多个返回值:和Java不一样,Golang可以有多个返回值 package fn__test import ( "math/rand" "testing" "time" ) func returnMultiValues() (int, int) { // 加入随机,如果不加就会是一个固定的值 rand.Seed(time.Now().UnixNano()) return rand.Intn(1...阅读全文

博文 2019-06-16 00:32:40 不说话的唐僧

兄弟连区块链教程分享eth源码分析RPC分析

兄弟连区块链教程分享eth源码分析RPC分析。这是一个交互式的 JavaScript 执行环境,在这里面可以执行 JavaScript 代码,其中 > 是命令提示符。在这个环境里也内置了一些用来操作eth的 JavaScript 对象,可以直接使用这些对象。这些对象主要包括: eth:包含一些跟操作区块链相关的方法;net:包含一些查看p2p网络状态的方法;admin:包含一些与管理节点相关的方法;miner:包含启动&停止挖矿的一些方法;personal:主要包含一些管理账户的方法;txpool:包含一些查看交易内存池的方法;web3:包含了以上对象,还包含一些单位换算的方法。 personal.newAccount('liyuechun')personal.listAccounts ac...阅读全文

博文 2018-10-18 16:34:42 兄弟连区块链培训

jQuery的first()方法怎么用?

first()方法是jQuery中的内置方法,用于选择从指定元件的第一个元素;它将匹配元素集合缩减为集合中的第一个元素。 原文地址:jQuery的first()方法怎么用?如果给定一个表示 DOM 元素集合的 jQuery 对象,.first() 方法会用第一个匹配元素构造一个新的 jQuery 对象。语法:$(selector).first()返回值:返回所选元素中的第一个元素。示例: