golang 关键字以及简单用法说明
golang只有25个关键字
package: 定义包名, go中任何一个文件必须有一个package, 一般而言,package的定义和文件所属文件夹一致, 并且main函数所在文件的package必须是main
import: 导入包名的关键字
const: 声明常量的关键字
var: 声明变量的关键字
func: 定义函数关键字(结构体方法其本质也是函数)
defer: 延迟执行(先注册后执行)关键字(常用于保证资源的释放). defer后面必须是函数或者方法的调用.osExit()主动调用时,defer不再执行.最好不要对有名返回值操作.
go: 并发关键字
return: 函数返回
struct: 定义结构体
interface: 定义接口(所有变量都实现空接口)
map: 声明创建map类型关键字
chan: 声明创建chan类型关键字
以及一些控制流程的关键字
if, else, for, range, break, continue
swich, select, case, fallthrough, default
type: 这个关键字非常常用, 定义结构体,类型等
goto: 跳转语句关键字
if else: 控制结构
//-----------------------------------------------------------------------------------------------------------------
package main import (
"fmt"
"time"
) var testVar1 = 0 //自动识别类型
var testChanVar chan *user const (
testIota1 int = iota //初始化为0
testIota2 //不写表达式 视为上一个表达式, 等价于 testIota2 int = iota
testIota3 int = 9
testIota4
testIota5 int = iota //iota只有出了所属的const() 才重置为0
) type user struct {
name string
age int
} func testMap() {
fmt.Printf("this is testMap...\n")
tMap := make(map[string]interface{}, 4) //value的类型是空接口类型, 所有类型都实现了空接口, 所以value的值可以是任意类型.
tMap["name"] = "xzk"
tMap["age"] = 25
for key, value := range tMap {
fmt.Printf("key=%v, value=%v\n", key, value) //无序, 每次打印的顺序不一样
switch key { //switch 后可以没有变量, 那么case可以是表达式,相当于if else
case "name":
fmt.Printf("this is swith case name...\n")
fallthrough //上一个case命中后, 强制执行下一个case(不管一下个case是否命中)
case "fallthrough":
fmt.Printf("this is fallthrough...\n")
default:
fmt.Printf("this is default...\n")
}
}
} func pushChan() {
fmt.Printf("this is pushChan...\n")
userBean := &user{
name: "xzk",
age: 18,
} select {
case testChanVar <- userBean: //如果通道未满, 将数据放入通道
default:
fmt.Printf("testChanVar chan overflow, size=%d, data=%v\n", cap(testChanVar), userBean)
}
} func getChanData() {
fmt.Printf("this is getChanData start...\n")
testChanVar = make(chan *user, 1000) //初始化大小为1000的通道
for userBean := range testChanVar { //遍历通道, 取出数据
fmt.Printf("this is getChanData..., userBeanName=%s\n", userBean.name)
}
} func init() {
go getChanData() //异步执行getChanData()函数
fmt.Printf("this is init end...\n")
} func main() {
fmt.Printf("this is main start...\n")
defer fmt.Printf("this is defer...\n") //多个defer执行顺序:先进后出
// 使用时需要注意 引用变量和值变量 的区别(return语句实际上也是分2个步骤. 1:设置返回值, 2:真正的return. defer是在中间执行) go pushChan() go testMap() for {
fmt.Printf("this is main...%d\n", testIota5)
time.Sleep(time.Second)
testVar1++
if testVar1 == testIota5 {
break
}
} fmt.Printf("this is main end...\n") //main函数退出, go异步线程随之结束
}
//------------控制台打印结果---------------------------------------
this is init end...
this is getChanData start...
this is main start...
this is pushChan...
this is main...4
this is getChanData..., userBeanName=xzk
this is testMap...
key=age, value=25
this is default...
key=name, value=xzk
this is swith case name...
this is fallthrough...
this is main...4
this is main...4
this is main...4
this is main end...
this is defer...
golang 关键字以及简单用法说明的更多相关文章
- golang build 的简单用法.(菜鸟初学)
1. golang 里面的 go build 可以编译代码. go build helloworld.go 2. 这里面有一个注意事项事项. 如果引用非go语言的 内置package的话 需要在环境变 ...
- 数据结构和算法(Golang实现)(6)简单入门Golang-并发、协程和信道
并发.协程和信道 Golang语言提供了go关键字,以及名为chan的数据类型,以及一些标准库的并发锁等,我们将会简单介绍一下并发的一些概念,然后学习这些Golang特征知识. 一.并发介绍 我们写程 ...
- Func和Action委托简单用法
Func和Action类是特殊的类型,它们允许你在不必指定自定义委托类型的情况下,去使用委托.在整个.NET框架中都可以使用它们.例如,在我们考察并行计算时,你也会看到这两个类的示例. 上面一段文字是 ...
- slf4j的简单用法以及与log4j的区别
之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着研究一下slf4j的用法. 注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太 ...
- 【转】SQL 常用关键字释义和用法
转自: http://blog.csdn.net/iamwangch/article/details/8093933 下面 是 从网络上整理 出来的 SQL 关键字和 常用函数的 释义和简单用 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数
包.变量和函数 一.举个例子 现在我们来建立一个完整的程序main.go: // Golang程序入口的包名必须为 main package main // import "golang&q ...
- 数据结构和算法(Golang实现)(4)简单入门Golang-结构体和方法
结构体和方法 一.值,指针和引用 我们现在有一段程序: package main import "fmt" func main() { // a,b 是一个值 a := 5 b : ...
随机推荐
- WordPress“无法将上传的文件移动至wp-content/uploads/”的解决办法
WordPress“无法将上传的文件移动至wp-content/uploads/”的问题在有些配置不完善的虚拟主机或服务器中会碰到,一般会出现以下症状:1.无论是从文章编辑页面还是媒体库页面都无法上传 ...
- (一)问候 Jsoup
第一节: Jsoup 简介 Jsoup简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQu ...
- 如何修改SQL Server 2000的数据库逻辑与物理名称
在项目中使用SQL Server 2000创建了一个数据库,发现名称与另一个数据库太相似,于是决定更改名称,包括: 在企业管理器中看到的数据库名,也是实际应用程序中连接用的数据库名称: 在磁盘上看的物 ...
- cross apply 和 outer apply
使用APPLY运算符可以实现查询操作的外部表表达式返回的每个调用表值函数.表值函数作为右输入,外部表表达式作为左输入. 通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出.A ...
- Hive(十)Hive性能调优总结
一.Fetch抓取 1.理论分析 Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算.例如:SELECT * FROM employees;在这种情况下,Hive可以简单 ...
- ASP.NET:插件化机制
概述 nopCommerce的插件机制的核心是使用BuildManager.AddReferencedAssembly将使用Assembly.Load加载的插件程序集添加到应用程序域的引用中.具体实现 ...
- docker 删除none镜像
Windows版本,参考官方地址:https://forums.docker.com/t/how-to-remove-none-images-after-building/7050 docker rm ...
- CSS 显示或隐藏子元素
很多时候我们仅仅只是想让鼠标移动入某个元素,然后显示出某个元素. 大多数博客的标题或内容都是:使用CSS实现鼠标悬停在一行上,显示某些元素 很遗憾,这是错误的,鼠标悬停后,尽管CSS标准中有定义此种方 ...
- Ubuntu18.04 之jdk安装与环境配置
1.oracle官网下载压缩包. 下载地址为: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...
- 美团外卖Android平台化的复用实践
美团外卖平台化复用主要是指多端代码复用,正如美团外卖iOS多端复用的推动.支撑与思考文章所述,多端包含有两层意思:其一是相同业务的多入口,指美团外卖业务需要在美团外卖App(下文简称外卖App)和美团 ...