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 : ...
随机推荐
- 5 个非常有用的 Laravel Blade 指令,你用过哪些?
接下来我将带大家认识下五个 Laravel Blade 指令,这些指令将让你在解决特定问题时如虎添翼.如果你是刚接触 Laravel 的用户,这些小技巧能带你认识到 Laravel Blade 模板引 ...
- opencv(4)实现数据增加小工具
数据增加(data augmentation),作为一种深度学习中的常用手段,数据增加对模型的泛化性和准确性都有帮助.数据增加的具体使用方式一般有两种,一种是实时增加,比如在Caffe中加入数据扰动层 ...
- 【转】Python验证码识别处理实例
原文出处: 林炳文(@林炳文Evankaka) 一.准备工作与代码实例 1.PIL.pytesser.tesseract (1)安装PIL:下载地址:http://www.pythonware.com ...
- kafka基本版与kafka acl版性能对比(单机版)
一.场景 线上已经有kafka集群,服务运行稳定.但是因为产品升级,需要对kakfa做安全测试,也就是权限验证. 但是增加权限验证,会不会对性能有影响呢?影响大吗?不知道呀! 因此,本文就此来做一下对 ...
- Java中使用google.zxing快捷生成二维码(附工具类源码)
移动互联网时代,基于手机端的各种活动扫码和收付款码层出不穷:那我们如何在Java中生成自己想要的二维码呢?下面就来讲讲在Java开发中使用 google.zxing 生成二维码. 一般情况下,Java ...
- android拾遗——四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...
- 【LOJ】#2447. 「NOI2011」兔兔与蛋蛋的游戏
题解 对于75分来说,操作肯定不会成环,可以暴搜 看成空格在移动,空格移动到原来的位置肯定经历了偶数个格子,但是操作的人是两个不同的人,所以肯定不会成环 对于满分做法,要找到一种更好的方式判先手是否会 ...
- 四、oracle 用户管理 二
一.使用profile管理用户口令概述:profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default的profile.当建立用户没有指定profile选项时 ...
- JDK源码分析(二)——LinkedList
目录 LinkedList LinkedList继承结构 LinkedList内部类Node LinkedList成员属性 LinkedList构造方法 重要方法 Deque方法的实现 遍历 总结 L ...
- mongdb 拓展的下载地址和编译安装(php)
下载地址:https://pecl.php.net/package/mongodb 编译安装: $ tar zxvf mongodb-mongodb-php-driver-<commit_id& ...