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

Golang从入门到精通

课程概述Golang从入门到精通,本课程以学习Golang语言开发互联网产品为目标,从基础理论知识入手,详实地讲解Golang语言的开发方法与技巧,并通过大量的线上训练,带领同学们全面掌握服务端高并发、过载保护、水平扩展、服务降级、服务限流以及微服务等主流互联网产品的开发技术栈,快速达到大公司工作两年的技术水平。章节1:Golang环境搭建课时1课程介绍10:08课时2Go的发展历史02:08课时3Go开发环境搭建09:18课时4Go目录结构介绍04:13课时5hello world程序演示16:56课时6Go常用命令介绍09:36课时7Go语言特性13:25章节2:数据类型课时8标识符和关键字04:44课时9变量介绍08:19课时10常量介绍14:21课时11常量练习03:26课时12数据...阅读全文

博文 2019-03-25 09:34:40 瑛子_1791198045

空结构体struct{}解析

本篇文章转自David的"The empty struct"一文,原文地址链接是http://dave.cheney.net/2014/03/25/the-empty-struct 。欢迎大家访问[我的博客](http://zuozuohao.github.io/),代码可以在[@Zuozuohao](https://github.com/Zuozuohao/GolangGOFPatterns)下载。 **Introduction** 这篇文章详细介绍了我最喜欢的Go数据类型,空结构体--struct{}。 空结构体是没有位段的结构体,以下是空结构体的一些例子: ``` type Q struct{} var q struct{} ``` 但是如果一个就结...阅读全文

Go bufio包

Go bufio包 Package bufio implements buffered I/O. It wraps an io.Reader or io.Writer object, creating another object (Reader or Writer) that also implements the interface but provides buffering and some help for textual I/O. bufio.Reader结构体 // Reader implements buffering for an io.Reader object. type Reader struct { buf []byte rd io.Reader // reader...阅读全文

博文 2017-02-10 12:00:28 xxggy

Golang升级到1.7后,之前正确的函数出现错误,分析原因及解决办法

最近尝试把开发环境,升级到Golang1.7.1后,程序会偶发性的宕掉,查看日志后,发现总是在一个计算切片的哈希值的地方,错误信息是: unexpected fault address 0xc043df4000, fatal error: fault 在1.7之前程序持续运行2年了,从来没有出现这个问题,怀疑是Golang编译器升级到SSA后导致的。将程序的代码精简为以下函数: //本代码的主要作用是,把一个字符串的Assii的值累加起来。 func SimpleCrc(ptr uintptr, size int) int { ret := 0 maxPtr := ptr + uintptr(size) for ptr < maxPtr { b := *(*byte)(unsafe.Poin...阅读全文

博文 2017-02-07 03:35:40 GoWKH

指针与引用的区别

指针与引用的区别。由new生成的指针指向了特定的内存,它是不变的。而由make生成的内存块大小是可变的,当切片的增长超出了cap指定的大小时,将会重新分配一块更大的内存并将原切片内容复制过去,切片指向了新的内存块,切片原来的内存将会释放并回收。所以切片指向的内存地址是会变的。如果这一切还象指针那样由程序员来管理,难度是很大的。好在GO语言中这一切由系统来自动管理,程序员使用切片的名字来引用特定的内容,而不需要知道它们变动到了实际内存的哪块位置。引用的实质是用名字操作代替了指针操作,从而屏蔽与简化了这背后的指针操作复杂性...阅读全文

golang中不定参数与数组切片的区别

package main import "fmt" func main() { myfunc1(88, 42, 12, 56) //传递不定数量的参数 myfunc2([]int{88, 42, 12, 56}) //传递一个数组切片 } func myfunc1(args ...int) { //接受不定数量的参数,这些参数的类型全部是int for _, arg := range args { fmt.Println(arg) } } func myfunc2(args []int) { //传递一个数组切片 for _, arg := range args { fmt.Println(arg) } } 参考资料: 《Go语言编程》 2.5.3 不定参...阅读全文

博文 2016-02-23 03:00:00 leo8

go切片

本文实例讲述了GO语言数组和切片的用法。分享给大家供大家参考。具体分析如下: 一、数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。 (1)数组的创建。 数组有3种创建方式:[length]Type 、[N]Type{value1, value2, ... , valueN}、[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() { var iarray1 [5]int32 var iarray2 [5]int32 = [5]int32{1, 2, 3, 4, 5} iarray3 := [5]int32{1, 2, 3, 4, 5} iarray4 := [5]int32{6, 7,...阅读全文

博文 2016-06-29 02:00:03 zhangym

Go 语言中 append 导致内存不足

这是一篇简短的笔记,关于你或许会遇上的 Go 语言的内存不足的问题。 如你所知,Go 语言的 slice 很强大且使用简单。通过 Go 语言的内置函数,它可以解决我们许多问题。 但是今天,我更多想讲述的是 slice 与它的内存。 首先,创建 slice 最简单的方式是: ```go var sliceOfInt []int var sliceOfString []int var sliceOfUser []User var sliceOfMap []map[string]int letters := []string{"a", "b", "c", "d"} numbers := []string{1, 2, 3, 4, 5} numbers := []User{ User{ Name: "...阅读全文

博文 2018-05-10 21:23:46 lightfish-zhang

在 Go 运行时中的 Strings

## 动机(Motivation) 可以认为这是对 [Rob Pike](https://ai.google/research/people/r) 的一篇关于 Go 字符串的[博客](https://blog.golang.org/strings)的解释。以 Go 程序员的思维来写。 在博客文章中,他说没有什么证据可以证明 Go 字符串是以 slices 的方式实现。我猜这不是他的疏忽,但起码可以证明一点,这不是这篇博客的核心。再说,任何想要自己研究的都可以在使用 Go 代码的过程中探索。我就是这样做的。所以在这篇文章中,我尽力解释 Go 字符串实现与 slice 实现的关系。 这里不讨论字符串编码。这不是在 runtime 中我想要探索的东西。但我模仿 slice 的常见字符串操作,如字符...阅读全文

博文 2018-10-13 23:04:08 gogeof

golang使用slice中遇到的坑

package main import ( "fmt" ) func sliceFunc(i []int, num int) []int { for j := 0; j < num; j++ { i = append(i, 3) } i[0] = num return i } func main() { s := make([]int, 0, 3) s = append(s, 1) fmt.Printf("cap=%d\ts=%v\n",cap(s),s) fmt.Println("=========") s1 := sliceFunc(s, 2) fmt.Printf("cap=%d\ts=%v\n",cap(s),s) fmt.Printf("cap=%d\ts1=%v\n",cap(s...阅读全文

博文 2016-08-30 16:00:00 52zjj

我的Golang全接触

满打满算, 从好友推荐Golang至发文时, 使用Golang已经有1年多了. 这种时间对于C/C++ Java这些老者来说, 简直是菜鸟级别的经验 但作为新生代语言的特点就是实战. Golang这一年里, 已经为项目提供了稳定的服务器和强大的扩展能力, 与客户端的Unity3D里的C#一样, 都是强大, 极致开发效率代表的优秀开发语言. 用途篇 Golang到底拿来做啥? 我需要么? 高效(性能,开发)的服务器语言. 包括Web, 游戏, App 编写桌面级UI暂不是很适合 我需要把现在的C++, Python, Erlang等服务器改成Golang么? 性能有瓶颈, 开发效率低, 有钱有时间的话, 完全可以 评价篇 听过太多的人对Golang的评价, 大概分为这么几类: C/C++性能党...阅读全文

博文 2016-11-15 05:00:06 CoderQ

Golang切片操作

开发十年,就只剩下这套Java开发体系了 >>> s1 := []int{1, 2, 3, 4, 5} //短操作符声明 len为4,cap为4 s2 := make([]int, 2, 4) //make语法声明 ,len为2,cap为4 s2 = []int{5, 6} s3 := append(s2, 7) //append一个元素 fmt.Println(s3, s2) //[5 6 7] [5 6] s4 := append(s2, s1...) //append 一个切片所有的元素 fmt.Println(s4) //[5 6 3 4] //return copy(s1, s2) // 复制,用s2的元素填充s1里去,改变原slice,覆盖对应的key fmt.Println(s...阅读全文

博文 2018-09-23 01:33:06 FalconChen

Go语言很好很强大,但我有几个问题想吐槽

作者 | Ben Boyter 译者 | 老夫子 Go 是一门非常不错的编程语言,并且逐渐取代 Python 成为很多人的首选语言。但它也有一些缺点让很多开发者忍不住吐槽,比如它在函数式编程、通道 / 并行切片处理、内存垃圾回收、错误处理等方面都有一些问题。本文作者将 Go 存在的“硬伤”设计记录了下来,与大家分享、讨论。 Go 是一门非常不错的编程语言。然而,我在公司的 Slack 编程频道中对 Go 的抱怨却越来越多(猜到我是做啥了的吧?),因此我认为有必要把这些吐槽写下来并放在这里,这样当人们问我抱怨什么时,我给他们一个链接就行了。先声明一下,在过去的一年里,我大量地使用 Go 语言开发命令行应用程序、scc、lc 和 API。 其中既有供客户端调用的大规模 API,也有即将在 htt...阅读全文

博文 2019-04-09 14:43:28 InfoQ

unsafe.Pointer 和系统调用

按照 Go 语言官方文档所说, unsafe 是关注 Go 程序操作类型安全的包。 像包名暗示的一样,使用它要格外小心; unsafe 可以特别危险,但它也可以特别有效。例如,当处理系统调用时,Go 的结构体必须和 C 的结构体拥有相同的内存结构,这时你可能除了使用 unsafe 以外,别无选择。 unsafe.Pointer 可以让你无视 Go 的类型系统,完成任何类型与内建的 uintptr 类型之间的转化。根据文档,unsafe.Pointer 可以实现四种其他类型不能的操作: * 任何类型的指针都可以转化为一个 unsafe.Pointer * 一个 unsafe.Pointer 可以转化成任何类型的指针 * 一个 uintptr 可以转化成一个 unsafe.Poin...阅读全文

博文 2018-02-13 22:17:48 polaris

go 速学 - 07 - Slice

目录 切片 Slice 概念 创建 Slice 定义切片 指定范围创建切片 使用 make 创建切片 len和 cap 遍历 Reslice Append 概念 使用 Copy 摘要 切片和数组的区别,创建切片,指定范围,make,遍历,reslice,append,copy 切片 Slice 概念 切片本身不是数组,而是指向底层的数组,关联数组的局部或全部 切片是引用类型 创建切片时索引不能超过数组的大小,否则会报异常 创建 Slice 定义切片 定义时不用指定长度(指定长度或使用 “…” 表示的是数组) //切片 var s []int fmt.Println(s) //[] //数组 var arr [5]int fmt.Println(arr) //[0 0 0 0 0] 指定范围创...阅读全文

博文 2015-05-06 23:00:15 mrseasons

【时速云线上分享】第十一期:Radio Dream流媒体直播平台基于Docker的应用

以下整理自第十一期技术分享内容,由 时速云 史鑫磊 分享。 首先介绍一下背景,Radio Dream项目是一个开源项目,前身为五雷轰顶网络电台,这个项目是我个人逐渐打磨了将近两年,最开始是因为猫扑网络电台停播,我个人是猫扑电台的老听众,很舍不得这个平台,后来想想,干脆自己做一个网络电台,就是因为这些想法催生了这个项目的成立。 说完背景开始聊聊这个电台的架构,我们从流媒体协议选型到架构实现等多个方面拆分的讲解这个平台实现方法,另外时速云镜像仓库里Radio Dream的镜像demo,总体来说这套系统部署起来还是十分复杂,虽然对系统要求极其低,单核心CPU,128M内存,20GB左右的硬盘就能跑起来,但是从最开始的架构设计我就打算做成一个集群化的方案,方便动态扩容,服务更多用户,...阅读全文

go的学习记录(二)--- 数组与数组切片

在go语言的学习中,少不了接触的就是数组和数组切片,并且这两者的使用也是非常频繁的。因此如果不能进行很好的理解,或许很容易犯错。那么在go中,数组和数组切片都有什么特点,又是怎么声明赋值的,如何使用的呢,下面我就自己的理解总结一下,个人总结可能不全或者有错,望指点。 一、数组和数组切片的特点 数组是什么就不用多说了,作为开发者,这是经常会用到的东西,相信大家都有自己的理解。现在先总结一下数组的特点 1. 数组的长度在定义之后就不可被更改 2. 数组声明时的长度必须为常量或常量表达式,即可以在编译器确定长度,分配内存 3. 数组的下标从0开始,最后一个元素的下标为(长度-1),即在go中可以写为 len(arr)-1 4. go语言的数组是值类型,在作为参数传递时会做数组的复制操作。因此作为参...阅读全文

博文 2016-01-27 13:00:00 haust_wang

go语言中数组和切片的区别 本人新手 高手勿喷

首先从定义中来区别 数组的概念就唠叨了 ,格式如下var balance [10] float32 第一个var是赋值符号 balance为数组名称 【10】为数组下表 float32 数组类型为浮点型 以上是数组的基本概念 重点在下面: var balance = []float32{1000.0, 2.0, 3.4, 7.0, 50.0},【】中不填写数字的形式,go语言中会根据元素的个数来设置数组的大小。或许会认为是动态数组 但是它不是 因为它的数量只是后面的元素来设定,但不是动态的 有什么区别 往下看: 切片的定义:代号(slice) go数组长度不可改变 上面没有数组下表的格式 是根据元素决定数组的大小 是设置 不是改变。而切片不同,与数组相比切片...阅读全文

go语言细节

数组与字符串为值类型,切片、映射、通道为值类型,赋值需注意。 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() { 8 //数组 9 a1 := [3]int{1, 2, 3} 10 a2 := a1 11 a2[0] = 2 12 fmt.Println(a1) //print: 1 2 3 13 fmt.Println(a2) //print: 2 2 3 14 // 字符串 15 s1 := "123" 16 s2 := s1 17 s2 = "223" 18 fmt.Println(s1) //print 123 19 fmt.Println(s2) //print 223 20 // 切片 21 slice1 := []...阅读全文

博文 2015-11-24 03:00:00 --xiaoyao--

Go的可比性

package main import "fmt" type Album struct { music []string } func main() { a1 := Album{music: []string{"music", "music2"}} a2 := Album{music: []string{"music", "music2"}} fmt.Println(a1 == a2) } 上面这段程序无法编译,报错: invalid operation: a1 == a2 (struct containing []string cannot be compared) 是因为结构体内的切片不具有比较性。 切片类型、字典类型、函数类型的值是不具有可比性的...阅读全文

博文 2015-01-24 17:00:11 itfanr

Go 语言在命令行以表格的形式输出结构体切片

刚写的小工具,可以在命令行以表格的形式输出结构体切片 * 表格每列自动对齐 * 支持自动适应列宽 * 结构体的字段支持所有数据类型(字符串,切片,映射等) 例如可以很方便清晰地将数据库查询结果列表(结构体切片)在命令行以表格的形式输出。 项目 Github 主页: 对你有用的话,给个 star 支持一下吧~ ```go package main import ( "fmt" "github.com/modood/table" ) type House struct { Name string Sigil string Motto strin...阅读全文

学习for循环的小问题,恳请老师指点一下

```go 1:sum := 0 2:for i := 0; i < 10; i++ { 3:sum += i 4:} //这行以上好理解,我能懂 5:list := []string{"aaa", "bbb", "ccc"} //请问1,这里list的值是切片么?好像不是数组。 6:for _,v := range list{ //请问2,这_,与range配合起到啥作用?这个程序好像是死循环啊 7:fmt.Print("%s", v) 8:} //(右边是原文注释)这里使用了一个range,key和value分别是int和string类型,key是序号,从0开始,value是值 ``` 这是我学习时遇到的一个例子注释是我的疑问。请路过的老师扶一把,谢谢...阅读全文

Go语言:MD5加密

Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New()和Sum()函数。 package main import ( "crypto/md5" "encoding/hex" "fmt" ) func main() { data := []byte("Mdroid.cn") md5Ctx := md5.New() md5Ctx.Write(data) cipherStr := md5Ctx.Sum(nil) fmt.Println(cipherStr) fmt.Printf("%x\n", md5.Sum(data)) fmt.Printf("%x\n", cipherStr) fmt.Println(hex.EncodeToString...阅读全文

博文 2017-08-27 16:34:54 Mdroid

实现有序map之go

Go Map介绍 Go 中 Map是一种无序的键值对的集合。Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值。Map是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map是无序的,我们无法决定它的返回顺序,这是因为Map是使用链式hash表来实现的。 c++中的实现 在C++ STL 中map 采用红黑树实现,可以实现有序的Map. Go 中实现 实现原理 这个实现方法的主要的方法是用空间换取时间。通过list 和 map 两种数据结构,保存相同的一份数据。list 用来做顺序遍历,map 用来做查找,删除操作 实现代码 package main import ( "container/list" "fmt" ) type Keyer interface...阅读全文

博文 2017-11-06 05:04:41 因心而来

golang字符串拼接与性能分析

字符串拼接在golang中是非常常见的操作,本文介绍几种常用方法并分析各种方法的效率. 拼接 + 号拼接 + 号拼接是最常见的方式 var a string = "Hello," var b string = "World!" func Test1() string { return a + b } buffer拼接 bytes 库提供一个结构体 Buffer, Buffer结构允许多次写入[]byte 、string 、rune类型的数据并一次性输出 var a string = "Hello," var b string = "World!" func Test2() string { var buffer bytes.Buffer buffer.WriteString(a) buffe...阅读全文

博文 2018-11-16 00:34:38 我傻笑你跑掉

Go 中不定长度集合

如果你在使用像 C# 或 Java 这样的编程语言后来到 go,你发现的第一件事就是没有像 `List` 和 `Dictionary` 这样的传统集合类型。 这真让我困惑了好几个月。 我找到了一个名为 `container/list` 的软件包,并且几乎用它做所有的东西。 我脑后一直有一个声音在唠叨。语言设计者不应该不直接支持对未知长度的集合管理的功能。每个人都在讨论切片是如何在语言中被广泛使用,但我只是在有明确定义的容量或者它们通过函数返回时我才使用切片,这有点不对劲!! 因此,我在本月早些时候写了一篇文章,揭开了切片的盖子,希望能找到一些我不知道的魔法。我现在知道切片是如何工作的,但最终我仍然需要一个不断进行长度增长的数组。我在学校学过,使用链表更有效率,是存储大量数据更好的方法。特别是...阅读全文

博文 2018-08-11 22:55:10 polaris

数组与切片的区别

A, 数组是固定长度的,所以在创建时要指明长度,而切片长度是可变的,创建时不用标明长度,比如: 数组: d1 := [...]int{1, 2, 3} 切片: d2 := []int{1,2,3} B, 数组的操作是传值的,有拷贝动作,切片的操作实质是指针操作。如下: a := [5]int{1, 2, 3, 4, 5} b := a b[1] = 0 c := []int{} c = a[:] c[2] = 9 fmt.Println(a) fmt.Println(b) fmt.Println(c) 结果: ...阅读全文

golang append方法,读文件(buff)

今天研究go的复制文件的时候,发现复制出来的文件总是比源文件大了些,程序如下 package main import ( "os" "log" "io" "fmt" ) func main() { file, err := os.Open("C:/Users/Desktop/123123.txt") // For read access. defer file.Close() if err != nil { log.Fatal(err.Error()) } chunks := make([]byte,1024) buff := make([]byte, 1024) for{ count, err := file.Read(buff) if err != nil && err != io.EO...阅读全文

博文 2017-05-19 09:00:20 程序羊

Go:为何带来泛型 ——来自官方博文

[English version](https://blog.golang.org/why-generics) ## 介绍 [这是在Gophercon 2019上发表的演讲版本。视频链接可供使用。] 这篇文章是关于向Go添加泛型的意义,以及为什么我认为我们应该这样做。我还将介绍为Go添加泛型的设计可能的改变。 Go于2009年11月10日发布。不到24小时后,我们看到了[关于泛型](https://groups.google.com/d/msg/golang-nuts/70-pdwUUrbI/onMsQspcljcJ)的[第一条评论](https://groups.google.com/d/msg/golang-nuts/70-pdwUUrbI/onMsQspclj...阅读全文

再谈CGO!

最近在kubernetes上搞集成其它team算法的事情,他们的算法是用c写的,自然地我需要用cgo去调用。本文整理了使用cgo过程中的一些函数,特此整理下来,记录。 1,给c函数传递二维整型数组 c函数需要接收一个二维整型数组作为参数, extern bool xxx_func(int** _matrix); 最初实现如下: goArray := [][]int{{1},{3,3},{3,3,2}} cArray := make([][]C.int, len(goArray)) for i, _ := range goArray { cArray[i] = make([]C.int, len(goArray[i])) for j, _ := range goArray[i] { cArra...阅读全文

博文 2017-08-18 07:05:11 Mark_Zhang

golang常见面试题

1. 切片与数组对比 (1). 数组 数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列。 数组的长度是数组类型的一部分,所以[3]int 和 [4]int 是两种不同的数组类型。 (2). 切片 切片表示一个拥有相同类型元素的可变长度的序列。 切片是一种轻量级的数据结构,它有三个属性:指针、长度和容量。 切块结构如下: type Slice struct { ptr unsafe.Pointer len int cap int } (3). 关系 一个底层数组可以对应多个slice,这些slice可以引用数组的任何位置,彼此之间的元素还可以重叠。 viso1.jpg 2. 结构体 3. interfac...阅读全文

博文 2018-06-28 21:34:44 百味纯净水

关于对比两个切片不同的问题

在学习 go web编程那本书的时候,里面有一段,是判断用户复选框是否合法,采用以下代码 slice:=[]string{"football","basketball","tennis"} a:=Slice_diff(r.Form["interest"],slice) if a == nil{ return true } return false 我用的时候,发现Slice_diff 不是标准函数,好像是第三方的,于是我也建个包,把这个函数弄过来: func Slice_diff(slice1, slice2 []interface{}) (diffslice []interface{}) { for _, v := range sli...阅读全文

Golang的文件处理方式-常见的读写姿势

Golang的文件处理方式-常见的读写姿势 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 在 Golang 语言中,文件使用指向 os.File 类型的指针来表示的,也叫做文件句柄。注意,标准输入 os.Stdin 和标准输出 os.Stdout ,他们的类型都是 *os.File 哟。在任何计算机设备中,文件是都是必须的对象,而在 Web编程中,文件的操作一直是 Web程序员经常遇到的问题,文件操作在 Web应用中是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作。 一.文件的读取姿势 1 歌曲:我有一只小毛驴 2 歌手:碧瑶 3 专辑:《瑶谣摇》 4 发行时间:2014-03-18 5 词:付林 6 曲:付林 7 歌词: 8 我有一只小毛驴 9 我从...阅读全文

博文 2017-11-08 06:00:01 yinzhengjie

快速理解Go数组和切片的内部实现原理

很多人对Go语言的``array``和``slice``傻傻分不清楚,今天我们就从底层出发,来聊聊它俩到底有什么区别。 # 数组 几乎所有计算机语言,数组的实现都是相似的:一段连续的内存,Go语言也一样,Go语言的数组底层实现就是一段连续的内存空间。每个元素有唯一一个索引(或者叫``下标``)来访问。如下图所示,下图是``[5]int{1:10, 2:20}``数组的内部实现逻辑图: ![这里写图片描述](https://i6448038.github.io/img/slice/array.png) 由于内存连续,CPU很容易计算索引(即数组的``下标``),可以快速迭代数组里的所有元素。 Go语言的数组不同于C语言或者其他语言的数组,...阅读全文

golang学习的点点滴滴:数组切片使用

func main() { arr := [10]int {1,2,3,4,5,6,7,8,9,10} var slice1 []int = arr[:5] //取数组前5个 slice2 := arr[5:]//取数组后5个 slice3 := make([]int, 5)//make一个切片,初始化前5个为0 mySlice2 := make([]int, 5, 10) // make一个切片,初始化前5个为0,初始容量为10 mySlice3 := []int{1,2,3,4} // 直接赋值 // cap:容量 len长度 fmt.Println(cap(mySlice2), len(mySlice2)) s1 := []int{1,2,3} s2 := make([]int, 5)...阅读全文

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

为什么go语言还没有火起来?go语言有哪些劣势?

Go 是一门非常不错的编程语言,并且逐渐取代 Python 成为很多人的首选语言。但它也有一些缺点让很多开发者忍不住吐槽,比如它在函数式编程、通道 / 并行切片处理、内存垃圾回收、错误处理等方面都有一些问题。本文作者将 Go 存在的“硬伤”设计记录了下来,与大家分享、讨论。Go 是一门非常不错的编程语言。然而,我在公司的 Slack 编程频道中对 Go 的抱怨却越来越多(猜到我是做啥了的吧?),因此我认为有必要把这些吐槽写下来并放在这里,这样当人们问我抱怨什么时,我给他们一个链接就行了。 先声明一下,在过去的一年里,我大量地使用 Go 语言开发命令行应用程序、scc、lc 和 API。 其中既有供客户端调用的大规模 API,也有即将在 https://searchcode.com/ 使用的 ...阅读全文

博文 2019-04-11 19:34:42 QFdongdong

Golang之interface(多态,类型断言)

多态用法 package main //一种事物的多种形态,都可以按照统一的接口进行操作 //多态 import ( "fmt" "math/rand" "sort" ) type Student struct { Name string Id string Age int sortType int } type Book struct { Name string Author string } //切片默认传地址 type StudentArray []Student func (p StudentArray) Len() int { return len(p) } func (p StudentArray) Less(i, j int) bool { return p[i].Name <...阅读全文

博文 2018-01-15 07:30:01 pyyu

Go 语言切片(Slice)

Go 语言切片(Slice)Go 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。定义切片你可以声明一个未指定大小的数组来定义切片:var identifier []type切片不需要说明长度。或使用make()函数来创建切片:var slice1 []type = make([]type, len) 也可以简写为 slice1 := make([]type, len)也可以指定容量,其中capacity为可选参数。make([]T, length, capacity)这里 len 是数组的长度并且也是切片的初始长度。切...阅读全文

博文 2015-12-22 22:00:04 u011225629

golang slice 创建

slice 的创建有两种方法test := []int{2,3}或者是使用make,而且通常我们使用 make创建的情况比较多例如: test := make([]int, 5, 5) // 创建一个类型为 int,长度为 5,容量为 5 的切片 fmt.Println(len(test), cap(test)) // 5 5 test1 := make([]int, 3) //如果不指定容量,默认容量等于初始时的长度 fmt.Println(len(test1),cap(test1)) // 3 3 slice 的长度和容量可以自己是可以动态改变的, slice 其实是数组的某一部分 test := make([]int,0) // 创建一个长度为0,容量为0 的数组 fmt.Printl...阅读全文

博文 2017-09-04 06:04:59 beiciye

golang fmt占位符

golang fmt格式“占位符” qing123 · 2015-03-21 03:00:01 · 43307 次点击 · 预计阅读时间 2 分钟 · 大约1分钟之前 开始浏览 这是一个创建于 2015-03-21 03:00:01 的文章,其中的信息可能已经有所发展或是发生改变。 golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf("%v", people) {zhangsan}, %+v 打印结构体时,会添加字段...阅读全文

博文 2018-07-14 18:30:00 Csir

切片为空和空切片等同

// main project main.go package main import ( "fmt" ) func mm(str string, Nums ...int) { var a []int //切片为nil fmt.Println(len(a)) fmt.Println(a) if a == nil { fmt.Println("[]int comes in") } fmt.Println(len(Nums)) fmt.Println(Nums) if Nums == nil { fmt.Println("nil comes in") } } func main() { mm("a") } 测试结果: 0 [] []int comes in 0 [] nil comes in 成...阅读全文

博文 2018-04-18 18:48:18 zhaohongmeng

Go 学习之路:引用类型与值类型

Golang中只有三种引用类型:slice(切片)、map(字典)、channel(管道); 引用类型 引用类型理解为(C语言):指针 值类型 值的拷贝 下面以值类型和slice(切片)例子可知: package main import "fmt" func main(){ a := [5]int{2, 3, 4, 5, 6} b := a fmt.Println(a,b) b[2] = 77 fmt.Println(a,b) } 上面定义了一个数组a,它是值类型,复制给b是copy,当b发生变化后a并不会发生任何变化,结果如下: 值类型 package main import "fmt" func main(){ a := []int{2, 3, 4, 5, 6} b := a fmt.P...阅读全文

博文 2018-06-28 18:34:42 fudomine

golang中的三个点 '...' 的用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jeffrey11223/article/details/79166724 ‘…’ 其实是go的一种语法糖。 它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。 第二个用法是slice可以被打散进行传递。 下面直接上例子: func test1(args ...string) { //可以接受任意个string参数 for _, v:= range args{ fmt.Println(v) } } func main(){ var strss= []string{ "qwr", "234", "yui", "cvbc", } test1(strss...) //切片...阅读全文

博文 2018-12-06 19:31:35 jeffrey11223

切片:用法和本质[翻译]

文: http://golang.org/doc/articles/slices_usage_and_internals.html 中文: http://zh-golang.appsp0t.com/doc/articles/slices_usage_and_internals.html Go的切片类型为处理同类型数据序列提供一个方便而高效的方式。切片有些类似于其他语言中的数组,但是有一些不同寻常的特性。本文将深入切片的本质,并讲解它的用法。 数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要要理解数组。 数组类型由指定和长度和元素类型定义。例如,[4]int 类型表示一个四个整数的序列。数组的长度是固定的,长度是数组类型的一部分(int[4] 和 [5]int 是完全不同的...阅读全文

博文 2015-05-03 22:21:17 chai2010

实现类似php的array_column方法

``` func SliceColumn(structSlice []interface{}, key string) []interface{} { rt := reflect.TypeOf(structSlice) rv := reflect.ValueOf(structSlice) if rt.Kind() == reflect.Slice { //切片类型 var sliceColumn []interface{} elemt := rt.Elem() //获取切片元素类型 for i := 0; i < rv.Len(); i++ { inxv := rv.Index(i) if elemt.Kind() == reflect.Struct { for i := 0; i < el...阅读全文

博文 2017-12-21 08:15:18 fightingforbing

老虞学GoLang笔记-数组和切片

数组 Arrays 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。在初始化后长度是固定的,无法修改其长度。当作为方法的入参传入时将复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。 初始化 数组的初始化有多种形式,查看示例代码 , 在线运行示例代码 [5] int {1,2,3,4,5} 长度为5的数组,其元素值依次为:1,2,3,4,5 [5] int {1,2} 长度为5的数组,其元素值依次为:1,2,0,0,0 。在初始化时没有指定初值的元素将会赋值为其元素类型int的默认值0,string的默认值是"" [...] int {1,2,3,4,5} 长度为5的数组,其长度...阅读全文

博文 2015-07-21 15:00:03 Gopher老虞