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

一个有关Golang变量作用域的坑

一个有关Golang变量作用域的坑 一 13 bigwhite技术志 Go, Golang, scope, 作用域, 函数, 变量作用域, 坑 4 Comments 临近下班前编写和调试一段Golang代码,但运行结果始终与期望不符,怪异的很,下班前依旧无果。代码Demo如下: //testpointer.go package main import ( "fmt" ) var p *int func foo() (*int, error) { var i int = 5 return &i, nil } func bar() { //use p fmt.Println(*p) } func main() { p, err := foo() if err != nil { fmt.Print...阅读全文

博文 2015-01-20 09:24:46 bigwhite

一个有关Golang变量作用域的坑

自:http://tonybai.com/2015/01/13/a-hole-about-variable-scope-in-golang/ 临近下班前编写和调试一段Golang代码,但运行结果始终与期望不符,怪异的很,下班前依旧无果。代码Demo如下: //testpointer.go package main import ( "fmt" ) var p *int func foo() (*int, error) { var i int = 5 return &i, nil } func bar() { //use p fmt.Println(*p) } func main() { p, err := foo() if err != nil { fmt.Println(err) retu...阅读全文

博文 2015-06-02 04:00:05 sevenyuan

golang变量作用域问题-避免使用全局变量

最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿。 变量作用域 全局变量的作用域是整个包,局部变量的作用域是该变量所在的花括号内,这是一个很基础的问题。我们通常会使用golang的一个语法糖:=来给变量赋值,这种方式可以节省掉我们定义变量的代码,让代码变的更加简洁,但是如果你定义了一个全局变量,又不小心用:=来给它赋值,就会出现一些问题。 问题 看下面的代码,定义了一个全局变量t,我想在init()中给他赋值为2,然后在main中使用它。 var t int func init() { t, err := strconv.Atoi("2") if err != nil { log.Fatall...阅读全文

博文 2018-02-03 15:34:37 andyidea

03-Golang局部变量和全局变量

局部变量 在C语言中写在{}中或者函数中或者函数的形参, 就是局部变量 Go语言中的局部变量和C语言一样 全局变量 在C语言中写在函数外面的就是全局变量 Go语言中的全局变量和C语言一样 局部变量和全局变量的作用域 在C语言中局部变量的作用域是从定义的那一行开始, 直到遇到 } 结束或者遇到return为止 Go语言中局部变量的作用域和C语言一样 在C语言中全局变量的作用域是从定义的那一行开始, 直到文件末尾为止 Go语言中的全局变量, 只要定义了, 在定义之前和定义之后都可以使用 局部变量和全局变量的生命周期 在C语言中局部变量, 只有执行了才会分配存储空间, 只要离开作用域就会自动释放, C语言的局部变量存储在栈区 Go语言局部变量的生命周期和C语言一样 在C语言中全局变量, 只要程序一...阅读全文

博文 2018-10-07 16:34:39 箩篼

Go 语言中你应该知道的关于 Package 的所有

*一个 Go 编程语言的包管理及应用的全面概述* 如果你对像 **Java** 或者 **NodeJS** 这样的语言熟悉,那么你可能对**包**(译者注:原文中 **packages** ,后文中将其全部译为中文出现在文章表述中)相当熟悉了。包不是什么其他的,而是一个有着许多代码文件的目录,它从单个引用点显示不同的变量(特征)。让我来解释一下,这是什么意思。 设想在某个项目上工作,你需要不断的修改超过一千个函数。这之中的一些函数有相同的行为。比如,`toUpperCase` 和 `toLowerCase` 函数转变 `字符串` 的大小写,因此你把它们写在了一个单独的文件(*可能*是 **case.go**)里。也有一些其他的函数对 `字符串` 数据类型做一些其他操作,因此你也把它们写在了独...阅读全文

博文 2018-12-08 10:00:08 yixiaoer

go-parser-语法分析

每一种语言都会有一个定义良好的语法结构.函数是由申明和语句构成的,而语句又是由表达式构成的.经常用来描述语法的是BNF[1].Go使用的是相应的变种,在Go的官方文档中有很详细的spec描述[2].一门语言的设计其实就在这份描述当中,这是一门语言的语法和规则的定义,是表面程序员可以接触到的部分,而运行时却可以改变,这相当于和程序员约定的接口,只要按照这个接口编写源代码,就能产生正常可以编译的二进制文件,但是最后的二进制文件如何运行,对于每条语法转换成了什么,有什么优化都是编译器优化和运行时的工作.所以一门语言必须有一个详尽的描述,这和一个网络协议一样,是非常重要的部分. 语法分析器也是有工具可以自动生成的,比如yacc[3].我在之前提到过使用工具的利弊,就不赘述了. 本文主要看一下Go的语...阅读全文

博文 2016-04-12 10:32:40 yueyue.gao

Golang面试题解析(二)

12.是否可以编译通过?如果通过,输出什么? func main() { i := GetValue() switch i.(type) { case int: println("int") case string: println("string") case interface{}: println("interface") default: println("unknown") } } func GetValue() int { return 1 } 解析 考点:type 编译失败,因为type只能使用在interface 13.下面函数有什么问题? func funcMui(x,y int)(sum int,error){ return x+y,nil } 解析 考点:函数返回值命名...阅读全文

博文 2017-08-24 12:33:17 梦朝思夕

Go语言流程控制语句if、goto、for、switch

最近在看go语言,虽然网上大多数的评论都是在吐槽go语言,但是我喜欢简单的东西,我不拿它和任何语言去比,去用每一种语言完全是自己兴趣问题。 还没开始就跑题了 ~~!回到标题上来,golang的流程控制,刚开始学go,记性一直都不怎么好,做个笔记 流程控制包含三大类:条件判断、循环控制和无条件跳转。 if go语言的if package main import ( "fmt" ) func main() { if a := 8; a > 2 { fmt.Println("a 比 10 大") } else { fmt.Println("a 比 10 小") } } 输出 a 比 2 大 if语句允许在if里面声明变量,但是这个变量的作用域只在该条件逻辑块内。 goto package main...阅读全文

博文 2014-10-06 06:16:32 guhao022

Go的变量到底在堆还是栈中分配

Go的变量到底在堆还是栈中分配 2015-10-22 最近试着优化掉一些小对象分配,发现一个很诡异的问题:这段代码会在堆上分配对象! package main import ( "fmt" ) func main() { var a [1]int c := a[:] fmt.Println(c) } 看汇编代码 go tool compile -S test.golang "".main t=1 size=336 value=0 args=0x0 locals=0x98 0x0000 00000 (test.go:7) TEXT "".main(SB), $152-0 0x0000 00000 (test.go:7) MOVQ (TLS), CX 0x0009 00009 (test.go:...阅读全文

博文 2016-07-20 13:27:37 zenlife

Golang关键字—— if/else

Golang中,if/else 关键字用于条件判断,如果满足条件就做某事,否则做另一件事: if age >= 18 { fmt.Println("成年人") } else { fmt.Println("未成年") } 多重判断: if score >= 90 { fmt.Println("优秀") } else if score >= 70 { fmt.Println("良好") } else if score >= 60 { fmt.Println("一般") } else { fmt.Println("差") } Golang允许在条件判断语句里声明一个变量,该变量的作用域只在该条件逻辑块内: if score := 40; score >= 90 { fmt.Println("优秀:...阅读全文

博文 2015-05-21 10:00:00 nianhua

Golang: 条件和循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chao2016/article/details/81530195 条件、循环要点 for, if后面的条件没有括号 if条件里也可以定义变量 没有while switch不需要break,也可以直接switch多个条件 1. branch.go: package main import ( "io/ioutil" "fmt" ) // switch会自动break,除非使用fallthrough;可以swich多条件;panic()报错让程序终止 func grade(score int) string { g := "" switch { case score < 0 || score > ...阅读全文

博文 2019-01-16 18:31:35 chao2016

Go 中的 import 声明

Go 中的程序由各种包组成。通常,包依赖于其它包,这些包内置于标准库或者第三方。包首先需要被导入才能使用包中的导出标识符。这是通过结构体调用 *import 声明* 来实现的: ```go package main import ( "fmt" "math" ) func main() { fmt.Println(math.Exp2(10)) // 1024 } ``` 上面我们有一个 import 导入的例子,其中包含了两行导入声明。每行声明定义了单个包的导入。 > 命名为 **main** 的包,是用来创建可执行的二进制文件。程序的执行是从包 **main** 开始,通过调用包中也叫做 **main** 的函数开始。 但是,还有其它一些鲜为人知的导入用法,这些用法在各种场景下都很实用: ...阅读全文

博文 2018-09-27 23:10:35 polaris

使用 Go 语言来理解 Tensorflow

文出处: P. Galeone 译文出处:雁惊寒 译者注:本文通过一个简单的Go绑定实例,让读者一步一步地学习到Tensorflow有关ID、作用域、类型等方面的知识。以下是译文。 Tensorflow并不是机器学习方面专用的库,而是一个使用图来表示计算的通用计算库。它的核心是用C++实现的,并且还有不同语言的绑定。Go语言绑定是一个非常有用的工具,它与Python绑定不同,用户不仅可以通过Go语言使用Tensorflow,还可以了解Tensorflow的底层实现。 绑定 Tensorflow的开发者正式发布了: C++源代码:真正的Tensorflow核心,实现了具体的高级和低级操作。 Python绑定和Python库:这个绑定是由C++实现自动生成的,这样我们可以使用Python来调用C...阅读全文

博文 2017-07-22 06:02:53 伯乐在线

Go 中的标签

`Label` 在 `break` 和 `continue` 语句中是可选参数,而在 `goto` 语句中是必传的参数。`Label` 只在声明它的函数中有效。只要函数中声明了 `Label` ,那它在该函数的整个作用域都有效。 ```go func main() { fmt.Println(1) goto End fmt.Println(2) End: fmt.Println(3) } ``` (注意!我们是在 goto 语句之后定义的 `Label`) ```shell > ./bin/sandbox 1 3 ``` 这里所指的作用域不包括嵌套函数的作用域: ```go func() { fmt.Println(“Nested function”) goto End }() End: `...阅读全文

博文 2018-05-06 22:11:44 saberuster

[golang基础] 局部变量初始化:=

一 基础用法 操作 := 只能用于方法内部, 声明并初始化新的变量 v := 3 但是不能用于已声明变量赋值, 下面的做法编译器会报错误"no new variables on left side of :=" var v int = 0 v := 1 通过错误可以了解到, := 操作左边必须要有新变量, 那么多个变量初始化只需要满足左边至少有一个新变量即可 err := errors.New("error1") ret, err := test_fun() 这种做法是合法的, 因为ret是新变量, 这样就很方便了, 因为go方法经常会返回错误err, 那么在同一个方法内 只需要声明一个err变量即可 二 :=陷阱 由于:=只能用于局部变量, 那么下面的代码会发生什么情况呢? var out...阅读全文

博文 2015-03-01 03:00:01 thinear

go的Type switch是一个switch语句么?

相信这样的语句在go中大家见的很多 switch t := arg.(type) { default: fmt.Printf("unexpected type %T\n", t) // %T prints whatever type t has case bool: fmt.Printf("boolean %t\n", t) // t has type bool case int: fmt.Printf("integer %d\n", t) // t has type int case *bool: fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool case *int: fmt.Printf("pointer to i...阅读全文

博文 2015-12-15 21:00:07 baizx

GO語言基礎教程:流程控制

在開始一個新的章節之前先來回顧上一篇文章的部份,首先我們來看這段代碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "fmt" ) func main(){ var x,y int=1,2 { var x int=2 { var x int=3 fmt.Println(x,y) //首先輸出3,2 如果我把這行輸出語句注解掉,大家猜猜會如何? } fmt.Println(x,y) //其次輸出2,2 } fmt.Println(x,y) //最後輸出1,2 } 執行結果我已經加到註釋內了,其實沒必要好奇,GO語言就是如此,這種突然出現的大括號構成了複合語句,大括號內的變量作用範圍只能在變量內部,這就涉及到變量的作用...阅读全文

go语言流程控制,函数等

一、if语句 if 语句没有圆括号,而必需要有花括号跟条件和 else在同一行 例: if myVar > 1 { myVar = 1 myVar1++ return } else { myVar = 3 myVar1-- return } if的条件中可以添加一句初始化语句,用”;” 分隔 if c:=1;myVar > 1 { myVar = 1 } 此变量c的作用域是在后面的{}内的。外面是不可见,同时如果不在后面使用也是会编译错误的。 [it招聘][1] 二、switch语句 跟一般语言不一样 case 匹配后,不会再往后匹配,如果要向后匹配,添加语句...阅读全文

Go语言5大基本数据类型解析

/*码农网底部横幅*/ var cpro_id = "u1635067"; Go语言目前也比较热门,本文主要来讨论一下Go语言的5大基本数据类型以及其使用方法。Go语言的基本数据类型包括注释、标识符、常量、变量以及布尔值,下面我们逐一来对这些数据类型进行分析。 1、注释(与C++一样) 行注释://块注释:/* …*/ 2、标识符 可以这么说,除了数字开头的不允许,符号开头的不允许,关键字不允许,其他的Unicode字符组合都可以。“_33”也可以是标识符、“我们”也可以是标识符。标识符也区分大小写。 (1)、以大写字母开头的标识符是公开的。(这个很有意思) (2)、其他任何标识符都是私有的。 (3)、空标识符“_”是一个占位符,用于赋值操作的时候,丢弃、忽略某个值。通常这样用: go的方法...阅读全文

博文 2015-03-11 14:12:24 codeceo

go语言 golang defer 关注点

大家都了解C++有构造函数和析构函数,加之每一个栈对象都有其严格的作用或,离开则自动调用其析构函数,以此来保证释放其掌控的资源,如:内存,文件,socket,数据库链接等, 其它一些语言提供类似的机制,如: init, deinit等, 那么对于追求大道至简的golang, 她没有提供构造函数和析构函数的概念, 但是她也不可避免要处理资源的自动释放问题, 所以其提供了defer, 如: defer f() 用于延迟调用f(), 当此语句所在函数执行完(return执行完)后,开始以“后进先出”的顺序执行defer语句。但是defer不是一定会被执行的,我简单归总了一下,怕我以后忘记, 见测试代码: package main import ( "fmt" //"log" //"os" ) fu...阅读全文

博文 2016-03-06 14:00:00 htyu_0203_39

Go1.6与JVM CMS的垃圾回收对比

自从Go1.5引入了真正的并发GC后, Go1.6进一步进行了优化,使得Go在上百G级的堆大小时依然能将STW时间控制在20ms以内: 而Java8的G1收集器,默认参数下在100G以上的heap下,会造成秒级的STW。虽然可以通过-XX:MaxGCPauseMillis调整,但是是以牺牲大量吞吐量为代价。这里浅析一下Go能做到比G1更短的STW的原因。 轮流挂起协程 JVM的CMS收集器在工作时,大致分为4个阶段: 初始标记 并发标记 重新标记 并发清除 其中1, 3 是需要STW的阶段,CMS的停顿也是由这2个阶段引发的。Go1.5中的CMS也分为这些阶段,其中1, 3同样需要STW。那为什么Go会停顿时间更少呢?原因是,Go的CMS在第3阶段并不是挂起所有goroutine,而是轮流挂...阅读全文

博文 2016-04-21 19:00:01 tracker_w

Golang 中 defer 的五个坑 - 第二部分

本文承接[第一部分](https://studygolang.com/articles/12061)的内容继续讲解 defer 的一些常见陷阱 ## 1——Z 到 A(译注:倒序) 当你第一次学习 Go 的时候可能会中招。 例子 ```go func main() { for i := 0; i < 4; i++ { defer fmt.Print(i) } } ``` 输出 Go 的运行时会将延迟执行的函数保存至一个栈中(译注:意味着它们会按照入栈的顺序倒序执行)。想了解更多,请阅读这篇 [文章](https://blog.learngoprogramming.com/golang-defer-simplified-77d3b2b817ff#702e) [GCTT 出品的译文:图解 Go ...阅读全文

博文 2018-01-10 12:59:48 polaris

Go语言“:=”用法浅析

Go语言中可以使用“:=”为一个新的变量完成声明以及初始化的工作,如下例所示: i := 1 等价于: var i = 1 要注意语句中没有变量类型,不是var i int = 1。 “:=”不能重新声明一个已经声明过的变量,如下例所示: package main import "fmt" func main() { var i = 1 i := 2 fmt.Println(i) } 编译结果: C:/Go\bin\go.exe run C:/Work/go_work/Hello.go # command-line-arguments .\Hello.go:8: no new variables on left side of := 错误的原因是变量被重复声明了。 但使用“:=”为多个变量赋...阅读全文

博文 2017-06-24 19:13:13 肖楠

用 Go 语言理解 Tensorflow

文地址:Understanding Tensorflow using Go 原文作者:Paolo Galeone 译文出自:掘金翻译计划 译者:lsvih 校对者:whatbeg,yifili09 用 Go 语言理解 Tensorflow Tensorflow 并不是一个严格意义上的机器学习库,它是一个使用图来表示计算的通用计算库。它的核心功能由 C++ 实现,通过封装,能在各种不同的语言下运行。它的 Golang 版和 Python 版不同,Golang 版 Tensorflow 不仅能让你通过 Go 语言使用 Tensorflow,还能让你理解 Tensorflow 的底层实现。 封装 根据官方说明,Tensorflow 开发者发布了以下内容: C++ 源码:底层和高层的具体功能由 C ...阅读全文

博文 2017-12-09 04:01:13 掘金

Less变量详解

  普通的变量   Css默认不支持变量,当我们使用less之后就可以使用。   其定义方式是 @变量名:值 ,如下,我们定义一个变量green,设置一个颜色green,然后将网页背景设置为绿色:   @green: #801f77;   header {   background: @green;   }   注意:由于变量只能定义一次,实际上他们就是“常量”   作为选择器和属性名   使用时将变量以@{变量名}的方式使用,使用例子如下:   作为选择器和属性名的变量   @kuandu:width;   .@{kuandu}{   @{kuandu}:150px   }   注意:这里的变量即使选...阅读全文

Go 语言 与 C 语言 的比较学习

目录(?)[-] 关键字 操作符 变量 指针 函数 返回值 闭包 PO 编程规范 OO 并发 项目管理 对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受! 关键字 分类CGo 字符 char 无 字符串 无 string 浮点数 double , float float32 , float64 , complex64 , complex128 整数 int long short uint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , run...阅读全文

博文 2015-04-13 20:00:01 xuybin

Golang 包单例模式小记

学习golang也有一段时间了,但是对包的概念不是很清楚,这里模拟一个单例的实现 加深了对包的理解,包中变量作用域的使用 对包全局变量作用域有了理解 目录结构 mian方法 main.go package main import ( "log" "p/p1" _ "t" ) func main() { log.Print("-------下面是main-------") p1.Say() } 包 t t.go package t import ( "p/p1" ) func init() { a := p1.NewPeople() a.SetName("tttttttt") a.SetAge(188) p1.Say() } 包p/p1 p1.go package p1 import ( "l...阅读全文

博文 2016-05-14 10:00:00 soulsu

一:Go编程语言规范--块、声明、作用域

1.块 块为一对大括号括住的声明和语句。块 = "{" { 语句 ";" } "}" . 除显式源码块外,还有隐式块: 全域块 包含所有的Go源码文本。 每个包都有包含其所有Go源码文本的 包块。 每个文件都有包含其所有Go源码文本的 文件块。 每个 if、for 和switch 语句都被视为处于其自身的隐式块中。 每个 switch 或 select 语句中的子句其行为如同隐式块。 块可嵌套并会影响作用域。 2.标识符 标识符被用来命名程序实体,例如变量和类型。一个标识符由一个或多个字母和数字组成。 标识符的第一个字符必须是字母。 给定一个标识符集,若其中一个标识符不同于该集中的任一标识符,那么它就是唯一的。 若两个标识符拼写不同,或它们出现在不同的包中且未 导出,那么它们就是不同的。否则...阅读全文

博文 2015-09-28 03:00:06 cyzsoho

Google Guice

Guice (读作"juice")是超轻量级的,下一代的,为Java 5及后续版本设计的依赖注入容器。简介Java企业应用开发社区在连接对象方面花了很大功夫。你的Web应用如何访问中间层服务?你的服务如何连接到登录用户和事务管理器?关于这个问题你会发现很多通用的和特定的解决方案。有一些方案依赖于模式,另一些则使用框架。所有这些方案都会不同程度地引入一些难于测试或者程式化代码重复的问题。你马上就会看到,Guice 在这方面是全世界做得最好的:非常容易进行单元测试,最大程度的灵活性和可维护性,以及最少的代码重复。我们使用一个假想的、简单的例子来展示 Guice 优于其他一些你可能已经熟悉的经典方法的地方。下面的例子过于简单,尽管它展示了许多显而易见的优点,但其实它还远没有发挥出 Guice 的全...阅读全文

博文 2015-10-20 09:00:01 douxn

GO語言基礎教程:流程控制

在開始一個新的章節之前先來回顧上一篇文章的部份,首先我們來看這段代碼: package main import ( "fmt" ) func main(){ var x,y int=1,2 { var x int=2 { var x int=3 fmt.Println(x,y) //首先輸出3,2 如果我把這行輸出語句注解掉,大家猜猜會如何? } fmt.Println(x,y) //其次輸出2,2 } fmt.Println(x,y) //最後輸出1,2 } 執行結果我已經加到註釋內了,其實沒必要好奇,GO語言就是如此,這種突然出現的大括號構成了複合語句,大括號內的變量作用範圍只能在變量內部,這就涉及到變量的作用域了,在PHP中變量也是有作用域的,但是PHP遇到這種突然出現的大括號時不會構...阅读全文

Go 的语句块

声明会给标识符绑定值,例如包、变量、类型等等。完成声明后,有必要知道源码中的标识符在哪些地方引用了被指定的值(简单来讲,就是一个标识符在哪里是可用的)。 Go 属于词法作用域,所以标识符的解析会依赖于它在代码中声明的位置。这种方式和动态作用域语言截然不同,动态作用域语言中标识符的可见性不依赖于被声明的位置。看看下面这段 bash 脚本: ```bash #!/bin/bash f() { local v=1 g } g() { echo "g sees v as $v" } h() { echo "h sees v as $v" } f g h ``` 变量 v 是在函数 f 中定义的,但由于函数 g 被函数 f 调用,所以函数 g 可以访问 v: ``` > ./scope.sh g se...阅读全文

博文 2018-03-20 14:20:32 polaris

译:go’s block and identifiers scope

go 代码块和标识符作用域 (go’s block and identifiersscope) 一、 Blocks A block is a possibly empty sequence of declarations andstatements within matching brace brackets. 语句块(blocks)由闭合的大括号包裹,里面可能包含空的声明或者语句;block与作用域密切相关,见下章节。 Block = "{" StatementList "}" . StatementList = { Statement ";" }. In addition to explicit blocks in the source code, thereare implicit b...阅读全文

博文 2014-10-16 09:00:00 hittata

关于在 Go 代码中使用退避方法,啰嗦几句(Yak Shaving With Backoff Libraries in Go)

我相信你有过调用 API 接口需要使用退避算法的时候。在 Go 语言现有技术中,有 [github.com/cenkalti/backoff](https://github.com/cenkalti/backoff),[github.com/jpillora/backoff](https://github.com/jpillora/backoff),和其它库可以使用。 我曾经使用过 [github.com/cenkalti/backoff](https://github.com/cenkalti/backoff),但是有一件让我感到困惑的事:它要求你为操作加上闭包,强制输入为 func() error 的形式。 举个例子,当你需要一个可以自动重试的函数(如下面的 myFunc 函数),返回 ...阅读全文

博文 2018-03-09 11:37:41 gogeof

Go 语言变量作用域

Go 语言变量作用域作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。Go 语言中变量可以在三个地方声明:函数内定义的变量称为局部变量函数外定义的变量称为全局变量函数定义中的变量称为形式参数接下来让我们具体了解局部变量、全局变量和形式参数。局部变量在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。以下实例中 main() 函数使用了局部变量 a, b, c:package main import "fmt" func main() { /* 声明局部变量 */ var a, b, c int /* 初始化参数 */ a = 10 b = 20 c = a + b fmt.Printf ("结果: a = %d, b = %d...阅读全文

博文 2016-03-05 06:00:00 u011225629

golang比较方便的地方

golang比较方便的地方 GO在自定义类型,数组,变量覆盖,函数变量等方面比较方便。 IsXXX GO中很方便在基本类型上定义新的类型,这个虽然是个小东西,但是有时候非常好用。 经常需要定义这样的函数,譬如RTMP的消息IsAudio,IsVideo等等。如果是C++就需要定义个结构体,然后加函数: class SrsCommonMessage { public: SrsMessageHeader header; }; class SrsMessageHeader { public: int8_t message_type; public: bool is_audio(); bool is_video(); }; #define RTMP_MSG_AudioMessage 8 // 0x0...阅读全文

博文 2015-11-27 17:00:01 winlinvip

学习Golang语言(5)

1、for Go 只有一种循环结构——`for` 循环。 基本的 for 循环除了没有了 `( )` 之外(甚至强制不能使用它们),看起来跟 C 或者 Java 中做的一样,而 `{ }` 是必须的。 2、for(续) 跟 C 或者 Java 中一样,可以让前置、后置语句为空。 3、for 是 Go 的 “while” 基于此可以省略分号:C 的 while 在 Go 中叫做 `for`。 4、死循环 如果省略了循环条件,循环就不会结束,因此可以用更简洁地形式表达死循环。 5、if if 语句除了没有了 `( )` 之外(甚至强制不能使用它们),看起来跟 C 或者 Java 中的一样,而 `{ }` 是必须的。 (耳熟吗?) 6、if 的便捷语句 跟 for 一样,`if` 语句可以在条件之...阅读全文

博文 2015-01-22 20:00:04 lz0426001

golang 如何选择 T 和 *T

在定义函数和方法的时候,作为一位资深的Go开发人员,一定会对函数的参数和返回值定义成T和*T深思熟虑,有些情况下可能还会有些苦恼。那么什么时候才应该把参数定义成类型T,什么情况下定义成类型*T呢。一般的判断标准是看副本创建的成本和需求。 1. 不想变量被修改。 如果你不想变量被函数和方法所修改,那么选择类型T。相反,如果想修改原始的变量,则选择*T 2. 如果变量是一个大的struct或者数组,则副本的创建相对会影响性能,这个时候考虑使用*T,只创建新的指针,这个区别是巨大的 3. (不针对函数参数,只针对本地变量/本地变量)对于函数作用域内的参数,如果定义成T,Go编译器尽量将对象分配到栈上,而*T很可能会分配到堆上,这对垃圾回收会有影响reference: https://colobu....阅读全文

博文 2019-07-12 18:32:39 Michael_001

go - 流程控制

流程控制 条件: if else else if switch循环: for跳转: goto 关键字: break continue fallthrough range 1. 条件 1.1 if else 1.1.1语法: if [声明变量;] condition1 { //... [} else if condition2 {] //... [} else {] //... } 1.1.2 注意: a. []中的内容为可选,if 条件判断中可以声明变量 := b. {}是必须的, condition 不需要用()括起来, {必须与else/if在同一行代码中 c. 在有返回值函数中,不允许把“最终的” return 语句放到if else 结构中,否则编译出错 1.2 switch 就是多...阅读全文

博文 2014-10-17 15:00:00 chuangrain

阿里云ecs搭建ngrok内网穿透服务器,解决微信开发联调https域名问题

环境准备 阿里云ecs服务器(例如47.101.41.231) image.png . 配置公网入口安全组 image.png .配置安全组规则 如果是对所有ip开放端口的话,授权对象可以设置为0.0.0.0/0 image.png .准备域名 这里是一级基础域名例如mydomain.com,这个域名是顶级域名很多应用都需要使用,像jenkins.mydomain.com/nginx.mydomain.com/wechat.mydomain.com等等 image.png 在域名解析中配置域名的解析规则(例如二级域名,ngrok-dev) 这里特别注意的是二级域名,已经二级域名下的所有子域名的解析规则一定都要配置到ngrok的服务器 ngrok-dev.mydomain.com 解析到47....阅读全文

博文 2019-05-09 17:49:38 _白小飞

go结构体的使用

go中的struct可以实现oop中的类、方法。go语言中的struct成员可以是任何类型,如普通类型、复合类型、函数、struct、interface等。 入门 //定义 type User struct { name string email string password string } //声明 var user User var userref *User fmt.Println(user) //{} 默认初始化为零值 fmt.Println(userref) // 未初始化 userref = new(User) fmt.Println(userref) //&{ } //初始化 user = User{name: "liming", email: "liming@g...阅读全文

博文 2017-01-09 14:00:01 davidsu33

[go语言]初学者需要注意的问题-变量的作用域

go语言支持多变量同时赋值或者初始化,这是一个很方便的特性。它也允许使用:=操作符同时声明部分新变量,并且给已有变量赋值,这会带来一些需要注意的问题,一不小心就产生bug。 看一段代码: package main import "fmt" func main(){ a, b := 1, 2 b, c := 3, 4 fmt.Println(a, b, c) } 这里“b, c:= 3, 4”语句是给已有变量b赋值,同时把一个新变量c初始化为4,因此程序的输出结果是: 1 3 4 但是如果这行语句是在另外一个代码块里,效果就不一样了。 package main import "fmt" func main(){ a, b := 1, 2 if true { b, c := 3, 4 fmt.P...阅读全文

博文 2014-10-29 18:17:06 stevewang

什么是闭包,闭包的作用与好处是什么,何时使用闭包,对闭包的改进

闭包:外部函数定义的内部函数就是闭包。 闭包的作用及好处:闭包给访问外部函数定义的内部变量创造了条件。也将关于函数的一切封闭到了函数内部,减少了全局变量,这也是闭包的真实含义。 与普通函数的区别: 1,普通函数也能曝光内部的值。方法A定义全局变量,但占用的内存无法释放且函数使用的变量定义到了函数外部不便于理解和管理。方法B将内部变量当参数传递,此种方法不美观太丑陋。 2,函数每次执行时都会且只会初始化其内部变量,导致了闭包与普通函数的最大区别。就是每次调用普通函数时它内部都被初始化成一致状态,导致执行的结果是一致的。闭包不同,它的本质是内部函数,调用闭包只会初始化内部函数变量,外部函数的变量没有被初始化,实现了变量...阅读全文

Golang cookie使用

cookie设置和获取使用方法 func HttpCookies() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { cName := http.Cookie{ Name: "name", // cookie的名称 Value: "golang", // cookie名称对应的值 Path: "/", // Domain: "", // cookie的作用域 Expires: time.Time{}, // cookie的过期时间 RawExpires: "", MaxAge: 0, // 设置过期时间,对应浏览器cookie的MaxAge属性 Secure: false, // 设置Secure属性...阅读全文

博文 2020-03-29 01:33:08 是个懒人

Golang学习笔记:语言规范之声明与作用域

类型声明包括:常量、自定义类型、变量、函数、标签、还有包声明。 程序中的标识符都必须声明。块、包、文件中的标识符不能重复。 Declaration = ConstDecl | TypeDecl | VarDecl . TopLevelDecl = Declaration | FunctionDecl | MethodDecl . 标签作用域 标签是在标签语句中使用,常用在break、continue、goto语句中。定义了标签但不使用是非法的。与其他标识符相比,标签是非块作用域,不会与其他非标签标识符有冲突。 预声明标识符 如下的标识符在golang中已保留 Types: bool byte complex64 complex128 error float32 float64 int int...阅读全文

博文 2016-01-16 18:00:07 scherrer

Go 语言 与 C 语言 的比较学习

对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受! 关键字 分类 C Go 字符 char 无 字符串 无 string 浮点数 double , float float32 , float64 , complex64 , complex128 整数 int long short uint8 , uint16 , uint32 , uint64 , int8 , int16 , int32 , int64 , uint , int , uintptr , byte = uint8 , rune=unit32 bool 无 boolean true , false 函数 无 func 接口 ...阅读全文

博文 2015-04-11 15:00:00 cchd0001

Golang的init函数

Golang的init函数 转载:https://zhuanlan.zhihu.com/p/34211611 大家都知道golang里的main函数是程序的入口函数,main函数返回后,程序也就结束了。golang还有另外一个特殊的函数init函数,先于main函数执行,实现包级别的一些初始化操作,今天我们就深入介绍下init的特性。 init函数的主要作用: 初始化不能采用初始化表达式初始化的变量。 程序运行前的注册。 实现sync.Once功能。 其他 init函数的主要特点: init函数先于main函数自动执行,不能被其他函数调用; init函数没有输入参数、返回值; 每个包可以有多个init函数; 包的每个源文件也可以有多个init函数,这点比较特殊; 同一个包的init执行顺序,...阅读全文

博文 2019-02-21 19:34:46 raincoffee

go语言资料集合

go语言资料集合 Go语言核心技术(卷一)之2.1-整数 Mac系统搭建Go语言Sublime Text 2环境配置 go语言实现排序算法 Go语言核心技术(卷一)之1.5-作用域 Go语言核心技术(卷一)之1.4-包和文件 Go语言核心技术(卷一)之1.3-赋值及类型声明篇 在go语言中优雅退出goroutines Go语言以匿名组合的方式实现继承 Go语言核心技术(卷1):基本单元1 Go语言核心技术(卷1):基本单元2 Go语言核心技术(卷一):序-必读 Go语言核心技术(卷1):Go的基本单元1 Go语言核心技术(卷1):序-必读 golang go语言与C语言互调,通过cgo Go语言学习4:Slices Go语言黑魔法中的问题修正 Go语言用堆排序的方法进行一千万个int随机数排...阅读全文

博文 2016-03-16 18:00:01 daisongwan