大漠知秋的加油站

  • 首页
Golang
Docker CE

Golang Docker 部署

环境 使用语言 Go 使用镜像 golang alpine scratch Go 程序 一个简单的服务 func indexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world") } func main() { http.HandleFunc("/", indexHandler) http.ListenAndServe(":9090", nil) } Dockerfile FROM golang as golan…

2022年5月13日 0条评论 1172点热度 1人点赞 大漠知秋 阅读全文
Golang

并发 - 同步

  之前喊过一句口号,倡导用通信来共享数据,而不是通过共享数据来进行通信,但考虑到即使成功地用 channel 来作为通信手段,还是避免不了多个 goroutine 之间共享数据的问题,Go 语言的设计者虽然对 channel 有极高的期望,但也提供了妥善的资源锁方案。 同步锁   Go 语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 sync.RWMutex。Mutex 是最简单的一种锁类型,同时也比较暴力,当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖…

2019年1月3日 0条评论 1218点热度 0人点赞 大漠知秋 阅读全文
Golang

问题 - 出让时间片

  Go 和 Java 在并发执行上的不同还在于,Java 的多线程是一种抢占式的时间片占用规则,而 Go 的 goroutine 是一种非抢占式的时间片占用规则,也就是说,如果一个 goroutine 在使用 CPU 时间片,那么其他再多的 goroutine 都得阻塞。   我们可以在每个 goroutine 中控制何时主动出让时间片给其他 goroutine,这可以使用 runtime 包中的 Gosched() 函数实现。   实际上,如果要比较精细地控制 goroutine 的行为,就必须比较深入地了解 …

2019年1月3日 0条评论 1215点热度 0人点赞 大漠知秋 阅读全文
Golang

goroutine

并发概念   回到在 Windows 和 Linux 出现之前的古老年代,程序员在开发程序时并没有并发的概念,因为命令式程序设计语言是以串行为基础的,程序会顺序执行每一条指令,整个程序只有一个执行上下文,即一个调用栈,一个堆。并发则意味着程序在运行时有多个执行上下文,对应着多个调用栈。我们知道每一个进程在运行时,都有自己的调用栈和堆,有一个完整的上下文,而操作系统在调度进程的时候,会保存被调度进程的上下文环境,等该进程获得时间片后,再恢复该进程的上下文到系统中。   从整个操作系统层面来说,多个进程是可以并发的,那…

2019年1月3日 0条评论 525点热度 0人点赞 大漠知秋 阅读全文
Golang

面向对象 - 接口

  Go 语言的接口并不是其他语言(C++、Java、C#等)中所提供的接口概念。   在 Go 语言出现之前,接口主要作为不同组件之间的契约存在。对契约的实现是强制的,你必须声明你的确实现了该接口。为了实现一个接口,你需要从该接口继承: interface IFoo { void Bar(); } class Foo implements IFoo { // Java文法 // ... } class Foo : public IFoo { // C++文法 // ... } IFoo* foo = new Fo…

2019年1月3日 0条评论 1201点热度 0人点赞 大漠知秋 阅读全文
Golang

面向对象 - 使用组合和定义别名

  上一节说过: public 和 private 是针对包一级的可见性,那么如果我们引入了一个其他同事或者第三方的包,有一个功能我们需要使用,但是他们并没有提供,这时候该怎么扩充呢? 使用组合   如下,有一个第三方提供的加法方法: package third_partyh type TMath struct { I int } func (math *TMath) Add(tarMath TMath) { math.I += tarMath.I }   我们可以这样使用: package main import…

2019年1月3日 0条评论 1197点热度 0人点赞 大漠知秋 阅读全文
Golang

面型对象 - 包和封装

命名规范   Go 中的命名规范 名字—般使用 CamelCase (驼峰式大小写法) 首字母大写:public 首字母小写:private   这里的 public 和 private 是针对谁来说的?针对包。每个目录一个包,但是和 Java 不一样,包名并不一定要和目录名一样,但是每个目录下只能有一个包名。main 方法比较特殊,包含了程序的执行入口,包名需要是 main,也就是说 main 方法所在目录的所有 .go 文件的包名必须为 main。   为结构体定义方法时需要注意的事项: 为结构定义的方法必须放…

2019年1月3日 0条评论 1211点热度 0人点赞 大漠知秋 阅读全文
Golang

面向对象 - 结构体

  首先说一个概念性问题: Go 语言仅支持封装,不支持继承和多态; GO 语言没有 class ,只有 struct;   Go 语言的结构体(struct)和其他语言的类(class)有同等的地位,但 Go 语言放弃了包括继承在内的大量面向对象特性,只保留了组合(composition)这个最基础的特性。   组合甚至不能算面向对象特性,因为在 C 语言这样的过程式编程语言中,也有结构体,也有组合。组合只是形成复合类型的基础。   原来说过,所有的 Go 语言类型(指针类型除外)都可以有自己的方法。在这个背景下…

2019年1月3日 0条评论 1178点热度 0人点赞 大漠知秋 阅读全文
Golang

面向对象 - 类型系统

  顾名思义,类型系统是指一个语言的类型体系结构。一个典型的类型系统通常包含如下基本内容: 基础类型,如 byte、int、bool、float 等; 复合类型,如数组、结构体、指针等; 可以指向任意对象的类型(Any 类型); 值语义和引用语义; 面向对象,即所有具备面向对象特征(比如成员方法)的类型; 接口。   类型系统描述的是这些内容在一个语言中如何被关联。因为 Java 语言自诞生以来被称为最纯正的面向对象语言,所以就先以Java语言为例说说类型系统。   在 Java 语言中,存在两套完全独立的类型系统…

2019年1月3日 0条评论 1170点热度 0人点赞 大漠知秋 阅读全文
Golang

错误处理

  错误处理是学习任何编程语言都需要考虑的一个重要话题。在早期的语言中,错误处理不是语言规范的一部分,通常只作为一种编程范式存在,比如 C 语言中的 errno。但自 C++ 语言以来,语言层面上会增加错误处理的支持,比如异常(exception)的概念和 try-catch 关键字的引入。Go 语言在此功能上考虑得更为深远。漂亮的错误处理规范是 Go 语言最大的亮点之一。 error 接口   Go 语言引入了一个关于错误处理的标准模式,即 error 接口,该接口的定义如下: type error interf…

2019年1月3日 0条评论 1195点热度 0人点赞 大漠知秋 阅读全文
12
分类
  • C++ / 11篇
  • Develop Software / 3篇
  • Docker CE / 24篇
  • Elasticsearch / 3篇
  • FastDFS / 1篇
  • Flutter / 1篇
  • Git / 3篇
  • GitLab / 6篇
  • Golang / 21篇
  • Http Client 4.5.2 / 2篇
  • Java / 14篇
  • Kubernetes / 19篇
  • Linux / 65篇
  • Mac / 5篇
  • Maven / 1篇
  • MyBatis / 1篇
  • MySQL / 8篇
  • Nginx / 6篇
  • Rabbit MQ / 10篇
  • Redis / 1篇
  • Spring / 1篇
  • Spring Boot / 12篇
  • Spring Cloud Finchley.RELEASE / 50篇
  • Sublime / 2篇
  • Windows / 1篇
  • 吉他 / 2篇
  • 图论 / 8篇
  • 数据结构与算法 / 11篇
  • 未分类 / 1篇

COPYRIGHT © 2023 大漠知秋的加油站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备16029200号-2