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 : ...
随机推荐
- 牛客红包OI赛 B 小可爱序列
Description 链接:https://ac.nowcoder.com/acm/contest/224/B 来源:牛客网 "我愿意舍弃一切,以想念你,终此一生." " ...
- SQL存储过程相关信息查看
--1.查看所有存储过程与函数 exec sp_stored_procedures 或者 select * from dbo.sysobjects where OBJECT ...
- SQL update select语句
SQL update select语句 最常用的update语法是:UPDATE <table_name>SET <column_name1> = <value>, ...
- springboot 零xml集成mybatis-plus
工程结构 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- Java学习(Map接口)
一.概述: 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. 1. Collection中的集合,元素是孤立存在的(理解为单身), ...
- swift中Double转String
swift上手有好几天了.发现swift除了本身的几个基本类型转换,一些比较特殊的数值类型转换需要“桥接”到Objective-C来进行- 代码当然也很简单- var numString = &quo ...
- 【LOJ】#2064. 「HAOI2016」找相同字符
题解 做后缀自动机题要一点脑洞,脑洞一开,就过了 我们显然要拿第二个串跑第一个串的后缀自动机 我们可以求出第二个串每个位置匹配到的节点,和匹配的长度L 那么我们统计一个后缀树上的根缀和,表示这样个节点 ...
- hdoj1171 Big Event in HDU(01背包 || 多重背包)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1171 题意 老师有一个属性:价值(value).在学院里的老师共有n种价值,每一种价值value对应着 ...
- TradingView 为 k 线柱添加标记
看别人翻译的开发文档: 开发文档地址:https://zlq4863947.gitbooks.io/tradingview/ getMarks(symbolInfo, startDate, endDa ...
- SQL_异化
select a.pk_accasoa from bd_accasoa a; --下级科目原来主键: 0001Z0100000000001A2 --执行该语句后下级科目异化了(替换的意思) , '@@ ...