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

Golang学习:为基本类型添加方法

根据go源码中的time/time.go文件中的代码片段写了一个main方法,如下: package main import ( "fmt" "time" ) // A Weekday specifies a day of the week (Sunday = 0, ...). type Weekday int const ( Sunday Weekday = iota Monday Tuesday Wednesday Thursday Friday Saturday ) var days = [...]string{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", } // Stri...阅读全文

博文 2018-11-23 21:34:39 清泉_QingQuan

Go-Structure

定义&赋值 要点: - 定义一个新的结构体 - 结构体对象的声明与初始化 - 对象和指针 package main import "fmt" type Point struct { x float64 y float64 } /* You could write the code as below, which is more convenient. type Point struct { x,y float64 } */ func print(p Point) { fmt.Printf("Point[x=%.2f, y=%.2f]\n", p.x, p.y) } func main() { var p1 Point; // all fields are set to default val...阅读全文

博文 2016-09-22 02:00:00 u013344915

golang核心原理-协程栈

什么是协程栈 每个协程都需要有自己的栈空间,来存放变量,函数,寄存器等信息。所以系统需要给协程分配足够的栈空间。 栈分配方式 固定大小的栈 每个协程都有相同的,固定大小的栈。 优点:实现简单; 缺点:每个协程需要的栈空间不尽相同,如果一概而论,那么有些是浪费,有些是不够用。 创建时指定 由开发者在创建时指定协程栈大小。java, c++在创建线程时可以指定其栈大小。 优点:实现简单 缺点:对开发者要求比较高,需要根据栈变量,请求量预估。但是有些场景不太好预估,比如递归调用,这种情况通常只能往大的估计。 Segmented stacks 分配和释法额外的内存空间。初始分配的比较小的空间,如4k。不够了再增加,用完即释放。以下是一个例子: 当G调用H的时候,没有足够的栈空间来让H运行,这时候Go...阅读全文

博文 2019-10-18 11:04:24 叶不闻

Golang关键字与预定义

关键字 基本在所有语言当中,关键字都是不允许用于自定义的,下面列出go的25个关键字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 预定义 在go中有很多预定义的名字,基本在内建的常量、类型和函数当中。 这些内部预定义的名字并不是关键字,它们是可以重新定义定义的 内建常量 内建类型 内建函数 true int make false int8 len iota int16 cap nil int32 new int64 append u...阅读全文

博文 2017-11-03 02:04:43 老健子

【Go】基础语法之接口

接口定义: 利用关键字interface来定义一个接口,接口是一组方法的集合。 例如: type People interface { Show(name string, age int) (id int, err error) Set(name string, age int) } 接口的实现: 跟结构体的成员方法实现是一样的。 func (object of implement func) func_name (parameters) (return type){ ....//func body } 例如: package main import "fmt" func main() { fmt.Println("=================Live interface=======...阅读全文

博文 2016-08-14 09:00:00 puyangsky

如何导入golang.org的包

golang是google开源的编程语言,用久了就会对这个事实有深刻的体会 比如说,go get一些包的时候,失败liao。 怎么解决国内golang.org下的包无法下载到本地GOPATH的问题呢? 例子: github.com/colinmarc/hdfs 这个包用到了golang.org/x/crypto的部分功能 原因:golang.org解析出来是google的ip,“理所应当”被拒绝访问 办法,找到github的镜像包: 步骤:git clone [镜像地址].然后在第一个GOPATH下依次新建文件夹golang.org,x(golang.org文件夹应该跟github.com文件夹同级)。然后把下载的crypto文件夹复制过来。 最后:go get github.com/col...阅读全文

博文 2019-02-20 17:34:46 Mandelbrot_Kobe

导入golang下的包

不可描述的原因 go get一些包的时候失败 22.png 怎么解决国内golang.org下的包无法下载到本地GOPATH的问题呢? 例子: github.com/colinmarc/hdfs 这个包用到了golang.org/x/crypto的部分功能 原因:golang.org解析出来是google的ip,“理所应当”被拒绝访问 办法,找到github的镜像包: 23.png 步骤:git clone [镜像地址].然后在第一个GOPATH下依次新建文件夹golang.org,x(golang.org文件夹应该跟github.com文件夹同级)。然后把下载的crypto文件夹复制过来。 最后:go get github.com/colinmarc/hdfs导入的包就可以正常调用了。根据...阅读全文

博文 2019-02-28 15:34:43 进阶默示录

在线安装 IntelliJ IDEA的 golang 插件

http://my.oschina.net/whutzl/blog/528712?p={{page}} IntelliJ IDEA是非常受欢迎的开发工具,如果我们希望使用IntelliJ IDEA 进行Go语言的开发,需要安装Golang插件。 网上的资料几乎都是建议开发者编译源码进行安装,但这是不必要的。还有更简单快捷的在线安装方式,这里给出基本步骤(基于IntelliJ IDEA 14.1,不同版本界面会有细微差异,但步骤相似): 1. 在“Settings”菜单,点击“Plugins”,打开插件管理窗口: 2. 点击“ Browse repositories”,打开插件仓库管理窗口: 3. 点击“Manage repositories...”,打开自定义仓库窗口: 4. 在URL中输入...阅读全文

博文 2016-09-03 17:00:07 u011686226

golang 函数定义

函数的定义 第一种 关键字 函数名(参数1 参数1类型,参数2 参数2类型……) 返回值 返回值类型 (可选){ 函数体 } 例子: func func_name(arg1 type_data, arg2 type_data……) return_val return_val_type { 函数体 } 第二种 关键字 函数名(可变长参数列表... 可变长参数列表类型) 返回值 返回值类型 (可选){ 函数体 } 例子: func func_name(args... args_list_type) return_val return_val_type { 函数体 ...阅读全文

博文 2020-04-05 02:32:43 小麦客

33.蛤蟆笔记go语言——switch关键字

33.蛤蟆笔记go语言——switch关键字 Go的switch非常灵活。表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项,而如果switch没有表达式,它会匹配true。这产生一种可能——使用switch编写if-else-if-else判断序列。 它不会匹配失败后自动向下尝试,但是可以使用 fallthrough 使其这样做。 用default可以指定当其他所有分支都不匹配的时候的行为。 代码示例: package main import "fmt" import "time" func main() { i := 2 fmt.Print("write", i, " as ") switchi { case 1: fmt.Println("one") case 2: fmt.P...阅读全文

博文 2016-07-09 11:00:07 notbaron

global-hack-day-3

global-hack-day-3 是参与 Docker 全球黑客日最终提交的第三个版本。 ### 步骤一 Fork 代码仓库,以你的团队名字作为子目录标题 ### 步骤二 开始做你认为最棒的 Docker 项目,以赢得  [Docker Global hack Day #3](https://www.docker.com/community/hackathon)! ### 步骤三 如果已经准备好,那么可以提供一个 pul request  #### 步骤四 一旦提交 Pull Request,那么可以继续提交其他信...阅读全文

开源项目 2015-10-21 16:00:00 docker

Go-Type

在谈论struct和interface已经用到了type这个关键字。 另外,Go的type另外一种常用功能,是类似于C/C++的typedef。在Go的package中,这种用法非常常见。 A type declaration defines a new named type that has the same underlying type as an existing type. The named type provides a way to separate different and perhaps incompatible uses of the underlying type so that they can’t be mixed unintentionally. type n...阅读全文

博文 2016-09-09 08:00:01 u013344915

那些我的代码中从不用的 Golang 特性 - 马特-莱亚

- 我不使用的关键字 我不用 goto goto 会让代码执行逻辑难以阅读和理解。 另外还可以使用 label 标记来组织代码 func main() { outer: for { log.Println("outer") for { log.Println("inner") break outer } } } 我不用 fallthroughgolang 的 switch 足够好用,不需要用 fallthrough 退化到其他语言的模式。 我不用 else 大部分的 else 可以用反转判断来实现。例如: if something.OK() { something.Lock() defer something.Unlock() err := something.Do() if err == ...阅读全文

Nil Channels 的作用

思考来源于一次忘记初始化channel,造成程序卡死。 查找资料发现操作nil channels会永远阻塞,这个特性看起来似乎没什么用,甚至可能造成BUG,但Golang为何要保留这个特性? Google之:关键字 golang nil channel 相关讨论还挺多 甚至还有新鲜的关于Go 2的提议:proposal: language: Go 2: panic on send/receive on nil channel 以及Nil Chan的用法: nil-channels-always-block why-are-there-nil-channels-in-go 目前来说,nil chan只会用在select块中,用来关闭分支...阅读全文

博文 2020-02-13 09:32:46 bysir

panic+recover golang 中的try catch

一、知识点、 1、用到go 关键字定位 2、用到defer 延后处理最终执行 3、panic,相当于try 4、recover ,相当于catch 5、内置函数说明: image.png 二、代码 、、、 package main import ( "fmt" "time" ) func serve(ch <-chan int) { for val := range ch { go handle(val) } } func handle(x int) { defer func() { if err := recover(); err != nil { fmt.Println("work failed at :", err) } }() if x == 4 { panic(x) } fmt.P...阅读全文

博文 2018-09-07 18:34:48 DamonYi

golang学习(3):go的流程和函数

一、流程控制 if 和其他语言没什么区别,只是判断语句不加括号,比如: if integer := 5; integer == 3 { fmt.Println("The integer is equal to 3") } else if integer < 3 { fmt.Println("The integer is less than 3") } else { fmt.Println("The integer is greater than 3") } goto 这个就神奇了,用goto跳转到必须在当前函数内定义的标签,上代码比较好: i := 5 here: i++ fmt.Println(i) if i < 10 { goto here } else { goto there } f...阅读全文

博文 2018-10-24 23:34:42 鲨鱼巨人

为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪

摘要: 1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了): Ø Row-based storage stores atable in a sequence of rows. Ø Column-based storage storesa table in a sequence of columns. 下面来看一个例子: 从上图可以很清楚地看到,行式存储下一张表的数据都是放在一起的,但列式存储下都被分开保存了。 **点此查看原文: http://click.aliyun.com/m/41691/** *...阅读全文

leetcode_22

Golang: 思路:还是递归吧,题目做少了还是很难想出思路的,但不想就直接看别人的,那你肯定进步不大。这题关键点在于想通这是个深度优先加回溯加剪枝,就没了。剪枝,当右括号的数目大于左括号,那就剪枝,当左括号大于n,剪枝。 代码如下: func generateParenthesis(n int) []string { var res []string getResults(2*n,&res,"",0,n) return res } func getResults(n int,res *[]string,temp string,flag int,left int){ if len(temp)==n{ *res=append(*res, temp) return } if flag>=0&&l...阅读全文

博文 2020-02-03 19:32:42 淳属虚构

rune的使用

一、定义 经常在开源库中,能rune关键字,从golang源码中看出,它是int32的别名(-231~231-1),对于byte(-128~127),可表示的字符更多。 二、使用 由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。所以通常在处理中文的时候,会用到。 package main import ( "fmt" "unicode/utf8" ) func main() { var chinese = "我是中国人, I am Chinese" fmt.Println("chinese length", len(chinese)) fmt.Println("chinese word length", len([]rune(chine...阅读全文

博文 2019-06-21 21:32:40 哆啦在这A梦在哪

Docker ps常用命令

查看 docker 容器,必然要用到 docker ps 命令。其基本格式为: docker ps [OPTIONS] 关键在于 OPTIONS(选项): image 1 常见用法 1. 最常见的用法 $ docker ps 显示当前正在运行的容器。 在 PORTS 一列,如果暴露的端口是连续的,还会被合并在一起,例如一个容器暴露了3个 TCP 端口:100,101,102,则会显示为 100-102/tcp。 2. 显示所有状态的容器 $ docker ps -a 容器的状态共有 7 种:created|restarting|running|removing|paused|exited|dead。 3. 显示最后被创建的 n 个容器 $ docker ps -n 3 注意,这里不限状态。 ...阅读全文

通过例子学习 Go 和 Rust ---- 闭包

闭包简而言之,是一段有状态的代码。咱试着用闭包来做一个计数器,每次调用,闭包的状态就加1. Go func intSeq() func() int { i := 0 return func() int { i++ return i } } func main() { nextInt := intSeq() fmt.PrintLn(nextInt()) fmt.PrintLn(nextInt()) fmt.PrintLn(nextInt()) } 1 2 3 Rust 由于编译时我们无法知道闭包的体积,所以用一个Box把它套起来。另外,闭包的具体类型是不可描述的,只能用dyn关键字来通过Trait来描述。 fn main() { fn int_seq() -> Box阅读全文

博文 2020-03-03 15:32:56 Tericoder

Go语言笔记:变量

变量指向一个内存地址,其中存储了某种类型的值。在静态语言中,此内存存储的变量类型不可变。 Go 中的变量如何声明? Go 变量声明可以指定哪些类型? Go 中如何实现类型的转换和断言? 1. Go 中的变量如何声明 使用 var 关键词声明变量,有以下几种可变形式: 简单的类型声明:var a int 声明并赋初值:var a int = 1 或 var a = 1 同时声明多个变量: var a, b = 1, 2 当声明初始值时,可以不用指定类型,Go 会根据赋值判断并自动定义变量的类型。 以下为变量声明的示例: package main import "fmt" func main() { var a int var b int = 2 var c = 3 var d, e = 4, ...阅读全文

golang 结构体

//结构体 package main import "fmt" // 用 type 关键字定义一个结构体 type person struct { name string age int } func main() { //实例化一个结构体 // 第一种情况 p1 := person{} p1.name = "小麦客" p1.age = 666 fmt.Println(p1.name) fmt.Println(p1.age) // 第二种情况 p2 := person{ name:"小麦客", age:666, } // %#v 打印详细信息 fmt.Printf("%#v\n", p2) } 结构体_结构体指针.pn...阅读全文

博文 2020-04-08 07:32:49 小麦客