Golang语言细节小结
前段时间,看了菜鸟入门,较浅的认识一下golang的语法习惯和规则,然后跟别人做了个爬虫项目,但是对于golang语言的语法结构还不是很懂。又看了遍《go实战》第二章。
构建程序在构建可执行文件时,需要找到这个已经声明的main函数,把它作为程序的入口。
关键字import就是导入一段代码,让用户可以访问其中的标识符,如类型、函数、常量和接口。
所有处于同一个文件夹里的代码文件,必须使用同一个包名。
下划线(_)这个技术是为了让Go语言对包做初始化操作,但是并不使用包里的标识符。下划线让编译器接受这类导入,并且调用对应包内的所有代码文件里定义的init函数。
编译器查找包的时候,总是会到GOROOT和GOPATH环境变量引用的位置去查找。
在Go语言里,标识符要么从包里公开,要么不从包里公开。以小写字母开头的标识符是不公开的,不能被其他包中的代码直接访问;大写字母相反。
map是Go语言里的引用类型,需要使用make来构造。
在Go语言中,所有变量都被初始化为其零值。对于数值类型,零值是0;对于字符串类型,零值是空字符串;对于布尔类型,零值是false;对于指针,零值是nil。
Go语言使用关键字func声明函数,关键字后面紧跟这函数名、参数以及返回值。
func function_name( [parameter list] ) [return_types] {
函数体
}
函数定义解析:
- func:函数由 func 开始声明
- function_name:函数名称,函数名和参数列表一起构成了函数签名。
- parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
- return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
- 函数体:函数定义的代码集合。
切片是一种实现了一个动态数组的引用类型。在Go语言里可以用切片来操作一组数据。
简化变量声明运行符(:=)。这个运算符用于声明一个变量,同时给这个变量赋予初始值。
如果需要声明初始值为零值的变量,应该使用var关键字声明变量;如果提供确切的非零值初始化变量或者使用函数返回值创建变量,应该使用简化变量声明运算符。
在Go语言中,如果main函数返回,整个程序也就终止了。Go程序终止时,还会关闭所有之前启动且还在运行的goroutine。写并发程序的时候,最佳做法是,在main函数返回前,清理并终止所有之前启动的goroutine。
`引号里的部分被称作标记(tag)。
error类型的值,用来表示函数是否调用成功。
关键字defer会安排随后的函数调用函数返回时才执行。关键字defer可以缩短打开文件和关闭文件间隔的代码行数,有助于提高代码可读性,减少错误。
interface关键字声明了一个接口,这个接口声明了结构类型或者具名类型需要实现的性为。一个接口的行为最终由在这个接口类型中声明的方法决定。如果接口类型只包含一个方法,那么这个类型的名字以er结尾。如果接口类型内部声明了多个方法,起名字需要与其行为关联。
程序里所有的init方法都会在main函数启动前被调用。
Golang语言细节小结的更多相关文章
- RabbitMQ官方教程一Hello World(GOLANG语言实现)
介绍 RabbitMQ是消息中间件:它接受并转发消息. 您可以将其视为邮局系统:将要发送的邮件放在邮箱中时, 可以确保邮递员最终将邮件传递给收件人. 以此类推,RabbitMQ是一个邮箱,一个邮局和一 ...
- Golang语言编程规范
Golang语言编程规范 一.说明 编程规范好,可避免语言陷阱,可有利团队协作,有利项目维护. 正常的Go编程规范有两种:编译器强制的(必须的),gofmt格式化非强制的(非必须). Go宣告支持驼峰 ...
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- C语言细节——献给入门者(三)
C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...
- C语言细节——献给初学者(二)
C语言细节——献给初学者(二) 主题 循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...
- C语言细节——献给入门者(一)
C语言细节——献给入门者(一) 主题 输入输出需要注意的细节 首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式. ...
- C语言细节总结笔记
C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...
- hbase rest api接口链接管理【golang语言版】
# go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
随机推荐
- web自动化之前端知识
下面这种写法只作用于这1个标签: 下面这种也是比较老的写法: 下面是常用的方式:把一个css样式放入到一个文件中,然后引用: 第三方引用的css一般是压缩过的,这样静态资源加载速度会比较快. 如 ...
- 【Python之路】特别篇--微信Web网页版通信的全过程分析
文章所使用Python版本为py3.5 1.微信服务器返回一个会话ID 微信Web版本不使用用户名和密码直接登录,而是采用二维码登录,所以服务器需要首先分配一个唯一的会话ID,用来标识当前的一次登录. ...
- linux下pyenv的安装和使用
一:pyenv介绍 项目地址:https://github.com/pyenv/pyenv pyenv lets you easily switch between multiple vers ...
- 【csp模拟赛3】组合数学
思路: 先排序,取最大的在剩余左边任意找k-1个数,所以是排列组合,费马小定理求逆元,预处理阶乘,注意要取模.. 代码: #include<cstdio> #include<iost ...
- Zookeeper原理 一
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...
- mounted里面this.$refs.xxx的内容是undefined
在mounted(){}钩子里面使用this.$refs.xxx,打印出来的却是undefined? DOM结构已经渲染出来了,但是如果在DOM结构中的某个DOM节点使用了v-if.v-show或者v ...
- 部署Hadoop2.0高性能集群
废话不多说直接实战,部署Hadoop高性能集群: 拓扑图: 一.实验前期环境准备: 1.三台主机配置hosts文件:(复制到另外两台主机上) [root@tiandong63 ~]# more /et ...
- Redis 延迟指标监控
Redis 延迟监控框架 Redis 2.8.13 引入了Latency Monitoring的一个新功能,可以帮助我们检查和排查引起延迟的原因. Latecny Monitoring 由如下组成: ...
- python 二分查找代码
二分查找的条件是必须是排好的数字 """二分查找""" def binary_searhc(arr, target): n = len(ar ...
- mysql if--else
SQL之case when then用法 case具有两种格式.简单case函数和case搜索函数. --简单case函数 case sex when '1' then '男' when '2' th ...