Go语言中文网 为您找到相关结果 5247

golang 系列教程(三)—— 语法介绍

概要 本章介绍golang基本的语法。golang语法相对来说比较简单,掌握本章内容即可满足语法方面的基本开发需要。 局部变量定义 func test1() { var a int // 定义临时变量a } 复制代码全局变量定义 var a int // 定义全局变量a 复制代码变量初始化 var b string = "apache" //数组初始化 var strAry = [10]string{"aa", "bb", "cc", "dd", "ee"} //切片初始化 var s = make([]string, 0) //字典初始化 var m = map[string]int{ "apple":1, "watermeter":2, } 复制代码条件选择 var a string =...阅读全文

博文 2019-08-18 03:04:19 叶不闻

Go 每日一库之 go-homedir

简介 今天我们来看一个很小,很实用的库go-homedir。顾名思义,go-homedir用来获取用户的主目录。 实际上,使用标准库os/user我们也可以得到这个信息: package main import ( "fmt" "log" "os/user" ) func main() { u, err := user.Current() if err != nil { log.Fatal(err) } fmt.Println("Home dir:", u.HomeDir) } 复制代码那么为什么还要go-homedir库? 在 Darwin 系统上,标准库os/user的使用需要 cgo。所以,任何使用os/user的代码都不能交叉编译。 但是,大多数人使用os/user的目的仅仅只是想获...阅读全文

golang 源码剖析(7): 延迟defer

简介 延迟调用(defer)的优势是: 即使函数执行出错,依然能保证回收资源等操作得以执行 可以在变量的定义处加入defer,代码结构上避免忘记做某些数据的回收 劣势: 性能上会会比直接调用慢一些 如果在defer中释放,相对来说只会在函数执行结束的时候才会调用,变量生命周期会变长. 定义 编写以下程序, dump出汇编. defer主要调用了一下两个函数func deferprocStack(d *_defer)和func deferreturn(arg0 uintptr) package main import ( "fmt" ) func main() { defer fmt.Println(0x11) } (base) ➜ readsrc go tool objdump -s "ma...阅读全文

博文 2020-03-08 17:32:42 darcyaf

go 的介绍与安装

1. 介绍与安装 Golang 是什么 Go 亦称为 Golang(按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编译型的静态语言。 Golang 的主要关注点是使得高可用性和可扩展性的 Web 应用的开发变得简便容易。(Go 的定位是系统编程语言,只是对 Web 开发支持较好) 为何选择 Golang 既然有很多其他编程语言可以做同样的工作,如 Python,Ruby,Nodejs 等,为什么要选择 Golang 作为服务端编程语言? 以下是我使用 Go 语言时发现的一些优点: 并发是语言的一部分(并非通过标准库实现),所以编写多线程程序会是一件很容易的事。后续教程将会讨论到,并发是通过 Goroutines 和 channels...阅读全文

博文 2019-04-03 18:35:08 听砜

如何才能写出正确的程序?

平时我们写程序的时候,总是莫名其妙的出现Bug,一鼓作气的写完一个接口后,经常被队友喷「你怎么一回事?结果与预期不一致啊」 老脸一红,然后一个人藏在角落调试半天,才发现原来是某一个边界条件没处理好,导致Bug重重,今天我们从二分查找算法,来聊聊如何写出正确的程序 像我们熟知的二分查找算法,在1946年就被提出来了,但是到了1962年才出现了完全没有Bug的二分查找法 二分查找法的思想并不复杂,我们很多人张口就能来,但是为什么间隔了辣么多年,才诞生完全没有Bug的二分查找算法呢? 二分查找算法,难就难在边界条件的处理上,我们经常写出Bug,往往也是出现在边界条件没处理好而导致 因为学习一个算法的思想是很简单的,但是让思想落地,写出完全没有Bug的二分查找,却并不是一件容易的事情 所以我们在写程...阅读全文

博文 2019-06-08 23:32:43 闹闹吃鱼

Golang笔记

--[切片和数组]-- 切片本质上是一组指向数组特定片段的指针,所以切片不可能单独存在,即使直接make一个切片,其背后也隐藏着一个数组来实际存储数据。var a [2]int //定义的是一个2长度的数组var b []int //定义的是一个切片b=a //这个赋值在语法上是不成立的var matrixA [][2]inta=matrixA[0] //因为是数组的拷贝,这里进行值拷贝,a和matrixA互不影响var matrixB [][]intb = matrixB[0] 因为是切片的拷贝,这里只是一个指针引用,修改数组中的值会影响b--[异常机制 defer]--defer func example() {***}这里example函数无论写在父函数的什么位置,都只会在发生异常或者...阅读全文

Go 命令行解析 flag 包之扩展新类型

上篇文章 说到,除布尔类型 Flag,flag 支持的还有整型(int、int64、uint、uint64)、浮点型(float64)、字符串(string)和时长(duration)。 flag 内置支持能满足大部分的需求,但某些场景,需要自定义解析规则。一个优秀的库肯定要支持扩展的。本文将介绍如何为 flag 扩展一个新的类型支持? 扩展目标 在 gvg 这个小工具中,list 子命令支持获取 Go 的版本列表。但版本的信息来源有多处,比如 installed(已安装)、local(本地仓库)和 remote(远程仓库)。 查看下 list 的帮助信息,如下: NAME: gvg list - list go versions USAGE: gvg list [command optio...阅读全文

博文 2019-11-25 15:04:42 波罗学

Golang package sync 剖析(二): sync.WaitGroup

一、前言 Go语言在设计上对同步(Synchronization,数据同步和线程同步)提供大量的支持,比如 goroutine和channel同步原语,库层面有 - sync:提供基本的同步原语(比如Mutex、RWMutex、Locker)和 工具类(Once、WaitGroup、Cond、Pool、Map) - sync/atomic:提供变量的原子操作(基于硬件指令 compare-and-swap) -- 引用自《Golang package sync 剖析(一): sync.Once》 上一期中,我们介绍了 sync.Once 如何保障 exactly once 语义,本期文章我们介绍 package sync 下的另一个工具类:sync.WaitGroup。 二、为什么需要 Wa...阅读全文

博文 2020-01-28 14:32:39 oscarzhao

Golang——数组array

数组是同一种数据类型元素的集合。 数组声明时需要确定数组大小,一旦定义,不可修改。 数组的长度必须是常量,并且长度是数据类型的一部分。[5]int和[3]int是不同的类型。 数组索引从0开始。 数组是值类型。 var 变量名 [数量]T 声明和初始化 func main() { //数组声明 var a [5]int var b [3]int //数组赋值 a = [5]int{1,2,3,4,5} b = [3]int{1} fmt.Println(a) //[1 2 3 4 5] fmt.Println(b) //[1 0 0] fmt.Printf("a:%T b:%T\n", a, b) //a:[5]int b:[3]int //数组声明又赋值 var c = [3]string...阅读全文

博文 2020-05-22 11:33:59 Cici冬雪

Golang Tips

Go的数组只能有固定的长度,传入变量作为数组长度时,只能创建为定义了size的切片 length := 5 array := [length]int // error: non-constant array bound length array := make([]int, length) Go没有内置的比较整数大笑的方法,需要自己实现 func max(a int, b int) int { if a >= b { return a } else { return b } } Go没有内置的判断array或map是否存在某一个元素的方法,需要通过判断普通的get的error实现 // implement array/list contains func contains(array []i...阅读全文

博文 2020-05-16 02:32:43 Lyudmilalala

GO基础

声明变量:声明变量的一般形式是使用 var 关键字:var name type Go语言的基本类型(type)有:boolstringint、int8、int16、int32、int64uint、uint8、uint16、uint32、uint64、uintptrbyte // uint8 的别名rune // int32 的别名 代表一个 Unicode 码float32、float64complex64、complex128 变量声明的标准格式:var 变量名 变量类型 变量声明的批量格式:var (name1 type1name2 ) 变量声明可使用更加简短的变量定义和初始化语法。名字 := 表达式 变量初始化: 变量初始化的标准格式var 变量名 类型 = 表达式 编译器推导类型的格...阅读全文

博文 2019-11-12 19:03:21 Mirajane

9.指针

Go语言基础之指针 | Golang 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。 Go语言中的指针 任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。 比如,“永远不要高估自己”这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地址0x123456),我在程序中把这段话赋值给变量A,把内存地址赋值给变量B。这时候变量B就是一个指针变量。通过变量A和变量B都能找到我的座右铭。 Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号:&(取地址)和*(根据地址取...阅读全文

博文 2020-04-05 20:33:05 雪上霜

golang学习笔记(一)——golang基础和相关数据结构

小白前端一枚,最近在研究golang,记录自己学习过程中的一些笔记,以及自己的理解。 go中包的依赖管理 go中的切片 byte 和 string go中的Map go中的struct结构体 go中的方法 go中的interface接口 interface{} 原文在我的博客中:https://github.com/forthealll... 欢迎star~ 1、go中包的依赖管理 首先要了解的是GOPATH的含义,GOPATH是go命令依赖的重要变量,可以通过: go env 来查看相应的开发环境中GOPATH的值,也可以通过export GOPATH指定: export GOPATH = /usr/local/go 指定GOPATH目录后, GOPATH目录包含了3个子目录: src存放...阅读全文

博文 2018-12-26 15:34:44 yuxiaoliang

go 学习笔记之go是不是面向对象语言是否支持面对对象编程?

面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对象的编程风格给开发者带来了极大的便利性,解放了劳动,松耦合,高内聚也成为设计的标准,从而让我们能够更加愉快地复制粘贴,做代码的搬运工,很多第三方工具开箱即用,语义明确,职责清晰,这都是面向对象编程的好处! Go 语言也是来源于 C 语言,不知道你是否也会好奇 Go 语言是否支持面向对象这种编程风格呢? 准确的说,Go 既支持面向对象编程又不是面向对象语言! 是也不是,难道像是薛定谔的猫一样具有不确定性? 其实这个答案是官方的回答,并不是我个人凭空杜撰而来的,如需了解详情可参考 Is Go an ...阅读全文

博文 2019-08-21 22:32:50 雪之梦技术驿站

《Go 语言程序设计》读书笔记(四)接口

接口概述 一个具体的类型可以准确的描述它所代表的值并且展示出对类型本身的一些操作方式就像数字类型的算术操作,切片类型的索引、附加和取范围操作。总的来说,当你拿到一个具体的类型时你就知道它的本身是什么和你可以用它来做什么。 在Go语言中还存在着另外一种类型:接口类型。接口类型是一种抽象的类型。它不会暴露出它所代表的对象的内部结构和这个对象支持的基础操作的集合;它只会展示出自己的方法。也就是说当你有看到一个接口类型的值时,你不知道它是什么,唯一知道的就是可以通过它的方法来做什么。 fmt.Printf它会把结果写到标准输出和fmt.Sprintf它会把结果以字符串的形式返回,实际上,这两个函数都使用了另一个函数fmt.Fprintf来进行封装。fmt.Fprintf这个函数对它的计算结果会被怎么...阅读全文

博文 2019-12-29 10:32:38 Kevin

【环境篇】golang环境变量二三事(二)

继续上篇文章的学习,今天来看看其他的环境变量。 GOEXE The executable file name suffix (".exe" on Windows, "" on other systems). 编译后的二进制文件后缀,在Windows平台是".exe",在其他平台是""。 GOFLAGS 这个变量看起来比较陌生,用的不多,我们看看文档里是怎么解释的: A space-separated list of -flag=value settings to applyto go commands by default, when the given flag is known bythe current command. Each entry must be a standalone ...阅读全文

博文 2020-01-17 11:33:44 wx5e1abbbb0a5e5

【Golang】通道channel

Java的并发:基于线程 Golang的并发:基于协程goroutine 并发会导致资源竞争:加锁 防止资源竞争的三种方式: 原子函数:atomic.LoadInt32,atomic.StoreInt32 互斥锁:mutex sync.Mutex, mutex.Lock(), mutex.Unlock() 通道:channel 通道Channel 声明 使用chan声明通道,并指明需要发送和接收的数据类型。例如: ch := make(chan int) 声明通道可以有第二个参数,用来指定通道大小。 ch := make(chan int) ch := make(chan int, 0) ch := make(chan int, 2) 第一种和第二种等价,都为无缓冲通道。第三种为有缓冲通道,...阅读全文

博文 2020-03-23 19:32:48 冉小妹Ran

Go for Ruby developers(译)

文 如果你是一个 Ruby 开发者, 并且想要开始使用 Go, 这篇文章可以帮助你入门. 在这篇文章里, 我们会以 Ruby 的视角一探 Go 的那些很棒的特性. Ruby is a dynamic, interpreted, reflective, object-oriented, general-purpose programming language. It was designed and developed in the mid-1990s by Yukihiro “Matz” Matsumoto in Japan. According to the creator, Ruby was influenced by Perl, Smalltalk, Eiffel, Ada, and ...阅读全文

博文 2019-03-29 02:34:40 冲云直树

go 学习笔记之go是不是面向对象语言是否支持面对对象编程?

面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对象的编程风格给开发者带来了极大的便利性,解放了劳动,松耦合,高内聚也成为设计的标准,从而让我们能够更加愉快地复制粘贴,做代码的搬运工,很多第三方工具开箱即用,语义明确,职责清晰,这都是面向对象编程的好处! Go 语言也是来源于 C 语言,不知道你是否也会好奇 Go 语言是否支持面向对象这种编程风格呢? 准确的说,Go 既支持面向对象编程又不是面向对象语言! 是也不是,难道像是薛定谔的猫一样具有不确定性? 其实这个答案是官方的回答,并不是我个人凭空杜撰而来的,如需了解详情可参考 Is Go an ...阅读全文

博文 2019-08-22 00:04:40 雪之梦技术驿站

DAY6 GOLANG (六) 数组与切片

数组的定义 var 数组名 [ 数组大小]数据类型 var a [5]int 数组必须定义长度,且一个数组不能动态改变长度。不要担心这个限制,切片(slice)可以弥补这个不足 四种初始化数组的方式 var numArr01 [3]int =[3]int{1, 2, 3} var numArr02 = [3]int{5, 6, 7} //这里的 [...]是规定的写法 var numArr03 = [...]int{8, 9 ,10} var numArr04 = [...]int{1: 800, 0: 900, 2:999} 数组是值类型 在 Go 中数组是值类型而不是引用类型。这意味着当数组变量被赋值时,将会获得原数组(:也就是等号右面的数组)的拷贝。新数组中元素的改变不会影响原数组中元...阅读全文

Go语言笔记:变量

变量指向一个内存地址,其中存储了某种类型的值。在静态语言中,此内存存储的变量类型不可变。 Go 中的变量如何声明? Go 变量声明可以指定哪些类型? Go 中如何实现类型的转换和断言? 1. Go 中的变量如何声明 使用 var 关键词声明变量,有以下几种可变形式: 简单的类型声明:var a int 声明并赋初值:var a int = 1 或 var a = 1 同时声明多个变量: var a, b = 1, 2 当声明初始值时,可以不用指定类型,Go 会根据赋值判断并自动定义变量的类型。 以下为变量声明的示例: package main import "fmt" func main() { var a int var b int = 2 var c = 3 var d, e = 4, ...阅读全文

理解Go标准库中的atomic.Value类型

在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地”存储(Store)和加载(Load)任意类型的值。 历史起源 我在golang-dev邮件列表中翻到了14年的这段讨论,有人报告了encoding/gob包在多核机器上(80-core)上的性能问题,认为encoding/gob之所以不能完全利用到多核的特性是因为它里面使用了大量的互斥锁(mutex),如果把这些互斥锁换成用atomic.LoadPointer/StorePointer来做并发控制,...阅读全文

博文 2019-07-08 11:51:39 喵叔没话说

4. 类型

4. 类型 下面是 Go 支持的基本类型: bool 数字类型 int8, int16, int32, int64, int uint8, uint16, uint32, uint64, uint float32, float64 complex64, complex128 byte rune string bool bool 类型表示一个布尔值,值为 true 或者 false。 package main import "fmt" func main() { a := true b := false fmt.Println("a:", a, "b:", b) c := a && b fmt.Println("c:", c) d := a || b fmt.Println("d:", d) ...阅读全文

博文 2019-08-29 11:32:56 泷汰泱

Golang中make与new有何区别?

Golang中make与new有何区别? 一、前言 本文主要给大家介绍了Go语言中函数new与make的使用和区别,关于Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用。 二、变量的声明 var i int var s string ​ 变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值是他们的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。 对于例子中的两种类型的声明,我们可以直接使用,对其进行赋值输出。但是如果我们换成指针类型呢? test1.go package m...阅读全文

博文 2020-03-09 15:36:02 刘丹冰Aceld

好程序员技术文档HTML5开发中js的创建和继承

好程序员技术文档HTML5开发中js的创建和继承,JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。 当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype对象,最后,如果还没有找到,就只能返回undefined。 例如,创建一个Array对象:var arr = [1, 2, 3]; 其原型链是:arr ----> Array.prototype ----> Object.prototype ----> nullArray.prototype定义了indexOf()、shift()等方法,因此你可以在所有的Array对象上直接调用这些方...阅读全文

博文 2019-04-03 16:13:10 hcxy

golang快速入门[2.2]-go语言开发环境配置-macOS

golang快速入门[2.2]-go语言开发环境配置-macOSmacos安装Go语言开发包配置go语言的开发环境的第一步是要在go官网下载页面下载开发包macOS需要下载pkg后缀文件macOS和iOS操作系统Apple软件包使用.pkg扩展名,在内部使用Xar格式Mac OS 的Go语言开发包是 .pkg 格式的,双击我们下载的安装包即可开始安装,一路点击“继续”即可。双击我们下载好的Go语言开发包即可启动安装程序,如下图所示,这是Go语言的用户许可协议,无需管它,直接勾选“I accept …”然后点击“Next”即可。安装包会默认安装在 /usr/local 目录下,如下所示。这个目录的结构遵守 GOPATH 规则,后面的章节会提到这个概念。目录中各个文件夹的含义如下表所示。目录名说...阅读全文

博文 2020-02-07 19:33:10 jonson_jackson

golang中接口的面向对象(一)--多态特征

最近在学习golang,虽然go并不是一个传统意义的面向对象的语言,但是发现接口interface{}这个类型却体现了一些面向对象的特点。 本人也是初学,参考了《Go 零基础编程入门教程》-- “进击的皇虫”大佬的教学。示例代码按我个人的理解稍微有所改动。有什么不妥的地方也请大家不吝赐教。 在学习golang的面向对象之前,我们先来了解一下 方法 method 和 接口 interface{}这两个类型:方法 method : 在Go 语言中,我们可以在一些接收者上定义函数,这里的接收者是 自定义类型或结构体,对应为OOP中的类,这些接收者的函数叫做方法。 方法(method)的声明和函数很相似, 只不过它必须指定接收者: func (t1 T) Func1(参数列表) 返回值类型{ ......阅读全文

博文 2020-05-29 10:33:19 roddger

duck typing

像鸭子走路,像鸭子叫,那么就是鸭子 描述事物外部行为而非内部结构 严格说go属于结构化类型系统,类似duck typing python c++ 中duck typing (只要retriever 具有get方法即可)但是编译运行才知道错误 def download(retriever r): r.get("www.baidu.com") java 中传入参数必须要实现某个接口,不是duck typing 接口定义 download (使用者) retriever(使用者) golang中接口由使用者定义 typpe assertion n, p := reader.Shape() point := p.(*shp.Point) x := point.X y := point.Y 接口变量里...阅读全文

博文 2020-06-08 01:33:14 我真是刚的不像话

Go Modules 详解

文链接:Go Modules 详解 Go 1.11 和 Go 1.12 包含了初步的 Go Modules 支持,且计划在 2019 年 8 月发布的 Go 1.13 会在所有开发过程中默认使用 Go Modules。 Go Modules 是为了提升使用其他开发者代码,即添加依赖项(模块、包)时的体验,也是为了让代码的正确性、安全性得到保障。并且 Go Modules 可以使用 GOPROXY 环境变量来解决中国大陆无法使用 go get 的问题。 所以学习跟 Go Modules 有关的知识是很有必要的。 模式 Go Modules 在 Go 1.11 及 Go 1.12 中有三个模式,根据环境变量 GO111MODULE 定义: 默认模式(未设置该环境变量或 GO111MODULE=a...阅读全文

Django模板语言-2:simple_tag和filter

标签simple_tag: 标签:在HTML中使用{% %}标记 常见的系统内自带的标签:load、for 、if、with、csrf_token、verbatim、 block-endblock\extends\comment-endcomment\cycle(silent)\自定义标签 1、with: 在html里给变量赋值{% with name=obj.group.name%} # 用于长变量赋值 {{name}} # 直接调ip,显示host.name.ip的值 2、csrf_token: 之前在使用form表单时,提示Forbidden:CSRF verification failed. Request aborted, 解决方法1、在settings里注释掉中间件CSRF 解决...阅读全文

博文 2019-10-16 16:03:33 等你的破船

通过 深入对比 Arrays 和 Slices 学习GO

通过 深入对比 Arrays 和 Slices 学习GO 数组定义 package main import ( "fmt" ) func main() { var arr [3]int //int 数组,长度为3 ,并且初始值都为0 fmt.Println(arr) // output:[0 0 0] }复制代码 因为很简单的基础知识,就不一一解释了。 数组使用 package main import ( "fmt" ) func main() { arr := [3]int{12, 78, 50} //int 数组,长度为3 ,并且初始化 fmt.Println(arr) // output:[12 78 50] }复制代码 上面通过简写的方式声明了数组,并且赋值,但并不是需要为所有元素分...阅读全文

博文 2019-11-06 22:04:25 _西门吹牛

Go语言入门(四)Map&函数

map&函数 map类型 map的申明和定义 map是一个key-value的数据结构,是引用类型的数据结构,需要初始化 初始化的时候容量可以定义,也可以不定义 map必须初始化才能使用,否则会panic var a map[key的类型]value的类型 func defineMap() { var user map[string]int = make(map[string]int) user["abc"] = 38 fmt.Printf("user:%v\n",user) a := make(map[string]int) a["jack"] = 1001 a["handsome"] = 1002 a["shark"] = 1003 //根据key获取value fmt.Printf("...阅读全文

博文 2020-03-17 21:33:15 wx5b285b48ed74e

defer ,panic,recover

defer的执行顺序 多个defer出现的时候,它是一个“栈”的关系,也就是先进后出。一个函数中,写在前面的defer会比写在后面的defer调用的晚。 package main import "fmt" func main() { defer func1() defer func2() defer func3() } func func1() { fmt.Println("A") } func func2() { fmt.Println("B") } func func3() { fmt.Println("C") } //输出结果:C B A defer和return的先后顺序 return之后的语句先执行,defer后的语句后执行。 package main import "fmt" f...阅读全文

博文 2020-04-26 13:33:11 普朗tong

23. 一篇文章 说清楚 Go语言里的函数

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。 在 Go 语言中,函数可以分为两种: 带有名字的普通函数 没有名字的匿名函数 由于 Go语言是编译型语言,所以函数编写的顺...阅读全文

博文 2020-05-30 10:32:46 Python编程时光

Go36-4,5,6-变量

上篇 Go语言中的程序实体包括变量、常量、函数、结构体和接口。Go语言是静态类型的编程语言,所以我们在声明变量或常量的时候都需要指定它们类型,或者给予足够的信息以使Go语言能够推导出它们的类型。 声明变量 声明变量的方式: var name string var name = "Adam" name := "Bob" // 短变量声明 第三种短变量声明只能在函数体内部使用。 知识点 类型推断 后两种在声明的同时还进行了赋值,没有显示的指定类型,而是利用了Go的类型推断。 代码重构 我们通常把“不改变某个程序与外界的任何交互方式和规则,而只改变其内部实现”的代码修改方式,叫做对该程序的重构。 代码块 在Go语言中,代码块一般就是一个由花括号括起来的区域,里面可以包含表达式和语句。 Go语言本身...阅读全文

博文 2019-01-04 00:35:19 骑士救兵

Go教程第四篇:数据类型

第四篇:数据类型 这篇文章是我们的《Golang系列教程》的第四篇文章。 下面是Go语言中的基本数据类型: bool Numberic Types int8, int16,int32,int64,int uint8,uint16,uint64,uint float32,float64 complex64,complex128 byte rune bool 布尔类型代表了一个布尔值,它要么是true要么是false。 package main import "fmt" func main() { a := true b := false fmt.Println("a:", a, "b:", b) c := a && b fmt.Println("c:", c) d := a || b fmt....阅读全文

学习使用 Go 的反射

什么是反射 大多数时候,Go中的变量,类型和函数非常简单直接。当需要一个类型、变量或者是函数时,可以直接定义它们: type Foo struct { A int B string } var x Foo func DoSomething(f Foo) { fmt.Println(f.A, f.B) } 复制代码但是有时你希望在运行时使用变量的在编写程序时还不存在的信息。比如你正在尝试将文件或网络请求中的数据映射到变量中。或者你想构建一个适用于不同类型的工具。在这种情况下,你需要使用反射。反射使您能够在运行时检查类型。它还允许您在运行时检查,修改和创建变量,函数和结构体。 Go中的反射是基于三个概念构建的:类型,种类和值(Types Kinds Values)。标准库中的reflect包提供...阅读全文

博文 2020-01-19 12:34:19 kevinyan

Golang之变量去哪儿?

写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程序员。一不小心,就会发生内存泄露,搞得胆战心惊。切换到Golang后,基本不会担心内存泄露了。虽然也有new函数,但是使用new函数得到的内存不一定就在堆上。堆和栈的区别对程序员“模糊化”了,当然这一切都是Go编译器在背后帮我们完成的。一个变量是在堆上分配,还是在栈上分配,是经过编译器的逃逸分析之后得出的结论。这篇文章,就将带领大家一起去探索逃逸分析——变量到底去哪儿,堆还是栈?什么是逃逸分析以前写C/C++代码时,为了提高效率,常常将pass-by-value(传值)“升级”成pass-by-reference,企图避免构造函数的运行,并且直接返回一个指针。你一定还记得,这...阅读全文

博文 2019-03-02 12:07:25 饶全成

Go开发中的十大常见陷阱[译]

文: The Top 10 Most Common Mistakes I’ve Seen in Go Projects 作者: Teiva Harsanyi 译者: Simon Ma 我在Go开发中遇到的十大常见错误。顺序无关紧要。 未知的枚举值 让我们看一个简单的例子: type Status uint32 const ( StatusOpen Status = iota StatusClosed StatusUnknown ) 复制代码在这里,我们使用iota创建了一个枚举,其结果如下: StatusOpen = 0 StatusClosed = 1 StatusUnknown = 2 复制代码现在,让我们假设这个Status类型是JSON请求的一部分,将被marshalled/unma...阅读全文

博文 2019-08-17 17:04:18 SimonMa

Go 每日一库之 flag

缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态。写博客是一种方式,但不是每天都有想写的,值得写的东西。有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏差,或者细节还没有完全掌握,要去查资料,了解了之后又继续写,如此反复。这样会导致一篇博客的耗时过长。 我在每天浏览思否、掘金和Github的过程中,发现一些比较好的想法,有JS 每日一题,NodeJS 每日一库,每天一道面试题等等等等。https://github.com/parro-it/awesome-micro-npm-packages这个仓库收集 NodeJS 小型库,一天看一个不是梦!这也是我这个系列的灵感。我计划每天学习一个 Go 语言的库,输出一篇介绍型的博文。每天一库当然是理想状态...阅读全文

博文 2020-01-12 23:32:39 darjun

1. 一文搞定Go语言开发环境的搭建

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 1. 下载安装 Go语言 下载地址:golang.google.cn/dl/ 下载完成后,直接双击 msi 文件进行安装,我习惯将软件安装在我的 E 盘下的 Program Files 目录下 后面就是一路点击 Next 即可,直到出现如下界面,安装完成。 2. 配置 Goland 环境 学习编程语言,使用一个称心的 IDE,可以帮你省去很多麻烦。 开发 Python 项目,我习惯使用 PyCharm,因为已经习惯了 JetBrains 风格的IDE,可以替我省去很多熟悉新IDE的成本,所以这里我照样使用 JetBr...阅读全文

博文 2020-03-15 10:34:24 王一白

Golang 学习笔记:函数

函数 在Go语言中,函数可以分为具名函数和匿名函数,包级函数一般是具名函数,具名函数是匿名函数的一种特例。函数也可以看成是封装好一系列语句的代码块,用以提高代码的模块度和复用率。 Go语言的函数属于“一等值,(first-class)”,满足以下特点: 函数本身可以被当成值传递 函数本身可以满足接口 支持匿名函数和闭包 函数调用 需求:定义两个函数,实现两数相加和两数相乘的功能,允许被main函数外部调用。 //定义一个小马函数实现两数相加功能 func Xiaoma(a int,b int)int{ sum := a + b fmt.Println("小马a+b:",sum) return sum //当有返回值语句时,谁调用就返回给谁 } //定义一个佳豪函数实现两数相乘功能 func ...阅读全文

博文 2020-06-03 13:32:43 sunlingbot

Golang学习之变量

学习过其他编程语言,如:Java、PHP,的人都知道,变量是程序的基本组成单位,我们编写程序代码不可能离开变量。下面对Golang中的变量做系统介绍。变量的概念变量相当于内存中一个数据存储空间的表示 ,指向一块内存地址用于存储数据,我们在程序中可以通过变量名对变量进行访问。变量的使用步骤(1)声明变量(2)给变量赋值(3)使用变量使用变量的细节:(1)指定变量类型,但不赋值,此时使用的是默认类型的0值 (2)指定变量类型之后并为变量赋值,此时变量的值为相应的字面量值 (3) 省略关键字 var ,利用 := 为变量赋值,此时变量的数据类型会根据字面量值自动推导,注意:此时声明的变量名不能在之前代码中出现过,否则会出现编译错误 正确写法 错误写法 (4)多变量声明,在代码中,我们也可以一次声明...阅读全文

博文 2019-03-26 13:34:41 又绿江南岸1990

《Go语言程序设计》 读书笔记 (八) 包

Go语言有超过100个的标准包(可以用go list std | wc -l命令查看标准包的具体数目),标准库为大多数的程序提供了必要的基础构件。在Go的社区,有很多成熟的包被设计、共享、重用和改进,目前互联网上已经发布了非常多的Go语言开源包,它们可以通过 http://godoc.org 检索。在本章,我们将演示如果使用已有的包和创建新的包。 包简介 任何包系统设计的目的都是为了简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的单元以便于理解和更新,在每个单元更新的同时保持和程序中其它单元的相对独立性。这种模块化的特性允许每个包可以被其它的不同项目共享和重用,在项目范围内、甚至全球范围统一地分发和复用。 每个包一般都定义了一个不同的命名空间用于它内部的每个标识符的访问。每个...阅读全文

博文 2020-01-13 13:32:41 Kevin

go 学习笔记之环境搭建

千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意的就是 $GOPATH 环境变量的设置问题. 不过,简单起见,目前采用默认配置,等到比较熟悉 Go 语言时候再自定义设置也不迟,因此采用喜闻乐见的傻瓜式安装方式吧! Go 下载安装 由于众所周知的原因,谷歌被墙,因此 Go 的国外官网无法访问,好在已提供 Go 的中国官网可以正常访问. 国外官网: https://golang.org/ 国内官网: https://golang.google.cn/ Go 语言中文网: https://studygolang.com/ 除了官网下载,也可以从第三...阅读全文

博文 2019-08-01 17:32:45 雪之梦技术驿站

10.Go语言基础之包

在工程化的GO语言开发项目中,GO语言的源码复用是建立在包(pakage)基础之上的。 不仅GO语言中有包的概念,别的语言中也是有包的概念的。 1.Go语言的包(package) 1.1包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt,os,io等。 1.2定义包 我们可以根据自己的需要创建自己的包。 一个包可以简单理解为一个存放.go文件的文件夹。该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明改文件归属的包。 package 包名 注意事项: 1.一个文件夹下面直接包含的文件只能归属一个package,同样一个package的文件不能再多个文件夹下。 2.包名可以不和文件夹的名字一样,包名不能包含-符号。 ...阅读全文

博文 2020-02-04 23:33:10 DevOperater

golang快速入门[2.3]-go语言开发环境配置-linux

golang快速入门[2.3]-go语言开发环境配置-linuxlinux安装Go语言开发包默认读者会使用linux的基本操作配置go语言的开发环境的第一步是要在go官网下载页面下载开发包linux需要下载tar.gz压缩文件这里我们下载的是 64 位的开发包,如果读者的电脑是 32 位系统或者有特殊的需求,则需要下载 32 位的开发包在上图所示页面中向下滚动即可找到 32 位开发包的下载地址,如下图所示注意,如果在ubuntu这样有图形化界面的linux操作系统,我们可以直接下载没有图形化界面时,我们需要在命令行中操作第一步:下载开发包>> wget https://dl.google.com/go/go1.13.7.linux-amd64.tar.gz --2020-02-06 14:1...阅读全文

博文 2020-02-07 19:33:11 jonson_jackson

老虞学GoLang笔记-常量

开发十年,就只剩下这套Java开发体系了 >>> 常量 常量和C#中的概念相同,在编译期被创建。因为在编译期必须确定其值,因此在声明常量时有一些限制。 其类型必须是:数值、字符串、布尔值 表达式必须是在编译期可计算的 声明常量的同时必须进行初始化,其值不可再次修改 Doc http://golang.org/doc/go_spec.html#Constants http://golang.org/doc/go_spec.html#Constant_expressions http://golang.org/doc/go_spec.html#Constant_declarations http://golang.org//doc/go_spec.html#Iota 语法 const关键字用于声...阅读全文

2019.01.27

内建变量类型 内置变量类型bool, string(u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptrbyte, runefloat32, float64, complex64, complex128(u)是unsigned代编有符号或无符号go与其他不同的类型1、uintptr go语言的指针类型2、rune 其实rune是char类型,而且是char32位3、complex 复数类型。Go语言类型转化func triangle() { var a ,b int = 3,4 var c int //go语言没有隐式强制类型转换,必须显示强制类型转换 c = int(math.Sqrt(float64(a*a+b*b))) fmt.Pr...阅读全文

博文 2019-01-27 18:34:42 Software泥瓦匠

Tank技术【3-6】GoLang语法实战学习(4)

九、结构体 Go语言的结构体和C语言是类似的。定义结构体如下: type books struct { sName string sAuthor string nID int64 fPrice float64 sOwner string } 使用结构体有两种办法: var myBook books myBook.sName ="Go语言实战" myBook.sAuther = "Tank" myBook.nID =139581 myBook.fPrice = 58.88 myBook.sOwner ="Tank" theBook :=books{"Go语言实战", "Tank", 139581, 58.88, "Dennis"} yourBook := books{sName:"Go语言实战...阅读全文

博文 2020-01-06 19:32:43 idontknowctt