Golang语言--一些基础用法

range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。其可以使用的对象包括string,array/slice,map,channel。其中string,array/slice返回的第一个value都是index,第二个value表示值;map返回第一个元素为key,第二个为value;channel中第一个值为元素的值。

举例如下:

func main() {
	str := "abcdef"
	for key, value := range str {
		fmt.Printf("%d,%c\n", key, value)
	}

        array := [3]int{0, 1, 2}//注意,针对array,range 会复制对象。
	for i, v := range array {
		if i == 0 {
			// index、value 都是从复制品中取出。
			// 在修改前,我们先修改原数组。
			array[1], array[2] = 999, 999
			fmt.Println(array)
			// 确认修改有效,输出 [0, 999, 999]。
		}
		array[i] = v + 100 // 使用用复制品中取出的 value 修改原数组。

	}
	fmt.Println(array) // 输出 [100, 101, 102]。

	//slice 为引用,对slice引用修改时直接在原来slice上进行修改,不用进行复制,建议改用用引用用类型,其底层数据不会被复制。
	slice := []int{0, 1, 2}
	for i, v := range slice {
		if i == 0 {
			// 在修改前,我们先修改原数组。
			slice[1], slice[2] = 999, 999
			fmt.Println(slice)
			// 确认修改有效,输出 [0, 999, 999]。
		}
		slice[i] = v + 100
	}
	fmt.Println(slice) // 输出 [100 1099 1099]。

	a := make(map[int]string, 3)
	a[1] = "as"
	a[2] = "c"
	for key, value := range a {
		fmt.Println(key, value)
	}
	b := make(chan int, 3)
	b <- 1
	b <- 2
	go func() {
		for element:= range b {
			fmt.Println(element)
		}
	}()
	time.Sleep(1 * time.Second)
}

函数:

函数定义 不支支持 嵌套 (nested)、重载 (overload) 和 默认参数 (default parameter)。 • 无无需声明原型。 • 支支持不定⻓长变参。 • 支支持多返回值。 • 支支持命名返回参数。 • 支支持匿名函数和闭包。

函数是第一一类对象,可作为参数传递。建议将复杂签名定义为函数类型,以便于阅读。

func test(fn func() int) int {
return fn()
}
<span style="background-color: rgb(255, 0, 0);">type FormatFunc func(s string, x, y int) string
// 定义函数类型。
func format(fn FormatFunc, s string, x, y int) string {
return fn(s, x, y)
}</span>
func main() {
s1 := test(func() int { return 100 })
// 直接将匿名函数当参数。
s2 := format(func(s string, x, y int) string {
return fmt.Sprintf(s, x, y)
}, "%d, %d", 10, 20)
println(s1, s2)
}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-05-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

第七章 正则表达式编程

第七章 正则表达式编程 什么叫知识,能指导我们实践的东西才叫知识。 学习一样东西,如果不能使用,最多只能算作纸上谈兵。正则表达式的学习,也不例外。 掌握了正则表...

20660
来自专栏Nian糕的私人厨房

JavaScript 基础

JavaScript 是一种轻量级,解释型的,有着函数优先 (First-class Function) 的编程语言,虽然它是作为开发 WEB 页面的脚本语言而...

12750
来自专栏大前端_Web

SASS相关

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

19910
来自专栏LEo的网络日志

go语言接口学习

37250
来自专栏Nian糕的私人厨房

ECMAScript6 数组去重

数组去重这个问题无论是在面试当中,还是实际项目中,出现的频率都挺多的,而我们以往的解决方式,就是通过新建一个空的数组,通过 indexOf 方法进行新数组和原数...

6730
来自专栏偏前端工程师的驿站

JS魔法堂:那些困扰你的DOM集合类型

一、前言                                     大家先看看下面的js,猜猜结果会怎样吧!   可选答案:   ①. 获取id属...

24690
来自专栏全沾开发(huā)

学习zepto.js(Hello World)

学习zepto.js(Hello World) Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery...

46080
来自专栏乐百川的学习频道

Golang学习笔记 控制流

条件语句 if语句 下面是Golang的if语句,需要注意的是条件判断块不需要小括号,而且if语句的大括号不能省略,即使其中只有一行语句。 if conditi...

20650
来自专栏企鹅号快讯

一文快入VBA——一个VBA数据处理小程序的解析

这是我自己写的一个VBA处理的小程序,它极大地帮助我提高了数据处理的速度,现在我把它分享给你。个人觉得如果能够看看该程序,ExcelVBA使用的基本问题就不是比...

30170
来自专栏C/C++基础

web前端开发初学者十问集锦(4)

利用JS来控制页面控件的显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位。

17920

扫码关注云+社区

领取腾讯云代金券