深圳幻海软件技术有限公司 欢迎您!

  • 我的设计模式之旅、01 策略模式、简单工厂、反射

    编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。程序介绍本程序实现收银员对顾客收银时可以采用不同的促销策略,支持原价,按折扣促销,满多少返利多少三种策略。使用策略模式与简单工厂模式。简单工厂使用依赖注入方法,通过配置文件config.json能够动态实例化对象。PSC:\Users

  • 「Go语言进阶」并发编程详解

    并发VS并行在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来聊聊并发和并行之间的区别。并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时

  • Python装饰器-闭包与函数装饰器

    一、闭包在学习装饰器前,需要先了解闭包的概念。形成闭包的要点:函数嵌套将内部函数作为外部函数的返回值内部函数必须要使用到外部函数的变量下面以一个计算列表平均值的案例来讲解闭包:复制defmake_average():#创建一个列表,用来保存数值nums=[]#定义一个内部函数,用来计算列表的平均值d

  • Go语言中通过WaitGroup控制并发

    与Channel区别Channel能够很好的帮助我们控制并发,但是在开发习惯上与显示的表达不太相同,所以在Go语言中可以利用sync包中的WaitGroup实现并发控制,更加直观。基本使用示例我们将之前的示例加以改造,引入sync.WaitGroup来实现并发控制。•首先我们在主函数中定义WaitG

  • 不再使用 Print 来Debug了, IceCream 来了!

    写在前面在编程过程中,Bug几乎是不可避免的。其实大部分程序员花了大量的时间进行Debug(调试),以使他们的代码没有Bug。​在调试时,最常用的方法无疑是选择使用print()语句来了解pipeline流程以及发现bug。然而,使用print()有许多注意事项,例如:打印语句通常是为了向用户显示一

  • Go 云原生实战:如何增加应用配置模块

    Part1介绍当我们为自己编写程序时,通常会将一些重要的配置项直接写在源代码里,比如:服务器监听的端口、数据库使用的名称和端口号、HTTP请求超时的持续时间...但是,如果我们尝试将这个项目开源分享给他人使用,用户使用的数据库的用户名和名称可能与你不相同,甚至你还要为他们的服务器使用另一个端口。如果

  • Go 学习:那些不一样的知识点(上)

    在学习Go语言的过程中,会涉及到语法、数据结构、和一些Go特有的东西,其中有不少现在还印象深刻,本文就说说Go语言中那些不一样的地方。1、变量和函数的声明复制packagemainimport"fmt"funcmain(){varnamestringname="oec2003"age:=18fmt.

  • 为什么C++中有函数指针还需要std::function?

    大家好,我是小风哥。C/C++中可以使用指针指向一段代码,这个指针就叫函数指针,假设有这样一段代码:复制#include<stdio.h>intfunc(inta){returna+1;}voidmain(){int(*f)(int)=func;printf("%p\n",f);}1.2

  • OOP 思想在 TCC/APIX/GORM 源码中的应用

    作者|张瀚珑名词解释OOP面向对象程序设计(ObjectOrientedProgramming,OOP)是一种计算机编程架构。OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。OOP达到了软件工程的三个主要目标:重用性、灵活性和扩展性。面向对象编程的三大特点:封装性、继承

  • 如何在 Go 函数中获取调用者的函数名、文件名、行号......

    背景我们在应用程序的代码中添加业务日志的时候,不论是什么级别的日志,除了我们主动传给Logger让它记录的信息外,这行日志是由哪个函数打印的、所在的位置也是非常重要的信息,不然排查问题的时候很有可能就犹如大海捞针。对于在记录日志时记录调用Logger方法的调用者的函数名、行号这些信息。有的日志库支持

  • Go语言 | 基于 Channel 实现的并发安全的字节池

    字节切片[]byte是我们在编码中经常使用到的,比如要读取文件的内容,或者从io.Reader获取数据等,都需要[]byte做缓冲。复制funcReadFull(rReader,buf[]byte)(nint,errerror)func(f*File)Read(b[]byte)(nint,errer

  • 探讨两种 Option 编程模式的实现

    option编程模式的引出在我们日常开发中,经常在初始化一个对象时需要进行属性配置,比如我们现在要写一个本地缓存库,设计本地缓存结构如下:复制typecachestruct{//hashFuncrepresentsusedhashfuncHashFuncHashFunc//bucketCountre

  • 如何使用高阶函数编程提升代码的简洁性

    摘要函数是Go语言的一等公民,本文采用一种高阶函数的方式,抽象了使用gorm查询DB的查询条件,将多个表的各种复杂的组合查询抽象成了一个统一的方法和一个配置类,提升了代码的简洁和优雅,同时可以提升开发人员的效率。背景有一张DB表,业务上需要按照这个表里的不同字段做筛选查询,这是一个非常普遍的需求,我

  • 面试官:Context携带数据是线程安全的吗?

    本文转载自微信公众号「Golang梦工厂」,作者AsongGo。转载本文请联系Golang梦工厂公众号。哈喽,大家好,我是asong。最近一个群里看到一个有趣的八股文,问题是:使用context携带的value是线程安全的吗?这道题其实就是考察面试者对context实现原理的理解,如果不知道cont

  • Go Error 嵌套到底是怎么实现的?

    GoError的设计哲学是「ErrorsAreValues」。这句话应该怎么理解呢?翻译起来挺难的。不过从源码的角度来看,好像更容易理解其背后的含义。GoError源码很简单,寥寥几行:复制// src/builtin/builtin.go  type err

  • 七年了,没见过代码中出现过两个感叹号

    有半个多月没更新笔记了,广告少,动力也明显不足了,挺安逸的,毕竟最近鱼鹰也有其它事情要忙,主业要紧。在此感谢大家的继续关注!今天继续更新一篇小短文,希望对你有帮助。复制int func(int temp) {   return !

  • 为什么要避免在 Go 中使用 ioutil.ReadAll?

    ioutil.ReadAll主要的作用是从一个io.Reader中读取所有数据,直到结尾。在GitHub上搜索ioutil.ReadAll,类型选择Code,语言选择Go,一共得到了637307条结果。这说明ioutil.ReadAll还是挺受欢迎的,主要也是用起来确实方便。但是当遇到大文件时,这个

  • Go 有哪几种无法恢复的致命场景?

     大家好,我是煎鱼。有一次事故现场,在紧急恢复后,他正在排查代码,查了好一会。我回头一看,这错误提醒很明显就是致命错误,较好定位。但此时,他竟然在查panic-recover是不是哪里漏了,我表示大受震惊...今天就由煎鱼给大家分享一下错误类型有哪几种,又在什么场景下会触发。错误类型err

  • Golang 语言该用命名返回值吗?

     01介绍Golang语言支持命名返回值,它与使用普通(匿名)返回值不同的是,命名返回值会被视为定义在函数顶部的变量,并且在使用return语句返回时,不再必须在其后面指定参数名,也就是支持“裸”返回。而使用普通返回值时,使用return语句返回时,需要在其后面指定与普通返回值相同类型的参

  • Go官方设计了一个信号量库

    前言哈喽,大家好,我是asong。在写上一篇文章请勿滥用goroutine时,发现Go语言扩展包提供了一个带权重的信号量库Semaphore,使用信号量我们可以实现一个"工作池"控制一定数量的goroutine并发工作。因为对源码抱有好奇的态度,所以在周末仔细看了一下这个库并进行了解析,在这里记录一

推荐阅读