首页 GoLang

GoLang

  • GO常见的错误99%程序员会遇到(解决方法)

    GO常见的错误99%程序员会遇到(解决方法)

    新学习go语言的人可能遇到常见的错误,其中有两个比较常见的错误,需要单独拿出来说下,为什么要单独说呢,因为这两个错误跟其他语言不同,是因为go本身的设计造成的。 在循环(迭代)中使用了变量的引用 在go语言中,循环(迭代)所使用的变量是同一个变量,只是在每次循环的时候被赋于不同的值,这样的做的目的呢,当然是出于高效考虑咯。但是,如果使用不当的话,可能会引起意想不到的行为。 举一个栗子: func main() { var out []*int for i := 0; i < 3;...

    GoLang 2020-02-02 25 0
  • 详解如何在Go项目中输出版本信息

    详解如何在Go项目中输出版本信息

    我们经常在使用CLI工具的时候,都会有这样的参数输出: ➜ ~ docker version Client: Docker Engine - Community Version: 18.09.2 API version: 1.39 Go version: go1.10.8 Git commit: 6247962 Built: Sun Feb 10 04:12:39 2019 OS/Arch: darwin/amd64 Experimental...

    GoLang 2020-02-02 24 0
  • golang并发编程的实现

    golang并发编程的实现

    go main函数的执行本身就是一个协程,当使用go关键字的时候,就会创建一个新的协程 channel channel 管道,用于在多个协程之间传递信号 无缓存管道 当对无缓冲通道写的时候,会一直阻塞等到某个协程对这个缓冲通道读 阻塞场景: 通道中无数据,但执行读通道。 通道中无数据,向通道写数据,但无协程读取。 综上,无缓存通道的读写必须同时存在,且读写分别在两个不同的协程 func main(){ ch := make(chan int)...

    GoLang 2020-02-02 33 0
  • golang 使用 viper 读取自定义配置文件

    golang 使用 viper 读取自定义配置文件

    viper 支持 Yaml、Json、 TOML、HCL 等格式,读取非常的方便。 viper 官网有案例:https://github.com/spf13/viper go get github.com/spf13/viper 创建 config.yaml 文件 database: driver: mysql host: 127.0.0.1 port: 3306 username: blog dbname: blog password: 123456...

    GoLang 2020-02-02 34 0
  • Go语言Telnet回音服务器的实现

    Go语言Telnet回音服务器的实现

    本文介绍了Go语言Telnet回音服务器,分享给大家,具体如下: package main import ( "fmt" "net" "bufio" "strings" "os" ) func main() { // 创建一个程序结束码的通道 exitChan := make(chan int) // 将服务器并发运行 go server("127.0.0.1:7001", exitChan) // 通道阻塞, 等待...

    GoLang 2020-02-02 28 0
  • 学习使用Go反射的用法示例

    学习使用Go反射的用法示例

    什么是反射 大多数时候,Go中的变量,类型和函数非常简单直接。当需要一个类型、变量或者是函数时,可以直接定义它们: type Foo struct { A int B string } var x Foo func DoSomething(f Foo) { fmt.Println(f.A, f.B) } 但是有时你希望在运行时使用变量的在编写程序时还不存在的信息。比如你正在尝试将文件或网络请求中的数据映射到变量中。或者你想构建一个适用于不同类型的工具。在这种...

    GoLang 2020-02-02 32 0
  • Go unsafe 包的使用详解

    Go unsafe 包的使用详解

    unsafe包 golang是一种静态的强类型的语言,所有的类型都是不能随意转换的,Go语言是不允许两个指针类型进行转换的。go官方是不推荐使用unsafe的操作因为它是不安全的,它绕过了golang的内存安全原则,容易使你的程序出现莫名其妙的问题,不利于程序的扩展与维护。但是在很多地方却是很实用。在一些go底层的包中unsafe包被很频繁的使用。 unsafe 定义 package unsafe //ArbitraryType仅用于文档目的,实际上并不是unsafe包的一部分,它表示任意G...

    GoLang 2020-02-02 28 0
  • Go 验证字符串中是否包含中文(推荐)

    Go 验证字符串中是否包含中文(推荐)

    发现一个验证字符串是否包含中文滴时候,一个比正则更好使滴方法,而且是golang 自带滴验证。 不需要自己写正则验证,代码如下: package main import ( "fmt" "regexp" "unicode" ) func main() { s1 := "我是中国人hello word!,2020 street 188#" var count int for _, v := range s1 { if unicode.Is(unicode.Han, v)...

    GoLang 2020-02-02 26 0
  • 自己动手用Golang实现约瑟夫环算法的示例

    自己动手用Golang实现约瑟夫环算法的示例

    继上一篇单向链表,单线链表可以进一步扩展为环,如下图所示: 特点: 1、第一个节点称为头部节点,最后一个节点称为尾部节点 2、每个节点都单方面的指向下一个节点 3、尾部节点下一个节点指向头部节点 题目: 17世纪的法国数学家加斯帕讲了这样一个故事: 15个教徒和15 个非教徒,在深海海上遇险,必须将一半的人投入海海中,其余的人才能幸免于难,于是想了一个办法: 30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海海...

    GoLang 2020-02-02 25 0
  • 用go写的五子棋预测算法的实现

    用go写的五子棋预测算法的实现

    详细请看 Github:https://github.com/shanhuijie/GoWatch/tree/master/fiveinarow five in a row (五子棋成功预测) 从横、纵、 左斜升、 左斜降 四个角度判断 const( matrix = 50*50 point = 3 ) type Coordinat struct{ x int y int } type Allinat struct{ key...

    GoLang 2020-02-02 27 0
  • 利用systemd部署golang项目的实现方法

    利用systemd部署golang项目的实现方法

    简介 - CentOS 7 继承了 RHEL 7 的新的特性,例如强大的 systemd, 而 systemd 的使用也使得以往系统服务的 /etc/init.d 的启动脚本的方式就此改变, 也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多。 - CentOS 7 的服务 systemctl 脚本存放在:/usr/lib/systemd/,有系统 system 和用户 user 之分, 即:/usr/lib/systemd/system 和 /usr/lib/s...

    GoLang 2020-02-02 24 0
  • 分享6个Go处理字符串的技巧小结

    分享6个Go处理字符串的技巧小结

    如果你从 Ruby 或者 Python 转型到 Go,将会有很多语言差异需要学习,其中很多问题都是围绕处理 string 类型。 下面是一些字符串的技巧,这些技巧解决了我在使用 Golang 的最初几周中遇到的问题。 1. 多行字符串 在 Go 中创建多行字符串非常容易。只需要在你声明或赋值时使用 (``) 。 str := `This is a multiline string.` 注意 - 任何你在字符串中的缩进都将被保留在最终结果。 str := `This s...

    GoLang 2020-02-02 23 0
  • Go 如何基于IP限制HTTP访问频率的方法实现

    Go 如何基于IP限制HTTP访问频率的方法实现

    如果你运行 HTTP 服务,并且希望限制 HTTP 的访问频率,那么你可以借助一些比较稳定的工具,例如: github.com/didip/tollbooth。不过如果你构建的应用比较简单,也可以自己来实现。 我们可以使用一个现有的 Go 包 x/time/rate。 本课程,我们将创建一个简单的中间件实现基于 IP 限制 HTTP 访问频率。 简单的 HTTP 服务 让我们从创建一个简单的 HTTP 服务开始,它有非常简单的终端。 但是,因为它的访问频率可能非常高,因此我们要为它添加频率限制。...

    GoLang 2020-02-02 31 0
  • golang实现redis的延时消息队列功能示例

    golang实现redis的延时消息队列功能示例

    前言 在学习过程中发现redis的zset还可以用来实现轻量级的延时消息队列功能,虽然可靠性还有待提高,但是对于一些对数据可靠性要求不那么高的功能要求完全可以实现。本次主要采用了redis中zset中的zadd, zrangebyscore 和 zdel来实现一个小demo。 提前准备 安装redis, redis-go 因为用的是macOS, 直接 $ brew install redis $ go get github.com/garyburd/redigo/redis 又因为比较懒...

    GoLang 2020-02-02 31 0
  • go切片的copy和view的使用方法

    go切片的copy和view的使用方法

    语义理解切片 go 语言中的切片是 go 语言的一个特色,从语义上来说,切片就是把一个整体的东西切分成小的部分,那么对于语言中的切片也是同理。 举个例子看如下代码: package main import "fmt" func main() { arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7} fmt.Println("arr[2:6]:", arr[2:6]) // 从下标2到下标6 fmt.Println("arr[:6]:", arr[:6]...

    GoLang 2020-02-02 20 0
1 2 3 4 5 ››