1. go mod tidy 自动下载所有依赖

2. 安装ptotobuf

https://github.com/protocolbuffers/protobuf/releases
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
//protoc -I . helloworld.proto --go_out=plugins=grpc:.
//protoc --go_out=. helloworld.proto
protoc --go-grpc_out=. helloworld.proto

3.slice、map、chan

Golang 默认都是采用值传递,有些值天生就是指针:slice、map、channel。声明后还需要初始化make分配内存

3.1 :=不能声明全局变量//推导变量类型不支持全局变量声明
3.2 iota 仅可以和 const一起使用来定义有规则的枚举
3.3 defer 延迟处理并压栈(在return之后执行,先入后出,后入先出)
3.4 slice(动态数组),动态数组引用传值,且形参一致

slice4种声明方式

myslice1 := []int{1,2,3}
var myslice2 []int
myslice2 = make([]int, 3)
var myslice3 []int = make([]int, 3)
myslice4 := make([]int, 3)
注意:定长数组是值传递,slice 是指针传递,slice切片是左闭右开。

map3种声明方式

var myMap1 map[string]string
myMap1 = make(map[string]string, 10)
myMap1["one"] = "aaa"
myMap2 := make(map[int]string)
myMap2[1] = "aaa"
myMap3 := make(map[string]string) {
    "one": "aaa",
    "two": "bbb",
}

4.chan的声明和使用

ch1 := make(chan Type) //等价于make(chan Type, 0)
ch2 := make(chan Type, capacity)

channel <- value    //发送value到channel
<-channel    //接收并将其丢弃
x := <-channel    //从channel中接收数据,并赋值给x
x, ok := <-channel    //同上,同时检查通道是否已关闭或为空

报错package xxx is not in GOROOT or GOPATH
解决:初始化一个go.mod,...\Go\GolangStudy\5-init> go mod init 5-init,然后使用时import "5-init"即可

5. 结构的声明和实例化

// 类声明

type Person struct {
  Name    string
  Age     int
  Doc     []string // slice切片
}

// 类方法声明-传递值对象

func (p *Person) P1() {
  p.Name = "Tinywan"
  p.Age = 24
}

// 类方法声明-传递指针对象

func (p *Person) P2() {
  p.Name = "Tinyaiai"
  p.Age = 22
}

func main() {

// 实例化对象 实例化的时候可以初始化属性值,如果没有指明则默认为系统默认值
  p1 := &Person{}
  p1.Name = "ShaoBo Wan"
  p1.Age = 20

p2 := &Person{Name:"HaHa"}

p3 := new(Person)
  p3.Name = "New Name"

p4 := Person{}
  p4.Name = "Name 001"
  p4.Age = 26

p5 := Person{Name:"Name 002",Age:28}

// 使用中如果包含数组(动态数组 slice切片),结构体的实例化需要加上类型如上如果intro的类型是[]string
  p6 := &Person{
    "zhangsan",
    25,
    []string{"lisi", "wangwu"},
  }
  fmt.Println(p1, "\n", p2, "\n", p3, "\n", p4, "\n", p5, "\n", p6, "\n")
  //&{ShaoBo Wan 20 []} &{HaHa 0 []} &{New Name 0 []} {Name 001 26 []} {Name 002 28 []} &{zhangsan 25 [lisi wangwu]}
  fmt.Println(&p1, "\n", &p2, "\n", &p3, "\n", &p4, "\n", &p5, "\n", &p6, "\n")
  //0xc000006028 0xc000006030 0xc000006038 &{Name 001 26 []} &{Name 002 28 []} 0xc000006040
  fmt.Println(*p1, "\n", *p2, "\n", *p3, "\n", *p6, "\n")
}

小结:
  1、使用中如果包含数组,结构体的实例化需要加上类型如上如果Doc的类型是[]string。  
  2、实例化的时候可以初始化属性值,如果没有指明则默认为系统默认值。
  3、加&符号和new的是指针对象,没有的则是值对象,这点和php、java不一致,在传递对象的时候要根据实际情况来决定是要传递指针还是值。
  4、当对象比较小的时候传递指针并不划算。

6. Go常用算法

数据结构和算法(Golang实现)https://www.cnblogs.com/nima/p/12711150.html(https://goa.lenggirl.com/#/basic/before)
数据结构主要用来组织数据,也作为数据的容器,载体。各种各样的算法,都需要使用一定的数据结构来组织数据。
6.1 常见的典型数据结构有:链表,栈和队列,树,图
上述可以延伸出各种各样的术语和结构,如列表,集合,哈希表,堆,优先队列,二叉树,红黑树,B+树以及各种变种等。
6.2 算法目的就是为了解决问题,基本的算法分类有:排序算法,查找算法,图相关的算法,其他的算法

7.Go并发示例

交替打印数字和字母
问题描述:
使用两个 goroutine 交替打印序列,一个 goroutine 打印数字, 另外一个 goroutine 打印字母, 
最终效果如下:12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728
解题思路:问题很简单,使用 channel 来控制打印的进度。使用两个 channel ,来分别控制数字和字母的打印序列, 数字打印完成后通过 channel 通知字母打印,
字母打印完成后通知数字打印,然后周而复始的工作。
源码参考 
letter,number := make(chan bool),make(chan bool)
  wait := sync.WaitGroup{}

go func() {
    i := 1
    for {
      select {
      case <-number:
        fmt.Print(i)
        i++
        fmt.Print(i)
        i++
        letter <- true
      }
    }
  }()
  wait.Add(1)
  go func(wait *sync.WaitGroup) {
    i := 'A'
    for{
      select {
      case <-letter:
        if i >= 'Z' {
          wait.Done()
          return
        }

fmt.Print(string(i))
        i++
        fmt.Print(string(i))
        i++
        number <- true
      }

}
  }(&wait)
  number<-true
  wait.Wait()

源码解析:
这里用到了两个channel负责通知,letter负责通知打印字母的goroutine来打印字母,number用来通知打印数字的goroutine打印数字。
wait用来等待字母打印完成后退出循环。

8. https://www.jianshu.com/p/c118d2de698e---使用golang的sort包进行排序

sort.Sort(OneList(oneArr))
Len() 函数 返回要排序的序列的长度
Less() 函数 返回排序需要的比较的规则,如果符合这个规则,就进行交换
Swap() 函数 进行排序的交换规则

Golang基础 一揽子方案相关推荐

  1. Golang题 一揽子方案

    1.Go的XSS(跨站脚本攻击)的防护应该结合以下两种方式. 1.1 验证所有输入数据,有效检测攻击. 1.2 对所有输出数据进行适当的处理,以防止任何已成功注入的脚本在浏览器端运行. func HT ...

  2. golang基础-etcd介绍与使用、etcd存取值、etcd监测数据写入

    关注公众号"风色年代"订阅更多精彩文章,本博大部分文章为转载并已标明原文出处,如有再转敬请保留,请自觉尊重原创作者的劳动成果! golang基础-etcd介绍与使用.etcd存取值 ...

  3. golang基础教程

    目录 golang基础教程(一).环境搭建 golang基础教程(二).开发规范及API golang基础教程(三).变量与数据类型概述 golang基础教程(四).基本数据类型 golang基础教程 ...

  4. golang基础面试题总结

    golang基础面试题总结 前言:由于正在准备之后的实习面试,故总结了一部分golang语言基础的问题,回答全为自己组织的语言,若有错各位大佬可及时指出,大家共同进步,谢谢. 1.go中怎样实现安全读 ...

  5. Go语言学习笔记—golang基础语法

    视频来源:B站<golang入门到项目实战 [2022最新Go语言教程,没有废话,纯干货!]> 文章为自己整理的学习笔记,侵权即删,谢谢支持! 文章目录 golang基础语法 一.gola ...

  6. 土方回填施工方案范本_基础施工方案(土方开挖、回填、混凝土)

    基础施工方案 该工程为广西第四地质队五一基地22#住宅楼工程.为了使基础工程有计划,有组织施工,在确保质量.节约成本和加快施工进度的基础上,按照设计要求和施工规范制定本方案. 一.基础工程概况: 本工 ...

  7. golang基础教程(十)、结构体

    golang基础教程 一.Golang 语言面向对象编程说明 Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对 象语言.所以我们说 Golang 支持面向 ...

  8. 视频教程-桫哥-GOlang基础-01基本程序设计-Go语言

    桫哥-GOlang基础-01基本程序设计 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙影音家庭 ...

  9. Golang 基础之基础语法梳理 (一)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第一章节 Golang 基础之基础语法梳理 (一) Gol ...

最新文章

  1. 临平职高计算机专业高职考大学,临平职高高考再传捷报 本科连续四年蝉联杭州市第一...
  2. wireshark安装
  3. 【pyQuery】抓取startup news首页
  4. eclipse项目迁移到Android Studio
  5. 计算机键盘正确指法操作方法,“认识键盘与正确的指法输入”教案
  6. 误删除了mysql库的user表解决办法
  7. 【Spark Summit EU 2016】沃森媒体分析系统:从单租户Hadoop到3000租户Spark的架构演进...
  8. VS远程Linux项目附加pthread
  9. tensorflow之variables_to_restore
  10. 惯导系统模型及其仿真(五)
  11. emWin使用(1)——LCD屏幕接口、LCD驱动芯片确定
  12. 什么是微内核,看这一篇就够了
  13. Android之提示Could not find com.android.support:appcompat-v7:25.3.1
  14. PADS-VX入门到精通实战项目讲解(上)—LOGIC部分-覃小刚-专题视频课程
  15. 新手小白怎样才能画好女生身体?画好女生身体有哪些技巧?
  16. 验证身份证号码是否有效
  17. phpcmsv9实现手机端与PC端双模板的方法与详细教程(转)
  18. WaitForSingleObject 返回值为 WAIT_ABANDONED 的情况
  19. 对secx,cscx积分的过程
  20. 输入10个数,将最大的数字输出;

热门文章

  1. hbuilder无法检测到安卓手机3.4.15
  2. 基于IQxel的WIFI RF测试指导书
  3. CUIT第七届智能小车(基础四轮电磁组)比赛总结
  4. CUIT Online Judge 最大值与最小值
  5. 开源OA:手把手教你搭建OA办公系统(12)O2OA与第三方系统的数据交互实现
  6. 关于发票的这些事儿,发票问题大汇总42个问题,15种发票不能抵扣
  7. 智能优化 | MATLAB实现CS-ANN布谷鸟优化人工神经网络算法
  8. 湖南大学计算机与通信学院研究生,湖南大学计算机与通信学院介绍
  9. javaSE常用类(二)—— 日期类
  10. 机器人硬汉 聆听_智能巡检机器人“上刀山下火海”冲锋陷阵成“硬汉”