Go基础知识梳理(一)
Go基础知识梳理(一)
Go中package的用法及作用
package hello
用于分包,Go通过包来管理命名空间
import (
"hello" //通过import关键字来使用包
)
Go中的25个关键字
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
用法说明
package //定义包名的关键字
import //引入包名的关键字
const //常量声明关键字
var //变量声明关键字
func //函数定义关键字
defer //延迟执行关键字
go //新起协程关键字
return //函数返回关键字
struct //结构体定义关键字
interface //接口定义关键字
map //声明或创建map类型关键字,key->value类型
chan //声明或创建通道关键字
if else //条件关键字
for range break continue //循环使用的关键字
switch select case default fallthrough
package person
//interface 用于定义接口
type Person interface {
Say()
}
//type就是声明的意思,struct是用于定义结构体
type Man struct {
Name string
}
//const 用于定义常量, var同理, var还可以用来定义变量
const (
SEX_MAN = itoa
SEX_WOMAN
)
内置类型
整型
byte int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintprt
浮点型
float32 float64
注意:b := 12.00 会自动被推断为float64类型
复数型
complex64 complex128
字符串型
string rune
布尔型
bool
常量值标识符
true false //bool返回的值
iota //用于连续的枚举类型自动递增
nil //引用类型的默认值
变量以及常量的定义
var name string = ""
var sex int //会默认赋值为int的初始值0
func main() {
name := "" //简短声明,仅函数内可用
}
在ubr的开发规范中, 在函数内最好都使用简短声明
type Day int
const (
Mon Day = iota
Tue //自动为1
Wes //自动为2
)
指针
* 用于获取指针的值
& 用于获取值的存放地址
func sum(a, b int) *int {
sum := a + b
return &sum //sum值将会逃逸到堆上
}
数组
a := [3]int{1,2,3} //指定长度的数组定义
a := [...]int{1,2} //让初始化列表来指定数组长度
//数组定义后不能改变长度,切片可以
数组的访问
num := a[0]
for idx, item := range a {
fmt.Println(index, item)
}
切片
切片的底层结构
type slice struct {
array unsafe.Pinter //指向底层数组的指针
len int //当前元素数量
cap int //最大容量
}
//切片的创建,推荐用make内置函数
sli := make([]int, 10, 15) //初始化10个为0的值,最大容量为15
fmt.Printf("%v\n", sli) //输出的值为[0 0 0 0 0 0 0 0 0 0]
a := []int{0, 1, 2, 3, 4, 5}
fmt.Println(len(a)) //6
fmt.Println(cap(a)) //6
b := make([]int, 2, 4) //指定初始化长度为2,容量为4
fmt.Println(len(b)) //2
fmt.Println(cap(b)) //4
c := a[0:3] //获取a切片的前三个数据
fmt.Println(len(c)) //3
fmt.Println(cap(c)) //6 底层还是a切片,所以容量是a的容量6
b = append(b, c...)
fmt.Println(len(b)) //5
fmt.Println(cap(b)) //8 当前长度小于容量,不进行扩容
b = append(b, a...)
fmt.Println(len(b)) //11
fmt.Println(cap(b)) //16 当前长度大于8,所以进行扩容
d := make([]int, 2)
copy(d, c) //复制切片数据
fmt.Println(d)
fmt.Println(len(d))
fmt.Println(cap(d))
Map
//第一种定义方法
ma := map[int]string{}
for i := 0; i < 5; i++ {
ma[i] = strconv.Itoa(i)
}
for k, v := range ma { //无序遍历,遍历顺序不固定
fmt.Println("key", k, "value", v)
}
//第二种定义方法
m2 := make(map[int]Man, 10)
man1 := Man{
Name: "man1",
}
m2[0] = man1
for k, v := range m2 {
fmt.Println("key", k, "value", v)
}
if语句
写法介绍 条件语句不用加()
bo := true
if bo {
return true
}
return false
switch语句
写法介绍
var i uint32 = 0
switch i {
case 0:
fmt.Println("0")
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
default:
fmt.Println(">2")
}
Go基础知识梳理(一)的更多相关文章
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
- Anliven - 基础知识梳理汇总 - 软件测试
基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...
- [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型
引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
- C#基础知识梳理索引
C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...
- [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
SQL 基础知识梳理(六)- 函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...
随机推荐
- 题解 - 「MLOI」小兔叽
小兔叽 \(\texttt{Link}\) 简单题意 有 \(n\) 个小木桩排成一行,第 \(i\) 个小木桩的高度为 \(h_i\),分数为 \(c_i\). 如果一只小兔叽在第 \(i\) 个小 ...
- 关于https域名下的页面iframe嵌套http页面的问题
业务场景:在一个https域名下用iframe嵌套一个http域名的页面,会直接报错的,报错信息如下: 这段话的意思是:http域名的页面是通过https域名页面加载的,在一个安全的页面不允许加载一个 ...
- JS 选择结构语句与循环结构语句
笔记整理自:廖雪峰老师的JS教程 选择结构 与Java使用一致. 需要注意的 JavaScript把null.undefined.0.NaN和空字符串''视为false,其他值一概视为true. 循环 ...
- git 撤销,放弃本地修改,放弃已提交修改
一, 未使用 git add 缓存代码时. 可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 &quo ...
- Java高质量博文链接集合
1. 看完这个,Java IO从此不在难 https://www.jianshu.com/p/715659e4775f 2. Java 8 中的 Streams API 详解 https://www. ...
- CSS网页使用Font Awesome图标字体时,css定义 content 属性
原文地址: http://blog.csdn.net/laurel_y/article/details/70842157
- 添加了tabBar之后就不能使用wx.navigateTo跳转页面
我在app.json中添加了增加底部选项卡的代码如下: { "pages": [ "pages/index/index", "pages/lo ...
- 使用Hot Chocolate和.NET 6构建GraphQL应用(8) —— 实现Mutate添加数据
系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 在讨论完GraphQL中的查询需求后,这篇文章我们将演示如何实现GraphQL中的数据添加任务. 思路 在G ...
- java-数据库操作(JDBC)
前言:JDBC用到的API和常用方法 DriverMannager类 加载驱动并创建与数据库的连接,通常使用Class类的静态方法forName()来实现加载驱动,使用getConnection(St ...
- LeetCode随缘刷题之盛最多水的容器
package leetcode.day_01_30; /** * 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) .在坐标内画 n 条垂直线,垂直线 i的两个端 ...