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

go语言:flag的使用

go语言flag的使用 package main import ( "flag" "fmt" ) var music_file *string = flag.String("file", "musicfile", "Use -file ") func main() { flag.Parse() fmt.Println(*music_file) } 例如文件为flagTest.go go run flagTest.go -file "../music/sun.mp3" 即可指定file参数的值。 如果直接使用go run flagTest.go -file则会提示你-file的使用说明.-file="musicfile": Use -file 如...阅读全文

博文 2014-10-21 23:00:00 x369201170

go语言函数作为参数传递

go语言函数作为参数传递,目前给我的感觉几乎和C/C++一致。非常的灵活。 import "fmt" import "time" func goFunc1(f func()) { go f() } func goFunc2(f func(interface{}), i interface{}) { go f(i) } func goFunc(f interface{}, args... interface{}) { if len(args) > 1 { go f.(func(...interface{}))(args) } else if len(args) == 1 { go f.(func(interface{}))(args[0]) } else { go f.(func())() }...阅读全文

博文 2015-04-03 03:00:00 rojas

golang os.Args

package main import( "os" "fmt" ) func main(){ if len(os.Args)!=0{ fmt.Println(os.Args[0])// args 第一个片 是文件路径 } fmt.Println(os.Args[1]) // 第二个参数是, 用户输入的参数 例如 go run osdemo01.go 123 } /* 结果 C:\Users\lyl\AppData\Local\Temp\go-build048711186\command-line-arguments\_obj\exe\osdemo01.exe 123 *...阅读全文

博文 2017-11-15 09:03:06 304158

golang模板语法简明教程

【模板标签】 模板标签用"{{"和"}}"括起来 【注释】 {{/* a comment */}} 使用“{{/*”和“*/}}”来包含注释内容 【变量】 {{.}} 此标签输出当前对象的值 {{.Admpub}} 表示输出Struct对象中字段或方法名称为“Admpub”的值。 当“Admpub”是匿名字段时,可以访问其内部字段或方法,比如“Com”:{{.Admpub.Com}} , 如果“Com”是一个方法并返回一个Struct对象,同样也可以访问其字段或方法:{{.Admpub.Com.Field1}} {{.Method1 "参数值1" "参数值2"}} 调用方法“Method1”,将后面的参数值依次传递给此方法,并输出其返回值。 {{$admpub}} 此标签用于输出在模板中定义...阅读全文

博文 2015-05-13 12:00:01 ____追梦人

golang执行linux命令

golang exec 执行系统命令 golang 2014-09-25 13:17:44 2779 0 0 exec.Command() 最简单的方法: cmd := exec.Command("/bin/sh/", "-c", "linux命令") 或复杂的, 各个参数都要单独写 cmd := exec.Command("ls", "-l", "-a") package main import ( "bytes" "fmt" "os/exec" ) func main() { in := bytes.NewBuffer(nil) cmd := exec.Command("sh") cmd.Stdin = in go func() { in.WriteString("echo hello ...阅读全文

博文 2016-08-31 17:00:02 zhangym

golang时间格式化

golang中如何输入当前时间 package main import( "fmt" "time" ) func main(){ t := time.Now() y,m,d := t.Date() today := time.Now().Format("2006-01-02") datetime := time.Now().Format("2006-01-02 15:04:05")//后面的参数是固定的 否则将无法正常输出 fmt.Println("time is : ",t ) fmt.Println("y m d is : ",y,m,d ) fmt.Println("now is :",today) fmt.Println("now is :",datetime) ...阅读全文

博文 2015-06-17 20:04:06 herohenu

go语法:channel作为参数的传递

在声明channel对象的参数时,一定要写成 c chan xxx,xxx代表channel的类型。例如 package main import ( "fmt" //"time" ) func main() { c := make(chan bool, 1) for i := 0; i < 10; i++ { go Go(c, i) } <-c } func Go(c chan bool, index int) { sum := 0 for i := 0; i < 1000000; i++ { sum += i } fmt.Println(sum) c <- true } 这里的chan C变量是bool类型,所以需要在声明方法的参数时,也要加上这个bool类型。 这点跟java有所不同,刚...阅读全文

博文 2015-06-18 09:03:53 x369201170

golang中string与byte的转换

某些场景下,函数参数需要byte类型的,已知参数是string类型的,那怎么由string类型转换成byte类型呢,比如:bufio.ReadSlice的第二个参数就是byte类型的:func(b *Reader)ReadSlice(delimbyte) (line []byte, errerror)可以通过两个方法由string得到byte,第一个是: 注意到,这里的G既不是""双引号又不是``这种go里面字符串引起来的,而是普通的单引号。第二种方法是: 这种曲折的方法,先转成[]byte,然后再取第一个...阅读全文

博文 2017-08-17 12:05:06 舒小贱

golang http请求数据怎么传body体参数

```res, err := http.PostForm("https://127.0.0.1:8443/api/test.action", req.Form)``` 通过http.PostForm可以请求到地址,但是参数不是以body体传过去,是还要设置什么吗?学生党不太了解... ``` {"baseId":["16149460-5984-4ea0-9308-835b804d063f"],"datetime":["20170401"],"userId":["51"]} {"code":1,"data":"parse param failed","errorMsg":"网络异常"} ``` ***req.Form***中有这些参数,接口是只接收body体的请求,如果bo...阅读全文

Go语言的参数解析(flag)

flag参数解析,我原以为会了,结果今天发现,原来比我印象中还强大些. 索性记一下. 第一个例子是常见用法: //Flag例1 //author:Xiong Chuan Liang //date:2015-4-10 package main import ( "flag" "fmt" "os" ) var ( levelFlag = flag.Int("level", 0, "级别") bnFlag int ) func init() { flag.IntVar(&bnFlag, "bn", 3, "份数") } func main() { flag.Parse() count := len(os.Args) fmt.Println("参数总个数:",count) fmt.Println("...阅读全文

博文 2015-04-14 19:00:10 xcltapestry

Go语言的传参和传引用

传参和传引用的问题 很多非官方的文档和教材(包括一些已经出版的图书), 对Go语言的传参和引用的讲解 都有很多问题. 导致众多Go语言新手对Go的函数参数传参有很多误解. 而传参和传引用是编程语言的根本问题, 如果这个问题理解错误可能会导致很多问题. 传slice不是传引用! 首先, Go语言的函数调用参数全部是传值的, 包括 slice/map/chan 在内所有类型, 没有传引用的说法. 具体请看Go语言的规范: After they are evaluated, the parameters of the call are passed by value to the function and the called function begins execution. from: ht...阅读全文

博文 2015-09-14 14:00:31 future_challenger

go语言函数参数与返回值示例,数组的简单应用

go语言函数参数与返回值示例,数组的简单应用 package main import "fmt" func main() { string1 ,string2 :=test_various_values(30,58) fmt.Println("参数1 ",string1) fmt.Println("参数2 ",string2) fmt.Println("------------------------------------------------------------------") v1 ,v2 :=test_various_values2(46,"huangmao") fmt.Println("--v1==== ",v1) fmt.Println("---v2 == ",v2) fm...阅读全文

博文 2016-10-26 17:00:01 qq_26337701

探究golang接口

今天看了《Go 语言中的方法,接口和嵌入类型》所以想对比以前对C/C++相关知识进一步理解golang的接口、指针、参数传递。 接口 根据《Go 语言中的方法,接口和嵌入类型》的描述可以看出,接口去调用结构体的方法时需要针对接受者的不同去区分,即: 接收者是指针*T时,接口实例必须是指针 接收者是值 T时,接口实力可以是指针也可以是值 接口的定义和类型转换与接收者的定义是关联的 文章中的示例是通过接口作为函数参数的方式展现的,这里我直接使用变量来进行实验: package main import "fmt" type Type struct { name string } type PType struct { name string } type Inter iInterface { po...阅读全文

博文 2015-03-13 16:00:02 cnsword

golang中的函数参数值传递和引用传递

在golang中函数的参数默认为 **按值传递**,即在函数内部修改传入参数的值是函数外部传入值的 **拷贝**。 如果想要使用引用传递,需要将传入的参数设置为 **指针类型**。 如果传入的参数数据很大,建议使用指针类型,减少内存因拷贝参数而占用。 ``` type person struct{ Name string Age int } func SetName(p person, name string){ p.Name = name } func SetNameByPointer(p *person, name string){ p.Name = name } func(p person) SetPersonName(name string){ p.Name = name } fun...阅读全文

博文 2018-11-06 17:54:02 lijingtian

golang中的hmac验证应该怎样写

python是这样的 一般hmac验证需要两个参数,一个密钥和一个加密串(既接口参数值的拼接) import hmac hmacStr=hmac.new('密钥') hmacStr.update('加密串') hmacStr=hmacStr.hexdigest() 或者是 hmac.new(__api_secret, params, digestmod=hashlib.sha512).hexdigest() 在golang中应该怎样写?我到处都找不到例子和相关的用...阅读全文

go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。 1、常规传递 使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响原来实参的值。 例如: package main import ( "fmt" ) func swap(a int, b int) { var temp int temp = a a = b b = temp } func main() { x := 5 y := 10 swap(x, y) fmt.Print(x, y) } 输出结果:5 10 传递给swap的是x,y的值得拷贝...阅读全文

博文 2016-07-03 02:00:01 chase-wind

golang编译时的参数传递(gcflags, ldflags)

go build 可以用-gcflags给go编译器传入参数,也就是传给go tool compile的参数,因此可以用go tool compile --help查看所有可用的参数。其中-m可以检查代码的编译优化情况,包括逃逸情况和函数是否内联。如果只在编译特定包时需要传递参数,格式应遵守“包名=参数列表”,如go build -gcflags -gcflags='log=-N -l' main.gogo build用-ldflags给go链接器传入参数,实际是给go tool link的参数,可以用go tool link --help查看可用的参数。常用-X来指定版本号等编译时才决定的参数值。例如代码中定义var buildVer string,然后在编译时用go build -ldf...阅读全文

博文 2019-10-12 11:32:47 aside section ._1OhGeD

golang flag包

go flag 包用来解析命令行参数,通过一个简单的例子来了解下 package main import ( "flag" "fmt" ) func main() { //参数1:命令行传递参数的名称 参数2:默认值 参数3:参数的说明 username := flag.String("name", "", "Input your name") //注意 username 是string 的指针 type: *string // 在例如: // var ip = flag.Int("flagname", 1234, "help message for flagname") //ip 的类型是: *int flag.Parse() fmt.Println("Hello,", *username...阅读全文

博文 2016-01-15 03:00:00 davin

GoLang处理URL提取Get参数

图片来源于网络 我们在项目里面大部分都是直接使用封装好的网络库,需要获取请求里面的参数直接调他们的API就可以了。 今天我突发奇想,他们是怎么做到的,自己也尝试着写了一段代码来提取GET里面的参数,班门弄斧了。 这是我的代码片段,一起交交流下: urlStr := "/index/show?name=zs&age=12" //查找字符串的位置 questionIndex := strings.Index(urlStr, "?") //判断是否存在/符号 cutIndex := strings.Index(urlStr, "/") //打散成数组 rs := []rune(urlStr) //用于存储请求的地址切割 requestSlice := make([]string, 0, 0) //...阅读全文

博文 2018-10-09 13:34:40 谦益同学

Go命令行参数解析flag包

go语言提供的flag包可以解析命令行的参数,代码: package main import ( "flag" "fmt" ) func main() { //第一个参数,为参数名称,第二个参数为默认值,第三个参数是说明 username := flag.String("name", "", "Input your username") flag.Parse() fmt.Println("Hello, ", *username) } 编译: go build flag.go 运行: ./flag -name=world 输出: Hello, world 如果不输入name参数: ./flag 则输出: Hello...阅读全文

博文 2015-06-02 03:00:16 baiyuxiong

time.Unix(sed, nsed)

# time.Unix(sed, nsed) 最近看到代码中有一行这个, 单纯看英文并不是太理解, 然后这里找了一下,没有相关的解释.其实是一个很简单的函数. Unix()返回一个Time类型, 然后这个时间是UTC时间加上你的参数时间 ``` // ex: t := time.Unix(1, 0) fmt.Println(t) // 此处的时间就是UTC时间,加一秒钟 ``...阅读全文

博文 2019-03-01 11:16:02 NextLeaves

GoLang中如何使用多参数属性传参

我们常常因为传入的参数不确定而头疼不已,golang 为我们提供了接入多值参数用于解决这个问题。但是一般我们直接写已知代码即所有的值都知道一个一个塞进去就好了,但是绝大部分我们是得到用户的大量输入想通过循环传入,但是这样发现无法使用这个多值参数的功能。其实底层实现将多个参数视为传入的一个不定长数组。那么我们就有想法了:既然底层使用数组,那我们传入数组是否可以,结论是不可以的,或者这样说比较合理:数组不能直接传入,需要辅助多参数标识来指明,具体让我们看以下一个简单的测试: func TestMultiParam(t *testing.T) { valueArray := []string{"1", "2", "3", "4", "5"} result := valueArray[0: 3] t...阅读全文

博文 2017-09-25 16:30:00 grimm

Golang 处理命令行启动参数

最近要做Apache Thrift相关的项目。大概看了一下,觉得不难。Thrift目前已经至此和Go语言了。照着官方提供的一个例子在学。周五搞了一上午,终于编译通过了。下午去读例子源码,发现一个从来没见过的包——flag。 不管是C开发还是Java,都接触过命令行开发。像大Java的main函数public static void main(String []args)直接参数里面就能读取到命令行启动参数。而Go语言的主函数是func main()果断啥也没,需要用这个包。 虽然Go不像大Java,在主函数里面直接就能获取到命令行参数,但是Go通过flag包获取到的参数类型,不像Java那样,只能是String类型。 再获取之前,需要自定义要获取的参数名称、参数默认值、参数使用方法,还有参数...阅读全文

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

Golang 多变参数

// code by shaoyongyang package main import ( "fmt" ) var t int = 1 var fslice []int func main() { doSomeThing(1, 2, 3, 4) return } func doSomeThing(arg ...int) { fmt.Println(arg) // as a slice fslice := []int(arg) fmt.Println(fslice[2]) } var fslice[] int 在这里声明了一个类似“动态数组”的变量。 没有长度的限制 可变参数的类型是int。 只能传递可转换的数据。 比如我可以传递doSomeThing(1, 'A', 3, 4) 'A'的AS...阅读全文

博文 2015-01-31 19:00:01 未来还没来

golang获取请求参数

package main import ( "net/http" "io/ioutil" "fmt" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request){ buf := make([]byte, 1024) n, _ := r.Body.Read(buf) fmt.Println(string(buf[0:n])) // 或者 body, _ := ioutil.ReadAll(r.Body) fmt.Println(string(body)) fmt.Fprintf(w, "Hello golang!") }...阅读全文

博文 2019-04-30 09:34:43 甲乙丙丁0086

Golang用body来get或post数据

用body来处理参数,能处理多层结构化参数,url不能传送多层结构数据 // 基础方法,这里多用于访问webapi,配合上json转换。此方法可以运行但是不算完善。 func httpDo(method string, url string, msg string) { fmt.Println("----", url, "----") client := &http.Client{} body := bytes.NewBuffer([]byte(msg)) req, err := http.NewRequest(method, url, body) if err != nil { // handle error } req.Header.Set("Content-Type", "applic...阅读全文

博文 2018-05-22 11:33:08 捍卫机密

简洁高效的 Go web 框架Faygo

Faygo以全新的架构实现,它面向Handler接口开发,是支持智能参数映射与校验、支持自动化API文档的Go语言web框架。 v1.0 Go Version ≥1.8 方式一 源码下载 方式二 部署工具 ([Go to fay](https://github.com/henrylee2cn/fay)) 面向Handler接口开发(func or struct),中间件与操作完全等同可任意拼接路由操作链 支持用struct Handler在Tag标签定义请求参数信息及其校验信息 支持自动构建API文档(swagger2.0) 支持多种网络类型: HTTP HTTPS/HTTP2(TLS) HTTPS/HTTP2(Let's Encrypt TLS) HTTPS...阅读全文

go gdb调试 参数设置

编译时,如果编译的结果需要gdb调试则使用参数-gcflags “-N -l”,这样可以忽略Go内部做的一些优化,聚合变量和函数等优化. go build -gcflags "-N -l",但是一定要注意是不是小写的i,也不是大写的I,是小写的L,不然会出现奇怪的错误。 如果编译的结果需要发布.则使用-ldflags “-s”,可以去掉调试信息,减小大约一半的大小 go build -ldflags "-s" 删除调试符号:go build -ldflags “-s -w” -s: 去掉符号信息。-w: 去掉DWARF调试信息。 关闭内联优化:go build -gcflags “-N -l...阅读全文

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

ionic 路由使用$state.go父页面向子页面传递参数

1.父页面的路由配置 .state('tab.article', { url: '/article', nativeTransitions: { type: "fade" }, views: { 'tab-article': { templateUrl: 'templates/article/article.html', controller: 'ArticleController' } } })2.子页面的路由配置 .state('tab.article_details', { url: '/article_details?articleDetailsUrl', views: { 'tab-article': { templateUrl: 'templates/article/articl...阅读全文

博文 2016-09-06 17:00:07 hunannanhu

golang – fmt 格式化参数

文 基本 %v the value in a default format when printing structs, the plus flag (%+v) adds field names %#v a Go-syntax representation of the value %T a Go-syntax representation of the type of the value %% a literal percent sign; consumes no value The default format for %v is: bool: %t int, int8 etc.: %d uint, uint8 etc.: %d, %#x if printed with %#v floa...阅读全文

博文 2017-04-30 12:00:24 中柠檬

golang的swagger注解

@Tags: 分类信息 例如: // @Tags 用户接口 @Summary: 操作的简短摘要。 例如: //@Summary 通过用户名得到用户信息 @Description: 操作的详细说明。 例如: //@Description 操作行为的详细说明。 @Param:参数信息,用空格分隔的参数。param name,param type,data type,is mandatory?,comment attribute(optional) 1.参数名 2.参数类型,可以有的值是 formData、query、path、body、header,formData 表示是 post 请求的数据,query 表示带在 url 之后的参数,path 表示请求路径上得参数,例如上面例子里面的 key...阅读全文

博文 2020-06-08 01:33:18 Lan_de

golang内置数据类型作为函数参数

先上结论 golang的所有内置类型作为函数参数传递都是传值的方式(没有传递引用一说),需要注意的是:数组、slice和map作为函数参数时也是传值,但是如果对结构内元素进行的修改,修改的是原数据。如果是对其进行整体赋值,则不会修改原数据,相当于拷贝出一个新的临时变量。要想无论什么情况都修改原数据,可以通过传递指针参数实现。 来段实例代码 1 package main 2 3 import ( 4 "bytes" 5 "fmt" 6 "strings" 7 ) 8 9 func f_1(a int) { 10 a = 2 11 } 12 13 func f_1_1(a *int) { 14 *a = 2 15 } 16 17 func f_2(s string) { 18 s = "cba"...阅读全文

博文 2016-06-29 02:00:01 borey

GO语言练习:不定参数函数

1、代码 2、运行 1、代码 package main import "fmt" func MyPrintf(args ...interface{}){ for _, arg := range args { switch arg.(type) { case int : fmt.Println("\"", arg, "\"", "is an int value.") case string : fmt.Println("\"", arg, "\"", "is a string value.") case int64 : fmt.Println("\"", arg, "\"", "is an int64 value.") default : fmt.Println("\"", arg, "\""...阅读全文

博文 2015-07-05 03:00:01 fengbohello

go的switch case

可以一个case带几个参数: var i = 0 switch i { case 0, 1: fmt.Println(“1”) case 2: fmt.Println(“2”) default: fmt.Println(“def”) } 默认有break效果,要取消就加上fallthrough: var i = 0 switch i { case 0: fallthrough case 1: fmt.Println(“1”) case 2: fmt.Println(“2”) default: fmt.Println(“def”) } case还可以是表达式: var i = 0 switch { case i > 0 && i < 10: fmt.Println(“i > 0 and i <...阅读全文

博文 2019-01-22 18:35:15 梁十八

问个os.exec 执行windows 下命令的问题

我在windows 目录下面有个cwRsync_5.4.1 的包 path="/cygdrive/c/null/ /cygdrive/c/data/20140101" cmd := exec.Command("cmd", "/C", "C:\\cwRsync_5.4.1\\rsync.exe", "-av", "--delete", path) cmd := exec.Command("C:\\cwRsync_5.4.1\\rsync.exe", "-av", "--delete", path) 都执行无效果。 我拿cmd.Args() 的 里面的参数,在windows 下执行是好的。 另外我也试过了cmd.Start() cmd.Run() 都不可以。。。。...阅读全文

beego.InsertFilter过滤器

beego.InsertFilter过滤器是为某些router提供过滤功能,可以设置在某个路由访问时进行额外的操作。通过参数设置可以设置过滤器执行的时刻。 如下所示beego.InsertFilter有一下几个参数: InsertFilter(pattern string, pos int, filter FilterFunc, params …bool) pattern:路由规则,过滤器作用的路由 pos : 过滤器执行的时刻,有以下5种 beego.BeforeStatic beego.BeforeRouter 访问路由之前 beego.BeforeExec 访问路由之后执行controller之前 beego.AfterExec 执行controller之后调用 beego.Finis...阅读全文

博文 2018-09-11 10:13:11 JimPang

golang 进程出现too many open files的排查过程

1. 现象 服务的cpu跑满(golang实现), 并大量报too many open files错误.服务使用systemd来运行,部署在阿里ecs上. 2.分析 从日志来看,cpu的上升主要为到达文件数限制引起的,但之前已经更改过系统的文件数及所有用户的文件数,按道理是不应该出现这个问题的,后来查阅资料发现,文件数可以从三个维度限制分别为操作系统限制,用户态限制,以及进程限制,对于这三个维度选取最小值生效.于是对系统进行分析. 首先查看当前打开文件数, 进程占用的文件数并不多. lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 然后获取系统级文件数限制 输入命令cat /etc/sysctl.conf得到fs.file-max = 1...阅读全文

博文 2016-10-11 09:00:11 u010511236

golang不定参数

1.有时候想一个函数中传入的参数很可能是不定的,除了可以使用: func funcname(...interface{}){ } 2.也可以将许多参数放进一个数组中,然后作为参数传入函数(或许会觉得这样有点多此一举,但是很可能存在历史遗留问题): func funcname(args []interface{}){ fmt.Print(args...) //args...是将一个数组按顺序变成不定参数传入,这个还真的挺好用的 } $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

博文 2015-11-30 15:00:42 vrinux

Golang匿名函数参数的作用

今天写代码的时候用到了协程go func,发现func函数块内部的代码也能使用外部的局部变量,当时我就加上了打印发现闭包内部的变量值和外部的局部变量是一样的,就觉得很费解匿名函数的传参是什么用的? 然后我就做了个小实验,运行如下代码 func main() { i := 1 go func() { time.Sleep(100*time.Millisecond) fmt.Println("i =", i) } () i++ time.Sleep(1000*time.Millisecond) } 打印如下 i= 2 Process finished with exit code 0 这就说明了闭包内取外部函数的参数的时候是取的地址,而不是调用闭包时刻的参数值.我们通过如下代码验证我们的想法: ...阅读全文

博文 2019-01-04 13:34:47 cbsfly_iDev

go语言那些“坑”之函数切片参数

函数的切片参数问题 输出结果: test变量容量足够容纳addElement函数添加的元素,所以在函数中ret地址没变。test及ret指向的地址应该是一样的,但函数调用完成后test值还是为空?为了解答这个问题先看下这个issue。 s和t属于不同变量,但append操作后s和t指向了同一个内存(s容量没有扩展),但s并没有打印1234,之所以会这样是因为append赋值给t后,t的长度变成了4,而s的没有变化。但s指向的内存其实还是存在[1,2,3,4]值的。这样再回头看函数参数为切片的问题就清楚了,应该是test的长度未变导致的。引用golang中切片slice的引用和地址问题Golang 切片与函数参数“陷阱...阅读全文

博文 2019-07-12 21:32:40 空格键_11aa

函数参数的 splats 写法无法识别?

新手表示正在看的 PDF https://github.com/mikespook/Learning-Go-zh-cn 里边有 splats... CofeeScript 里的叫法,, 顺带问下 Golang 里这叫啥? 问题是我用了这样的语法, 结果编译过程报错.. 请问这语法在新的 Golang 里是怎么? 我的环境是 ``` ➤➤ uname -a Darwin chentekiMacBook-Air.local 12.4.1 Darwin Kernel Version 12.4.1: Tue May 21 17:04:50 PDT 2013; root:xnu-2050.40.51~1/RELEASE_X86_64 x86_64 ➤➤ go version ...阅读全文

Golang 中的引用传递与值传递

一直以为自己了解了引用传递,没想到再次打破了自己的认知,所以开一篇文章,来记录一下到目前所知(本人不敢说自己已经完全掌握了)。 从书中了解到,map,slice 都是引用传递。有以下场景需要区分。 Map 变量赋值与改变其中某个元素的值 func main() { a := map[string]string{"a": "a"} newA := a for key, _ := range a { if key == "a" { a[key] = "A" } } fmt.Println(a) // map[a:A] fmt.Println(newA) // map[a:A] a = map[string]string{} fmt.Println(a) // map[] fmt.Println(...阅读全文

博文 2019-10-08 20:32:44 aside section ._1OhGeD