0. Go语言书单

1. 文本注释
// 单行注释
/* */ 多行注释

2. 变量赋值
= 变量赋值
:= 声明变量并赋值

3. 变量定义
var name string
var age int

var name = "alex"
var age = 123

4. 变量类型转换
string to int
int, err := strconv.Atoi(string)

string to int64
int64, err := strconv.ParseInt(sting, 10, 64)

int to string
string := strconv.Itoa(int)

int64 to string
string := strconv.FormatInt(int64, 10)

5. 变量类型判断
1)i.(type) 只能在switch中使用
2)reflect.TypeOf(x)

6. Go 程序是通过package来组织的
只有package名称为main的包可以包含main函数
一个可执行程序有且只有一个main包
通过import关键字来导入其他非main包
main函数作为程序入口点启动
Go 语言最少有个main()函数

7. Go 语言中,使用大小写来决定该
常量
变量
类型
接口
结构
函数
是否可以被外部包所调用

函数名首字母小写即为 private:
func getId() {}
函数名首字母大写即为 public:
func GetId() {}

8、交换两个变量的值
a, b = b, a

9、空白标识符
_ 跟Python一样

10、unsafe.Sizeof()
字符串类型在Go里是个结构,包含指向底层数组的指针和长度,这两部分每部分都是8个字节,所以字符串类型大小为16个字节。

11、函数
func function_name( [parameter list] ) [return_types] {
函数体
}

函数传递参数:
值传递
引用传递
引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数进行的修改,将影响到实际参数的值。

12、 * 与 &
& 是地址获取符,即获取某个变量的内存地址,例如 &a
* 是指针运算符,可以表示一个变量是指针类型,也可以表示一个指针变量所指向的存储单元,也就是这个地址所存储的值。

13、 Go 语言方法与函数的区别
方法是特殊的函数,定义在某一特定的类型上,通过类型的实例来进行调用,这个实例被叫接收者(Receiver)。
示例:
type Circle struct {
  redius float64
}

func (c Circle) getArea() float64 {
  return 3.14 * c.redius * c.redius
}

func main() {
  var c1 Circle
  c1.redius = 10.00
  fmt.Println("Area of Circle(c1) = ", c1.getArea())
}

函数将变量作为参数: Function(recv)
方法在变量上被调用:   recv.Method()

注意: Go语言不允许为简单的内置类型添加方法。

14、Go 语言面向对象
Go 语言不像其他面向对象语言一样可以定义类(class),然后在类(class)中定义一堆方法(method)。
但是Go 语言的方法 很巧妙的实现了这种效果,我们只需要在普通函数前面加个接受者(reciver, 写在函数名前的括号里面)。
这样编译器就知道这个函数(方法 method)属于哪个type或struct了, 这样就实现了类似于类的method。
在struct中声明变量,这样就实现了类似于类的属性。
示例:
type Person struct {
  name string
  age int
}

func (a Person) foo(){ // 接受者写在函数名前面的括号里面
  fmt.Printf("the %s age is %d.", a.name, a.age)
}

func main() {
  var aa Person // or aa := A{} 这非常像Python中实例化一个类
  aa.name = "alex"
  aa.age = 38
  aa.foo()
}

15、Go 语言接口
Go 语言提供了另外一种数据类型 - 接口。
它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。

16、Go 格式化输出
%v 值的默认格式表示。当输出结构体时,扩展标志(%+v)会添加字段名
%#v 值的Go语法表示
%T 值的类型的Go语法表示
%% 百分号

布尔值:
%t 单词true或false

整数:
%b 表示为二进制
%c 该值对应的unicode码值
%d 表示为十进制
%o 表示为八进制
%q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
%x 表示为十六进制,使用a-f
%X 表示为十六进制,使用A-F
%U 表示为Unicode格式:U+1234,等价于"U+%04X"

字符串和[]byte:
%s 直接输出字符串或者[]byte %q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
%x 每个字节用两字符十六进制数表示(使用a-f)
%X 每个字节用两字符十六进制数表示(使用A-F)

指针:
%p 表示为十六进制,并加上前导的0x

17、Go routine and channel

https://blog.csdn.net/skh2015java/article/details/60330785

18、生成时间戳

startTime = time.Now()    ——> time.Now().Sub(startTime)

19、Go 语言标准库

https://studygolang.com/pkgdoc

20、Map Chan变量赋值+判断

如果map查找、类型断言或Chan接收出现在赋值语句的右边,它们都可能会产生两个结果,有一个额外的布尔结果表示操作是否成功:

v, ok := m[key]    // map lookup
v, ok := x.(T) // type assertion
v, ok := <-ch // channel receive

21、Log模块

  https://studygolang.com/articles/9184

22、遍历array或Slice的三种方式

arr3 := [...]int{2, 4, 6, 8, 10}

// 三种遍历数组的方式
for i:=0; i<len(arr3); i++ {
fmt.Println(arr3[i])
} for i := range arr3 {
fmt.Println(arr3[i])
} for i, v := range arr3 {
fmt.Println(i, v)
}

23、生成随机数

生成任意随机数

rand.Int()    //生成一个随机int类型
rand.Int31() //生成一个随机int32类型
rand.Int63() //生成一个随机int64类型

生成指定区间的随机数

//尾数带n的版本则生成[0,n)的随机数。
// 该函数设置随机种子
// 若不调用此函数设置随机种子,则默认的种子值为1,由于随机算法是固定的,
// 如果每次都以1作为随机种子开始产生随机数,则结果都是一样的,因此一般
// 都需要调用此函数来设置随机种子,通常的做法是以当前时间作为随机种子
// 以保证每次随机种子都不同,从而产生的随机数也不通 func main() {
rand.Seed(time.Now().Unix())
for i:=0; i<10; i++ {
fmt.Println(rand.Intn(100))
}
}

24、数组和Slice的传递问题

arr1 := [...]int{10,20,30}

// 数组是值传递
arr2 := arr1
arr2[0] = 200 // slice是引用传递,slice本身没有数据,是对底层array的一个view
arr3 := arr1[:]
arr3[0] = 100 fmt.Println(arr1, arr2, arr3) 输出结果:[100 20 30] [200 20 30] [100 20 30]

25、Go包管理

github地址:https://github.com/gpmgo/gopm

install go package manager:

  go get -u github.com/gpmgo/gopm

usage:

  gopm get -g -v golang.org/x/text

也可以直接在github上下载

git clone https://github.com/rcrowley/go-metrics /Users/shongbing/go/src/github.com/rcrowley/go-metrics

26、golang 包依赖管理 godep 使用

https://studygolang.com/articles/9877

Go 语言基础知识的更多相关文章

  1. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  2. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  3. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  4. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  5. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  6. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  7. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  8. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  9. 重拾C语言基础知识

    从实习到工作两年多的时间了,虽然感觉学到了很多知识,但是事实上却将立足之本的基础知识给忘了个精光.也许跟自己没有出去找工作有关,没有好好的将C语言的基础牢牢掌握. 从现在开始吧!好好的重温基础,做一名 ...

  10. ZYNQ笔记(0):C语言基础知识复习

    ZYNQ的SDK是用C语言进行开发的,C语言可以说是当今理工类大学生的必备技能.我本科学C语言时就是对付考试而已,导致现在学ZYNQ是一脸懵逼.现在特开一帖,整理一下C语言的基础知识. 一.定义 1. ...

随机推荐

  1. hdu 4421(枚举+2-sat)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4421 思路:枚举32位bit,然后2-sat判断可行性,这里给出2-sat矛盾关系构图: 1.a&am ...

  2. Caffe机器学习框架

    Caffe是一个常用的卷积神经网络框架,在视频.图像处理方面应用较多. 官网:http://caffe.berkeleyvision.org/ 演示:http://demo.caffe.berkele ...

  3. Yii 2 的安装 之 踩坑历程

    由于刚接触yii2 ,决定先装个试试:可是这一路安装差点整吐血,可能还是水平有限吧,  但还是想把这个过程分享出来,让遇到同样问题的同学有个小小的参考,好了言归正传!! <(~.~)> 下 ...

  4. Spring基础知识详解

    Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...

  5. api xml database 设计一种数据库

    w 问题 0-新增和读取,可以忽略更新和删除: 1-被请求方的xml dom结构多层且不定,且未来可能增删某些键(dom节点),且键值长度最值可能无法确定: 3-请求过程可能出现异常exception ...

  6. Linux中权限管理之文件属性权限

    chattr [+-=][选项] 文件或目录名 + 增加权限 - 删除权限 = 等于某权限 选项: i 文件设置i属性,不允许对文件进行删除.改名.添加.修改数据,相当于把整个文件锁起来了 目录设置i ...

  7. android开发 软键盘出现后 防止EditText控件遮挡 总体平移UI

    在EditText控件接近底部的情况下 软键盘弹出后会把获得焦点的EditText控件遮挡 无法看到输入信息  防止这种情况发生 就须要设置AndroidManifest.xml的属性 前面的xml信 ...

  8. Mybatis中insert返回主键ID

    记录解决的过程,这里就不搬砖了. 1.获取insert后的主键id 原文链接:http://www.cnblogs.com/fsjohnhuang/p/4078659.html 2.insert后返回 ...

  9. 面向对象编程——super进阶(十)

    一.入门使用 在python中,使用super最常见的让子类继承父类.在这种情况下,当前类和对象可以作为super函数的参数使用,调用函数返回的任何方法都是调用超类的方法,而不是当前类的方法. cla ...

  10. eclipse修改web项目部署路径 wtpwebapps webapps 的设置

    eclipse修改web项目部署路径 wtpwebapps   webapps  的设置,在添加完server------>tomcat后,到server控制台进行设置 eclipse默认的部署 ...