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基础知识梳理(一)的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. Anliven - 基础知识梳理汇总 - 软件测试

    基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...

  7. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  8. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  9. C#基础知识梳理索引

    C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...

  10. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

随机推荐

  1. 学习Java第1天

    今天所做的工作:1.了解Java语言的发展历史 2.安装了Eclipse软件 3.学习了Eclipse的基本使用方法 4.学习了Java基本输出语法 5.成功输出了helloworld 6.学习了Ja ...

  2. docker k8s安装

    docker安装 删除依赖包 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docke ...

  3. java 多线程 start方法 run方法 简单介绍。

    一 start开启一个多线程, run 只是一个内部的方法. package com.aaa.threaddemo; /* * start方法的作用? * 在 Java中启动多线程调用的是start方 ...

  4. Android 12(S) 图形显示系统 - createSurface的流程(五)

    题外话 刚刚开始着笔写作这篇文章时,正好看电视在采访一位92岁的考古学家,在他的日记中有这样一句话,写在这里与君共勉"不要等待幸运的降临,要去努力的掌握知识".如此朴实的一句话,此 ...

  5. Atcoder ARC-068

    A 不难发现从 \(5\) 开始一直往 \(6\) 转再转回来是最优的,直接模拟即可. B 不难发现可以将多余部分直接贪心消去,最后必然会剩下两个或 \(1\) 个多余的数. 如果剩下两个,此时多余的 ...

  6. Redis集成SpringBoot

    简介 此案例中使用Centos7+redis+SpringBoot. redis安装 https://www.cnblogs.com/xiaofengshan/p/15860447.html 添加依赖 ...

  7. 【C++】近期C++特性进阶学习总结(一)

    前言 C++的特性多的数不胜数,语言标准也很多,所以不定期对近期所学的C++知识进行总结,是对自身知识体系检查的良好机会,顺便锻炼一下写博客的文笔 三/五/零之法则 三之法则:如果某个类需要用户定义的 ...

  8. requests库session保持持久会话

      requests中cookie的原理 http://blog.csdn.net/zhu_free/article/details/50563756   requests - cookies的实现例 ...

  9. MySQL时间格式TIMESTAMP和DATETIME的区别

    时区,timestamp会跟随设置的时区变化而变化,而datetime保存的是绝对值不会变化 自动更新,insert.update数据时,可以设置timestamp列自动以当前时间(CURRENT_T ...

  10. 基于UDP传输协议局域网文件接收软件设计 Java版

    网路传输主要的两大协议为TCP/IP协议和UDP协议,本文主要介绍基于UDP传输的一个小软件分享,针对于Java网络初学者是一个很好的练笔,大家可以参考进行相关的联系,但愿能够帮助到大家. 话不多说, ...