Go 语言基础
Go 语言基础
特点
常用命令
go run直接运行, 不会生成可执行文件go build生成可执行文件, 推荐
加分特点
UTF-8编码高并发:
go关键字管道:
pipe := make(chan int, 1)在一个文件中, 大写字符开头表示对外开放, 小写字符开头则不对外开放
第一行代码一定以
package main如果是一个可以运行的项目, 则一定会有main包, 如果是其他的, 则是自定义的名字所有的类都实现了空接口(
interface{}), 相当于 Object, 耦合度很低, 可以接受, int , float, slice, map, string, struct, interface 等类型默认的赋值都是值传递
不使用
this, 而是通过interface定义方法特有的形式, 简单方便, 不会有和 JS 一样的 this 歧义问题没有构造函数, 通过工厂函数创建 struct
支持闭包, 内置 VM
程序执行流程
- 找到
package main下的有main函数的入口程序 - 发现
import some, 进入到some中 - 如果
some中还有import, 继续步骤 2 - 如果没有
import了, 则初始化全局变量 - 在被
import的函数中, 执行init函数 - 一直返回, 直到
main函数位置 - 执行
main函数
目录结构
配置
GOPATH环境变量, 它用来指定类似于Eclipse中的工作空间GOPATH指定的工作空间的目录结构
- workspace
+ src
+ code1
+ main
+ other_pkg
+ code2
+ bin
+ vender(第三方)
+ pkg(动态链接库)
- 我们自己定义的包, 在使用
import导入的时候, 默认在GOPATH下的src下找的, 但是一般我们的代码又不是直接放在src下的, 所有import的时候要从code1/other\_pkg开始
- 在第2点标准目录下
go build或者go run命令执行cd到workspace目录下go build code1/main-> 注意,main是包名, 不需要执行文件名, 现在是在workspace目录,code1是在src下, 但是命令中要去掉src目录
语法
导包
import (
"fmt"
"os"
"time"
)
const使用
const (
a = 10
b = 20
)
var使用
var (
a = 10
b = 20
)
定义变量
// 一般需要两行
var a int
a = 20
// 但是go语言为了方便提供了下面的方式, 两者是等价的, a:=20会被go编译器转为上面***两条***语句
a := 20
类型
int, int8, int16, int32, int64, uint8, uint16, uint32, uint64, float32, float64boolstringchanmapslice[...]
字符与字符串
- 字符使用''
- 字符串使用""或者
,与Python中的""" """一样
两种类型
- 值类型: 整数, 字符串, 数组, 结构体
- 引用类型: slice, map, chan, 指针(和C语言中一样)
类型转换
- 类型(变量), 括号中只能是变量, 不能是字面量等常量
内置函数
len()cap()make()delete()只用于删除 map 中的元素
接口
- 实现一个
interface
type MyInterface interface {
Say()
Run()
}
反射
基本
- 获取类型
var.(type),type 是关键字, 返回类型, bool, int32, string 等 - var.(interfaceName)
, 是否实现了interfaceName的接口, 而·var`为接口变量
reflect
TypeOf返回类型TypeValueOf获取包含大量反射信息的对象, 后面的 API 都是对此对象(Value)进行操作Value.Kind返回变量类型, 类型在reflect包中, 如reflect.StructValue.Interface()将Value转回去Value.Int()获取 int 值Value.Float()获取 float 值Value.String()获取 string 值Value.Elem()如果 Value 是从指针转过来的, 要获得指针对应的值, 使用该方法, 类似于*ptrValue.Set系列()赋值Value.NumFields()属性个数Value.NumMethods()方法个数Value.Method(numIndex).Call(args)调用方法
多线程
内置包
fmt
fmt.Printf()fmt.Println()
time
time.Sleep()time.Now().Unix()
os
os.Getenv()os.Stdinos.Stdoutos.Stderros.Argsos.OpenFileos.Fprintf(文件句柄, content)文件句柄来自os.OpenFile
math/rand
rand.Int()-> 很大rand.Float32()-> [0, 1)rand.Seed(time.Now().Unix())
encoding/json
json.Marshal(struct)打包struct中的tag, 只能打包struct中大写开头的json.UnMarshal(struct)
bufio
reflect
1. `TypeOf`返回类型 `Type`
2. `ValueOf`获取包含大量反射信息的对象, 后面的 API 都是对此对象(`Value`)进行操作
3. `Value.Kind` 返回变量类型, 类型在 `reflect`包中
4. `Value.Interface()`将 `Value` 转回去
5. `Value.Int()`获取 int 值
6. `Value.Float() `获取 float 值
7. `Value.String()`获取 string 值
8. `Value.Elem()` 如果 Value 是从指针转过来的, 要获得指针对应的值, 使用该方法, 类似于 `*ptr`
9. `Value.Set系列()`赋值
10. `Value.NumFields()`属性个数
11. `Value.NumMethods()`方法个数
12. `Value.Method(numIndex).Call(args)`调用方法
第三方包
Beego
- 一个类似 Python 中 Flask 的 web 框架
Go 语言基础的更多相关文章
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- C语言基础回顾
第一章 C语言基础 1. C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...
- 黑马程序员_ C语言基础(二)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): 1.Hello W ...
- C#语言基础— 输入与输出
C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...
- 【GoLang】GO语言系列--002.GO语言基础
002.GO语言基础 1 参考资料 1.1 http://www.cnblogs.com/vimsk/archive/2012/11/03/2736179.html 1.2 https://githu ...
- R语言基础:数组&列表&向量&矩阵&因子&数据框
R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- Java学习总结(二)----Java语言基础
1. Java语言基础 2.1 关键字 定义:被java语言赋予特殊含义的单词 特点:关键字中的字母都为小写 用于定义数据类型的关键字 class,interface,byte,short,i ...
随机推荐
- python中的验证码识别库PyTesser
PyTesser PyTesser is an Optical Character Recognition module for Python. It takes as input an image ...
- 《STL源代码分析》---stl_stack.h读书笔记
Stack堆栈是频繁使用FILO数据结构,FILO指first in last out,最后出来. 因为只有一个堆叠端口,这也是在口腔进入口. 可以在堆栈中只能操作,你不能访问其它元件的堆叠.器. S ...
- OpenGL(二十三) 各向异性纹理过滤
如果使用一般的纹理过滤,当观察方向跟模型表面不是相互垂直的的情况下,会出现纹理信息的丢失,表现为图像看上去比较模糊,如下图所示,远处场景的细节信息很差: 针对这种情况,可以采用同向异性过滤的方式处理纹 ...
- handler looper和messageQueue
一.用法. Looper为了应付新闻周期,在创建过程中初始化MessageQueue. Handler在一个消息到当前线程的其他线程 MessageQueue用于存储所述消息 Looper其中线程创建 ...
- [视频]mac系统下虚拟机parallels安装ubuntu 14.04视频教程
此文是http://www.mr-wu.cn/install-ubuntu-14-04-on-parallels-for-mac/这篇博文的补充,为整个ubuntu 14.04安装过程的视频录像. m ...
- Why aren't more desktop apps written with Qt?(quora.com系列文章)
As far as I know and have understood in my experience with Qt, it's a very good and easy to learn li ...
- IIS基本介绍
应用程序池-网站-应用程序 1 应用程序池 设置应用程序的各种设置,新建.修改应用程序的时候可以选择应用程序池 2 [站外图片上传中...(image-3924c8-1511163001873 ...
- .net与.net core学习目录
.net C#调用python 模拟请求(模拟header/gzip解压/泛型) C#控制台关闭之前做一些操作 C# 元组.匿名对象.ref&out DataTable转换为Entity(反射 ...
- sql count(1)不要和查询数据混用 非常耗时
count(1)不要和查询数据混用 非常耗时 例子: SELECT w.[PKID], COUNT(1) OVER() AS TotalCount FROM w WITH(NOLOCK) INNER ...
- 在IOS开发中使用GoogleMaps SDK
一.申请一个免费的API KEY要使用GoogleMaps SDK,必须要为你的应用申请一个API KEY,API Key可以让你监视你的应用调用api的情况.api key是免费的,你可以在任何调用 ...