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

golang 面试题

分享出来几个go面试题,都非常简单,如果您有一些开发时候使用到的小技巧欢迎评论。 目前我写出来11个(再更新一道题目),未来会不定期更新。。。 1、写出下面代码输出内容。 package main import ( "fmt" ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println("打印前") }() defer func() { fmt.Println("打印中") }() defer func() { fmt.Println("打印后") }() panic("触发异常") } 2、 以下代码有什么问题,说明原因 type student struct { Name string Age...阅读全文

博文 2017-06-19 02:28:00 诺唯

Go实例学:break 和 continue

利用break 可以提前退出循环,break 终止当前的循环;也可以定义标签,break指定的循环体。 break的用法示例1: package main import ( "fmt" ) func main() { for i := 0; i < 10; i++ { if i > 5 { break //终止这个循环,只打印0到5 } fmt.Println(i) } } 输出结果 0 1 2 3 4 5 break的用法示例2: 循环嵌套循环时,可以在break 后指定标签。用标签决定哪个循环被终止 package main import ( "fmt" ) func main() { J: for j := 0; j < 5; j++ { for i := 0; i < 10; i++...阅读全文

博文 2014-12-01 08:00:02 Goopand

在golang中操作mysql数据库(2)实现查询数据操作

**遍历查询数据方法** ```go package main import ( "fmt" "database/sql" //导入mysql的驱动 _ "github.com/go-sql-driver/mysql" ) func main(){ //使用database/sql包中的Open连接数据库 db,err := sql.Open("mysql","root:root@tcp(localhost:3306)/test?charset=utf8") if err != nil { fmt.Println("连接数据库失败:",err) return } //使用DB的query方法遍历数据库数据 rows,err := db.Query("select * from `user`"...阅读全文

博文 2018-09-03 20:28:33 JimPang

Go语言入门(四)——不定参数

不定参数类型 不定参数是指函数传入的参数个数为不定数量。 package main import ( "fmt" ) /* 不定参数函数 */ func Add(a int, args ...int) (result int) { result += a for _, arg := range args { result += arg } return } func main() { fmt.Println(Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) } 代码中的args是一个数组切片,而且只能放在参数中的最后面。 不定参数的传递 func SetData(args ...int) (result int) { //不定参数的传递 return Add(1, ar...阅读全文

博文 2016-02-16 10:00:00 jaykiller123

golang实现set集合

package set import ( "bytes" "fmt" ) func main() { } type HashSet struct { m map[interface{}]bool } func NewHashSet() *HashSet { return &HashSet{m: make(map[interface{}]bool)} } //添加 true 添加成功 false 添加失败 func (set *HashSet) Add(e interface{}) (b bool) { if !set.m[e] { set.m[e] = true return true } return false } //删除 func (set *HashSet) Remove(e in...阅读全文

博文 2016-09-08 06:00:11 lt695981642

golang练习(一)循环与函数

地址:http://tour.go-zh.org/flowcontrol/8 练习:循环和函数 作为练习函数和循环的简单途径,用牛顿法实现开方函数。 在这个例子中,牛顿法是通过选择一个初始点 z 然后重复这一过程求 Sqrt(x) 的近似值: 为了做到这个,只需要重复计算 10 次,并且观察不同的值(1,2,3,……)是如何逐步逼近结果的。 然后,修改循环条件,使得当值停止改变(或改变非常小)的时候退出循环。观察迭代次数是否变化。结果与 [[http://golang.org/pkg/math/#Sqrt][math.Sqrt] 接近吗? 提示:定义并初始化一个浮点值,向其提供一个浮点语法或使用转换: z := float64(1) z := 1.0 package main import ...阅读全文

博文 2015-06-17 20:04:08 gaokecs1

django 密码加密算法的 go 语言版本

package main import ( "crypto/sha256" "encoding/base64" "golang.org/x/crypto/pbkdf2" "log" "strconv" ) // Django 的实现细节请参考 Python 和 django 文档: // django.contrib.auth.hashers.make_password // django.utils.crypto import pbkdf2 // hashlib.sha256 // base64 func main() { pwd := []byte("shangshanyouyu") // 用户设置的原始密码 salt := []byte("I1lrI7wqJOJZ") // 盐,是一个...阅读全文

博文 2015-11-06 19:00:10 nowboy11427

go-map

package main import "fmt" /** 声明 var m map[int]string var b a := 赋值 map[int]string{} map[int]string{1: "a", 2: "b", 4: "c"} make(map[int]string) */ func main() { var m map[int]string m = map[int]string{} fmt.Println(m) var n map[int]string n = make(map[int]string) fmt.Println(n) var b = make(map[int]string) fmt.Println(b) a := make(map[int]string) ...阅读全文

博文 2016-08-14 12:00:00 u013210620

GolangRoadmap.com 值得每个Gopher关注的平台

大家好,我是平凡的檀先生。创办 [GolangRoadmap.com](https://www.golangroadmap.com/) 网站主要是收集和分享一些Golang相关的一些学习资料,努力打造Gopher一站式学习平台。另外自己比较关注云生态这块的发展,所以也会整理一些相关的知识和大家分享,希望一起学习成长。从2020年8月16日上线开始,已经滚动迭代了几个版本,欢迎持续关注平台的内容更新:[成长记录](https://www.golangroadmap.com/releaseNote/) ![www.golangroadmap.com_.png](https://static.studygolang.com/200901/0c464997790bb62c6063700b407bc...阅读全文

golang笔记——map

ages := make(map[string]int) // mapping from strings to ints 我们也可以用map字面值的语法创建map,同时还可以指定一些最初的key/value: ages := map[string]int{ "alice": 31, "charlie": 34, } 这相当于 ages := make(map[string]int) ages["alice"] = 31 ages["charlie"] = 34 使用内置的delete函数可以删除元素: delete(ages, "alice") // remove element ages["alice"] Map的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。在实践中,...阅读全文

博文 2016-03-27 15:00:01 tianyajuanke

Go 的快速键值存储Badger-go

一个可嵌入,持久,简单,快速的键值(KV)存储,纯 Go 编写。 Badger 在进行随机读取时比 RocksDB 快至少 3.5 倍。 对于 128B 到 16KB 之间的数据量,数据加载速度是 RocksDB 的 0.86x - 14 倍,随着数字大小的增加,Badger 获得了很大的发展。 另一方面,Badger 在范围键值迭代方面目前较慢,但是这有很大的优化空间。 纯 Go 编写 使用最新的研究来构建最快的键值存储。 简单 以 SSD 为中心的设计 ![image](https://static.oschina.net/uploads/space/2017/1006/082139_Japn_2903254.png) ![image](https://static.os...阅读全文

开源项目 2017-10-06 01:30:02 网友

golang实现set集合

package set import ( "bytes" "fmt" ) func main() { } type HashSet struct { m map[interface{}]bool } func NewHashSet() *HashSet { return &HashSet{m: make(map[interface{}]bool)} } //添加 true 添加成功 false 添加失败 func (set *HashSet) Add(e interface{}) (b bool) { if !set.m[e] { set.m[e] = true return true } return false } //删除 func (set *HashSet) Remove(e in...阅读全文

博文 2016-09-12 12:00:32 lt695981642

Golang判断当前字符串是hex编码还是base64编码

由于项目经历了多次迭代,协议也发生了多次变化,所以导致有些数据中是hex编码,有的是base64编码,所以需要区分开来,写了一个苟且的方法来区分 func DecodeHexOrBase64(content string) ([]byte, error) { dat := []byte(content) isHex := true for _, v := range dat { if v >= 48 && v <= 57 || v >= 65 && v <= 70 || v >= 97 && v <= 102 { // isHex = true } else { isHex = false break } } if isHex { d, err := hex.DecodeString(con...阅读全文

博文 2019-05-08 19:35:12 路过麦田

go-bisection

最近写作业,遇到计算量很大的一道数学题,感觉还是喜欢go的所以第一个想到的是用go实现一下,省的手算了。 题目大概是 用bisection的方法find root of f(x)=x^(1/3)+3,需要几步? 把题目说清楚还有一个目的是,代码里有一句是注释掉的,root那句,需要注意,现在是要推算x^(1/3)的,所以得假设你现在是得不到x^(1/3)的。代码如下:目前代码有个问题,答案是14,通过一个公式得到,但运行代码得到的是15,目前想到的原因是,第一个error是直接就在的,不该count的,但是是强行解释,所以也可能是其他原因,先放这儿,有大牛欢迎来讲讲。还有一点是代码里也包含了一点regula-Falsi方法的实现,因为并不需要得到迭代次数,所以就只是在main里做了一点计算(...阅读全文

博文 2017-03-05 19:57:32 暗黑破坏球嘿哈

go实现generator

这是一篇短文。 用过python的都知道generator,也就是生成器。生成器函数返回一个迭代器。那么如果用golang如何来实现呢?两种方法:channel和闭包。 1234567891011121314151617181920212223242526272829303132333435363738394041424344package mainimport ( "fmt")//implement generator by closurefunc FibnacciClosure() func() (ret int) { a, b := 0, 1 return func() (ret int) { ret = b a, b = b, a+b return }}//implement gen...阅读全文

博文 2017-07-02 19:25:11 Tao Kelu

Go 语言实现exercise--Loops and Functions

求平方根的一种叫牛顿算法的文字,先给出一个猜测值,用连续逼近方法求出平方根。 首先我们设要求的这个数为a,它的平方根为x;然后我们一开始令x=a;然后我们进入一个循环,不断的令x=(x+a/x)/2,就是令x等于 x和a/x的平均值,这样迭代了7-10次左右就可以得到a的平方根x的近似值。 package mainimport ( "fmt" "math")func Sqrt(x float64) float64 { z := x for i := 0; i < 10; i++ { z = (z + x/z)/2 } return z}func main() { fmt.Println(Sqrt(2)) fmt.Println(math.Sqrt(2))...阅读全文

博文 2015-06-17 23:07:44 xiongwei1209

A tour of Go的疑问

Go 官网上给大家提供了很多练习,是学习Go的不错的途径,但是我遇到一个问题,这个练习中要求用Closure打印Fibonacci数列 http://tour.golang.org/moretypes/22 Exercise: Fibonacci closure package main import "fmt" // fibonacci is a function that returns // a function that returns an int. /*func fibonacci() func() int { x := 0 y := 1 z := 0 return func() int { z = x x = y y = x + y return z } }*/ func fi...阅读全文

博文 2015-12-23 04:00:00 niansiqiao

Golang的map迭代

Golang不同于Java等常见的语言,字节在语言层面支持了map。map类似于Java当中的Set,是数学中集合的概念。集合当中不会出现重复元素,并且是无序的。与此相关的就是数组和队列,它们是有序的。 前几天要做一个接口调用,需要用到安全机制,将请求参数编码出一个签名,一并用来发送请求。相关的可以参考《接口安全机制》。这里会涉及到两次取请求URL的步骤,一次是用来拼请求,一次是用来计算签名。当时机制的我,为了方便写代码,就将参数放在了map当中,遍历两次map就能够实现了。一般情况下都能够正常访问。极少数情况下是会提示调用失败的,其实就是签名或者参数错误。因为概率极低,所以没有引起注意。 但是一直觉得代码有点bug,大概位置自己也知道,肯定是发送HTTP请求的模块。后来,就去review了...阅读全文

博文 2017-02-09 12:25:15 Bryce

Golang中的标签:label

package main import "fmt" func main() { var a int = 10 // 定义局部变量 // 循环 LOOP: for a < 20 { if a == 15 { // 跳过迭代 a++ goto LOOP } fmt.Printf("a的值为 : %d\n", a) a++ } } 运行结果看 https://wide.b3log.org/playground/1da16604b64018b508cafbfd8af0fa36.go 参考: https://studygolang.com/articles/12906 https://www.kancloud.cn/liupengjie/go/570042 https://medium.com/gol...阅读全文

博文 2019-09-27 11:02:49 aside section ._1OhGeD

go二分法和牛顿迭代法求平方根

二分法 求根号5 折半:5/2=2.5 平方校验: 2.5*2.5=6.25>5,并且得到当前上限2.5 再次向下折半:2.5/2=1.25 平方校验:1.25*1.25=1.5625<5,得到当前下限1.25 再次折半:2.5-(2.5-1.25)/2=1.875 平方校验:1.875*1.875=3.515625<5,得到当前下限1.875 牛顿迭代法可以理解函数f(x) = x²,使f(x) = num的近似解,即x² - num = 0的近似解。 Code123456789101112131415161718192021222324252627282930313233343536373839404142434445package mainimport ( "fmt" "math")f...阅读全文

博文 2017-12-06 15:03:18 宽视角

完成比完美更重要?仅知道这句话可不够

导读 都说完成比完美更重要! 软件开发模式经过多年的演化,从传统的瀑布开发模型升级到了敏捷开发模型。 而到了互联网时代,迭代再次加快,产品直接是在互联网上生长。 然而,做产品总是要先出一个版本,再不断迭代,那从0到1的第一步应该怎么走?后续的迭代又应该如何演进呢? 重点笔记 迭代就是小步快跑,把最内核的部分先放出来,不断优化、小范围试错。 版本规划能力是产品经理的重要能力。 判断一个产品经理是否厉害,很重要的一条就是判断他设计的产品第一个版本有多简单、直接、切中要点,能不能直指人心。 产品复杂是因为产品经理不自信,只能从附加功能中找心理安慰。 产品设计应该找到内核,小步快迭代,而不是憋大招。 迭代中,重要的是次序,前一个动作是后一个动作的预动作。 迭代的价值: 对外部,可以快速得到用户的反馈...阅读全文

博文 2018-09-21 23:34:39 海之方

go-map

package main import "fmt" /** 声明 var m map[int]string var b a := 赋值 map[int]string{} map[int]string{1: "a", 2: "b", 4: "c"} make(map[int]string) */ func main() { var m map[int]string m = map[int]string{} fmt.Println(m) var n map[int]string n = make(map[int]string) fmt.Println(n) var b = make(map[int]string) fmt.Println(b) a := make(map[int]string) ...阅读全文

博文 2016-09-08 07:00:08 u013210620

golang 50度灰里面的"for"声明中的迭代变量和闭包的问题 不解

* 打印three, three, three ``` package main import ( "fmt" "time" ) type field struct { name string } func (p *field) print() { fmt.Println(p.name) } func main() { data := []field{{"one"}, {"two"}, {"three"}} for _, v := range data { go v.print() } time.Sleep(3 * time.Second) //goroutines print: three, three, thre...阅读全文

go第五天

go语言的循环 go里的循环比较简单只有for 1.普通for循环 for 初始化语句; 条件语句; 修饰语句 {} for i := 0; i < 5; i++ { fmt.Printf("This is the %d iteration\n", i) } 2.类似while循环 for i >= 0 { i = i - 1 fmt.Printf("The variable i is now: %d\n", i) } 3.无限循环 for{ ... } 4.for-range 结构 go特有的,它可以迭代任何一个集合(包括数组和 map)觉得和foreach循环很像 一般形式for ix, val := range coll { } 用来迭代字符串,它能够自动根据 UTF-8 规则识别 U...阅读全文

Go语言中for range陷阱

我们先来看一段代码: ```go src := []int{1, 2, 3, 4, 5} var dst2 []*int for _, i := range src { dst2 = append(dst2, &i) } for _, p := range dst2 { fmt.Print(*p) } ``` 这段代码的运行结果是什么? 大多数开发者都会认为是:12345 而当你实际执行一下这段代码后,你会惊讶的发现实际结果是:55555 这是为什么呢?实际上for range迭代的是这样的: ```go var i int for j := 0; j < len(src); j++ { i = src[j] dst2 = append(dst2, &i) } ``` 而不是我们认为的这样:...阅读全文

博文 2019-08-05 22:20:03 ChaoCai

小白求助,leetcode中寻找数列的所有子集的问题

While iterating through all numbers, for each new number, we can either pick it or not pick it 1, if pick, just add current number to every existing subset. 2, if not pick, just leave all existing subsets as they are. We just combine both into our result. For example, {1,2,3} intially we have an emtpy set as result [ [ ] ] Considering 1, i...阅读全文

LeetCode 第1题:Two Sum

题目 给出一个整数数组,找出其中的两个整数,使相加等于指定整数,并返回这两个整数的索引。 假设每组输入只有一种解法,并且不能重复使用同一个元素。 举例: 给出 nums = [2, 7, 11, 15], target = 9, 因为 nums[0] + nums[1] = 2 + 7 = 9, 所以返回 [0, 1]. 思路 最简单也是最直接的想法就是两重循环直接遍历计算就能得到结果,时间复杂度为 。 但这肯定不是最优解。 题目中提到只会有一种解法,那就意味着不会有重复的整数,不然就会有多解。 既然没有重复的,那用一个哈希来存储数据就最合适了,整数为键,索引为值。 那我们要找两个整数的索引就很方便了,在遍历数组的时候,检查和目标的差值是否在哈希中,有的话就是答案了。 Go 实现 func ...阅读全文

博文 2018-12-05 01:34:43 pktangyue

怎么计算网络包的校验和

这是一家公司出的面试题, 对其中接收数据包时的校验和部分的计算不太明白, 怎么计算这部分。 ------------------------------------- 0 4 8 12 +--------+--------+------+=============+ |SEQUENCE|CHECKSUM|LENGTH| DATA | +--------+--------+------+=============+ SEQUENCE 数据包序号(大端序) CHECKSUM (校验和) ...阅读全文

map字典

golang的map实现并不是像c++一样使用红黑树,而是使用了hashmap,用数组来实现。map 是字典的概念,它的格为 “map[keyType]valueType” 。 map 的读取和设置也类似 slice 一样,通过 key 来操作,只是 slice 的index 只能是`int`类型,而 map 多了很多类型,可以是 int ,可以是 string及所有完全定义了 == 与 != 操作的类型。// 1. 声明 var m map[string]int // 2. 初始化,声明之后必须初始化才能使用,向未初始化的map赋值引起 panic: assign to entry in nil map. m = make(map[string]int) m = map[string]in...阅读全文

博文 2018-09-21 11:34:41 周杰伦是李小莹的男神

插入排序的Golang 实现

再次研究了插入排序的概念:定义一个有序的数据序列a,将待排序的序列b中的数依次插入到a的合适位置,插入后仍然有序总结其与冒泡、选择的区别在于,内部迭代的次数是逐渐增大的,二后两者随着排序进行迭代次数逐渐减少尝试基于Go的实现: func insertSort(arr []int) { l := len(arr) for i := 1; i < l; i++ { for v := 0; v < i; v++ { if arr[v] > arr[i] { arr[v], arr[i] = arr[i], arr[v] } } } ...阅读全文

博文 2020-02-12 19:32:41 邹友

go中range

range 迭代各种各样的数据结构。 range遍历数组示例: package main import "fmt" func main() { rangeTest() } // range func rangeTest() { var arr = []int{12, 3, 2, 12, 3, 2, 31} for k, v := range arr { fmt.Println("数组输出的key,value为:",k, v) } } 结果是: 输出的key,value为: 0 12 输出的key,value为: 1 3 输出的key,value为: 2 2 输出的key,value为: 3 12 输出的key,value为: 4 3 输出的key,value为: 5 2 输出的key,val...阅读全文

博文 2019-04-25 14:34:43 三沐子FBR

golang for range 只有一个迭代变量?

题目, 下面的代码输出 package main import ( "fmt" ) func rangeAppend() { v := []int{1, 2, 3} for i := range v { v = append(v, i) } fmt.Printf("%v", v) } func main() { rangeAppend() } golang playground https://play.golang.org/p/MxP... 为什么上面的程序输出 [1 2 3 0 1 2] 对于不同种类的range表达式结果值,for语句的迭代变量的数量可以有所不同, 代码中只有一个迭代变量的情况意味着什么呢?这意味着,该迭代变量只会代表当次迭代对应的元素值的索引值 下面代码中的i 是索引...阅读全文

博文 2020-06-06 15:32:40 lidashuang

【Go学习笔记】8、map

map 类似其他语言中的哈希表或者字典,以key-value形式存储数据 key必须是支持==或!=比较运算的类型,不可以是函数、map或slice Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍 Map使用make()创建,支持:=这种简写方式 map([keyType]valueType,cap) ,cap表示容量,可省略 超出容量时会自动扩容,但尽量提供要一个合理的初始值 使用len()获取元素个数 键值对不存在时自动添加,使用delete()删除某键值对 使用for range 对map和slice进行迭代操作 123456789101112131415161718192021222324252627282930//k int v string var mapTmp...阅读全文

博文 2017-05-30 05:09:58 HundredLee

golang项目中对以前方法新增参数

问题:对于golang项目中,随着项目的迭代,对于某个方法,如果原有的参数不够用,需要添加新的参数,又不想修改所有调用的敌法。如何做才能更好的扩展?这里提供一种方法:注:如果能不新增参数最好不要新增1、原有方法,例如:func Mytest(arg1 string, arg2 int64){ fmt.Println(arg1, arg2) }2、添加参数 args ...interface{} , 注:添加使用三个点的参数,以前的方法是不需要修改的,不会报错,相当于三个点参数args默认值是interface{}的切片。func Mytest(arg1 string, arg2 int64, args ...interface{}){ fmt.Println(arg1, arg2, args...阅读全文

博文 2019-11-13 17:30:12 lobo

golang代码分析

1.golang并行示例(1) package main import ( "fmt" ) func Processor(seq chan int,wait chan struct{}){ //迭代方式实现并行go func() go func() { prime, ok := <-seq if !ok { close(wait) return } fmt.Println(prime) out := make(chan int) Processor(out, wait) for num := range seq { //for循环取chan值避免chan阻塞 if num%prime != 0 { out <- num } } close(out) }() } func main() { o...阅读全文

博文 2019-07-20 08:32:43 jojo1313

【go踩过的坑】for range

思考 如果对map或者slice使用for...range时,如果只用一个迭代参数,返回的是索引还是对应的值? 解答 for x,y := range map/slice时,其中第二个迭代参数可以省略。所以如果只用一个迭代参数,返回的将是索引值。也就是说如下两行代码的功能相同: for x := range map/slice for x,_ := range map/slice 比如如下代码: package main import "fmt" func main(){ m := make(map[int]string) m[1] = "a" m[10] = "b" //使用两个迭代参数 for k,v := range m{ fmt.Printf("k = %d v = %s\n", k...阅读全文

博文 2019-11-12 22:33:28 moonbamboo

GO 循环

for循环三种形式:一、for init; condition; post { }1、inti赋初值;2、condition判断是否满足给定条件,如果值为真,则执行循环体内语句,然后再执行 post。之后进入第二次循环,condition判断是否满足给定条件,否则判断 condition 的值为假,不满足条件,就终止for循环,执行循环体外语句。 for a := 0; a < 100; a++ { fmt.Printf("a 的值为: %d\n", a) }二、for condition { } for a < b { a++ fmt.Printf("a 的值为: %d\n", a) }三、for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下: ...阅读全文

博文 2020-04-29 01:33:16 赛里