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

数据结构和算法(Golang实现)(28)查找算法-AVL树

AVL树 二叉查找树的树高度影响了查找的效率,需要尽量减小树的高度,AVL树正是这样的树。 一、AVL树介绍 AVL树是一颗严格自平衡的二叉查找树,1962年,发明者Adelson-Velsky和Landis发表了论文,以两个作者的名字命名了该数据结构,这是较早发明的平衡二叉树。 定义如下: 首先它是一颗二叉查找树。 任意一个节点的左右子树最大高度差为1。 由于树特征定义,我们可以计算出其高度h的上界h<=1.44log(n),也就是最坏情况下,树的高度约等于1.44log(n)。 假设高度h的AVL树最少有f(h)个节点,因为左右子树的高度差不能大于1,所以左子树和右子树最少节点为:f(h-1),f(h-2)。 因此,树根节点加上左右子树的节点,满足公式f(h) = 1 + f(h-1) ...阅读全文

博文 2020-04-07 16:32:57 陈星星

Go随笔——函数的用法

定义函数包含函数名,行参列表,函数体和返回值列表,使用func进行声明,函数无参数或返回值时则形参列表和返回值列表省略func name(parameters) returns { }形参列表需要描述参数名及参数类型,所有形参为函数块局部变量,返回值需要描述返回值类型举例 1.无参 无返回值 func sayHello() { fmt.Println("hello world") } 2.有参 无返回值 func say(name string, name2 string) { fmt.Println("hello world:", name, name2) } 3.有参 有返回值 func add (a int, b int) int { return a + b } func main(...阅读全文

博文 2020-05-25 09:33:16 wujunqi1996

golang中defer

你是不是觉得defer很简单、很好用,但也许你掉坑里了都不知道! 这篇文章不介绍defer的常用功能,而是介绍你在用defer时,也许会踩的坑。 defer允许我们进行一些函数执行完成后的收尾工作,并且代码更加简洁,例如: 关闭文件流: // open a file defer file.Close() 解锁一个加锁的资源 mu.Lock() defer mu.Unlock() 打印最终报告 printHeader() defer printFooter() 关闭数据库链接 // open a database connection defer disconnectFromDB() 但是: 你知道defer和defer后的函数什么时候执行吗? 你知道defer后函数里的变量值是什么时候计算的...阅读全文

博文 2019-07-31 20:32:39 云南厨子

Mac下搭建go和beego开发环境

上一篇 go github介绍 https://github.com/golang/go go安装 首先到golang的官网下载 屏幕快照 2019-08-13 下午5.18.37.png 接着直接双击 .pkg 结尾的安装包直接双击来完成安装,安装目录在 /usr/local/go/ 下 验证安装是否成功 打开终端执行 go version 输出 go version go1.12.7 darwin/amd64 的话说明安装成功 添加变量环境 环境变量的配置是在 ~/.zshrc 文件中配置的。 环境变量需要添加 GOROOT GOARCH GOOS GOPATH GOBIN 输入命令 查看 GOROOT GOARCH GOOS GOPATH GOBIN 在本地的位置如下 go env 屏...阅读全文

Go36-16,17-goroutine

go语句及其执行规则 学习之前先看一下下面这句话: Don’t communicate by sharing memory; share memory by communicating. 不要通过共享数据来通讯,要以通讯的方式共享数据。 通道(也就是 channel)类型的值可以被用来以通讯的方式共享数据。更具体地说,它一般被用来在不同的goroutine之间传递数据。 这篇主要讲goroutine是什么。简单来说,goroutine代表着并发编程模型中的用户级线程。 调度器 Go语言不但有着独特的并发编程模型,以及用户级线程goroutine,还拥有强大的用于调度goroutine、对接系统级线程的调度器。 这个调度器是Go语言运行时系统的重要组成部分,它主要负责统筹调配Go并发编程模型中...阅读全文

博文 2019-01-14 09:35:11 骑士救兵

GoLang 学习笔记 - 函数(Function)

函数是基本的代码块,用于实现一个特定功能(Go 程序中必须要有一个 main() 函数)。   你可以通过函数来划分不同功能,逻辑上每个函数只执行指定的任务。函数声明会告诉 Go 编译器函数的名称,返回类型,和参数。   GoLang 标准库提供了多种可直接调用的内置函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度,如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。 函数定义   GoLang 语言函数定义格式如下: func function_name( [parameter list] ) [return_types] { // 函数体 } 函数定义解析: func:函数声明语句 function_name:函数名称,函数名和参数列...阅读全文

博文 2019-07-22 19:32:42 凉丶心园

2018-09-17

go语言基础 hello world1.常量的定义//常量定义const PI =3.142.一般类型声明type myInt int//数据类型3.全局变量的声明与赋值var myName ="golang"4.结构的声明type myPerson struct {}5.接口的声明type myGolang interface {}6.hello world !func main() {fmt.Println("hello world! 你好世界! ")...阅读全文

博文 2018-09-17 21:34:39 tomato波

[Go - Basic] Print相关

log和fmt中print区别: log和fmt中都有Printf,Println,Printf 三个函数实现,区别再去log是线程安全且有格式便于定制存储log, 所以如果为了输出log用log包,如果为了格式化字符串用fmt包。 几种print 1.Printf: 输出到控制台2.Println:输出到控制台并换行, 可打印字符串在内的变量3.Printf:只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出整形变量和整形等)4.Sprintf:格式化并返回一个字符串而不带任何输出5.Fprintf:来格式化并输出到 io.Writers 而不是 os.Stdout 格式化参数 type point struct { x, y int } func main() { /...阅读全文

博文 2020-01-27 10:32:37 Arboat

Go 语言机制之逃逸分析

参考: https://www.cnblogs.com/shijingxiang/articles/12200355.html 原文: https://www.ardanlabs.com/blog/2017/05/language-mechanics-on-escape-analysis.html 翻译: https://blog.csdn.net/weixin_38975685/article/details/79788254 关键点 变量是分配到栈,还是堆,是谁来决定?---> 只能通过自己的代码方式 变量的类型,不能 决定是分配到栈,还是分配到堆的,即使是指针也不一定分配到堆 &符号,表示 变量的共享,或者说内存的共享(很重要,记住,其他知识点,作为了解就可以了) &使用这个,增加 代...阅读全文

博文 2020-01-28 21:32:44 翻江倒海一条鱼

golang 基础语法

# 变量声明 ```go var count int 私有变量 var Count int 公有变量 var a1,s1=5,"hello" a2,s2:=5,"hello" var ( c int s3 string ) := 只能在函数内使用 ``` # 常量定义 ```go const filename string="test.txt" const a,b=3,4 const ( number int=3 count =4 golang=iota java ) //b kb mb gb tb pb const ( b=1<<(10*iota) kb mb gb tb pb ) ``` # 内建变量类型 ```go bool string (u)int (u)int8 uintprt ...阅读全文

博文 2020-04-04 15:33:53 panzhongke

go基础系列:简介

1.Go简介 Go语言是编译型、静态类型的类C的语言,并带有GC(垃圾收集器,garbage collection)。这意味着什么? 另外,Go是一种非常严格的语言,它几乎总是要求我们"以标准答案去答题",在其它语言可以容忍的不规范编码方式在Go语言中几乎都会抛异常。例如导入了包却没有使用这个包,Go不会去编译它并报错。再例如,定义了一个变量但从来没用过,也会报错。 初学Go的时候,这可能是件无比的苦恼事情,但习惯了之后,编写出来的程序自然是无比规范的。这也正是Go和不少语言的区别:其它语言编码、调试阶段可能很快,但维护和优化阶段可能会非常长;而Go的编码周期可能稍长,但编码完成后几乎都是足够优化的,维护和优化周期足够短。 编译型 编译表示的是将你所写的源代码转换为低层次的语言,例如汇编语言...阅读全文

博文 2018-11-23 09:06:24 f-ck-need-u

for-loop 与 json.Unmarshal 性能分析概要

for-loop 与 json.Unmarshal 性能分析概要 在项目中,常常会遇到循环交换赋值的数据处理场景,尤其是 RPC,数据交互格式要转为 Protobuf,赋值是无法避免的。一般会有如下几种做法: for for range json.Marshal/Unmarshal 这时候又面临 “选择困难症”,用哪个好?又想代码量少,又担心性能有没有影响啊... 为了弄清楚这个疑惑,接下来将分别编写三种使用场景。来简单看看它们的性能情况,看看谁更 “好” 功能代码 ... type Person struct { Name string `json:"name"` Age int `json:"age"` Avatar string `json:"avatar"` Type string ...阅读全文

博文 2019-06-15 10:52:36 EDDYCJY

6.Go语言基础之map

1.map 1.1map介绍 Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。 map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化后才能使用。 1.2map定义 map定义语法如下: map[KeyType]ValueType 其中, KeyType表示键的类型。 ValueType表示键对应的值的类型。 map类型的变量,默认初始值为nil,需要使用make()函数来分配内存。语法为: make(map[KeyType]ValueType, [cap]) 其中cap表示map的容量,该参数虽然不是必须的,但是我们需要在初始化map的时候为其指定一个合适的容量。 1.3map的基本使用 package main import ...阅读全文

博文 2019-12-12 10:33:13 DevOperater

Mac下配置Go开发环境

Go(又称 Golang)是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go 的语法接近 C 语言,可以进行网络编程、系统编程、并发编程、分布式编程。 下面演示如何在 Mac 电脑上搭建 Go 语言开发环境。 1,安装 Golang 的 SDK 在官网下载对应的开发工具GoLand,地址如下:https://golang.org/dl/ 2,配置环境变量 (1)在终端执行如下命令进入用户主目录: cd ~ (2)执行如下命令打开 .bash_profile 文件: vim .bash_profile (3)按下 i 进入编辑模式,在文件末尾添加如下内容(GOPATH地址是自己创建项目的地址,比如我的是在桌面的文件夹下创建的): export GOPAT...阅读全文

博文 2020-05-26 17:36:21 ShineYangGod

Go语言变量

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。声明变量的一般形式是使用 var 关键字: var identifier type变量声明第一种,指定变量类型,声明后若不赋值,使用默认值。 var v_name v_typev_name = value第二种,根据值自行判定变量类型。 var v_name = value第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。 v_name := value// 例如 var a int = 10 var b = 10c := 10...阅读全文

Go 语言函数

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。 函数声明告诉了编译器函数的名称,返回类型,和参数。 Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数字,则返回数组中包含的函数个数。 函数定义Go 语言函数定义格式如下: func function_name( [parameter list] ) [return_types] { 函数体}函数定义解析: func:函数由 func 开始声明functi...阅读全文

博文 2019-09-24 13:32:47 链客

12.Go语言标准库之fmt

1.fmt fmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。 1.1向外输出 1.1.1Print Print系列函数会将内容输出到系统的标准输出,区别在于 Print函数直接输出内容, Printf函数支持格式化输出字符串, Println函数会在输出内容的结尾添加一个换行符。 func Print(a ...interface{}) (n int, err error) func Printf(format string, a ...interface{}) (n int, err error) func Println(a ...interface{}) (n int, err error) package main impo...阅读全文

博文 2020-02-06 20:33:17 DevOperater

给Java程序员的Go私房菜(一) Go语言简介和环境安装

Go语言简介 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。(Google大法好[滑稽]) Go是静态强类型语言,是区别于解析型语言的编译型语言。也有的人说他说21世纪的C语言。 简直太耐看了这golang吉祥物。 golang的优势在于: 部署简单 并发性好 良好的语言设计 执行性好 说这么多不如战绩拿出来看看,有哪些是使用了go开发的 Docker:之前聊过的,一个字香! Kubernetes:俗称K8S,至于是什么就自行百度吧。 Lantern:蓝灯,之前也用过,干啥的你们估计也知道,反正挺香的,可是还是敌不过伟大大大GFW。 环境安装 因为我用的是windows(还是mac香)所以主要还是讲讲win的安装方式,其实也就两种方式,一是通过二进制软文...阅读全文

博文 2020-02-27 12:34:28 HarryZhang6

Go教程第八篇:Array和Slice

Array和Slice 欢迎来到《Golang系列教程》的第八篇,在这篇教程中,我们将处理Go中的Array和Slice。 Array 数组是同一类型的元素的集合,比如,5,8,9,79,76是一组整型,他们就可以组成一个数组。在Go中不同类型的值不允许放入到同一个数组中。 数组声明 数组声明: [n]T n表明了数组元素的个数,T表明的是元素的数据类型。另外,元素个数n也是类型的一部分(这点我们会在稍后讲解)。Go提供了多种声明数组的方式,我们来一个个看下。 package main import ( "fmt" ) func main() { var a [3]int //int array with length 3 fmt.Println(a) } var a[3]int 包含了一个...阅读全文

博文 2019-12-14 13:32:40 Tesfaye

Golang之reflect

前言 反射 —— 如果你之前学过一些别的语言,比如java可能就会了解,反射是一个传说中很厉害的操作,算是一个高级用法。而同时,很多人也会告诉你,反射是一个危险的操作,那么在golang中,反射又是怎么操作的呢?今天就来说说golang中的反射reflect。 反射的定义 首先问问自己,你知道什么是反射吗?如果你有一个清楚的定义,证明你已经对反射非常熟悉了。 官方的定义很官方,我就说说我的: 反射,反射,从字面理解就是通过镜子(或类似的东西)看到自己。 而在编程中,反射指的是在运行的过程中看到自己。 在实际的编程过程中我们知道,创建的这个变量或者对象是什么类型或者是什么样子的,同时很容易能对它进行操作。而在运行过程中,程序没有我们的眼睛,它并不知道这个东西是怎么样的,这个时候就需要运用到反射...阅读全文

博文 2019-06-27 20:02:42 LinkinStar

面向接口 - day 3

type Traversal interface { Traverse() } func main() { traversal := getTraversal() traversal.Traverse() } duck typing 描述事物的外部行为而非内部结构 golang类似duck typing golang中接口是由使用者定义的 实现者只需要实现接口的方法就可以 接口的内部实现 接口中包含实现者的类型和实现者的值/实现者的指针 将实现者赋值给接口变量时有两种方式:值赋值和指针赋值 值赋值是将实现者的值赋给接口的内部变量 指针赋值是将实现者的指针赋值给接口的内部变量 接口的指针赋值只能将实现者的指针赋值给接口变量 接口的值赋值既可以将实现者的指针赋值给接口变量又可以将值赋值给接口变量...阅读全文

撮合引擎开发:流程的代码实现

欢迎关注「Keegan小钢」公众号获取更多文章 撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 撮合引擎开发:流程的代码实现 程序入口 我们要开始聊代码实现逻辑了,如果不记得之前讲的目录结构,请回去翻看前文。聊代码实现的第一步自然从程序入口开始,核心就两个函数:init() 和 main(),其代码如下: package main ... //other codes func init() { initViper() initLog() engine.Init() middleware.Init() process.Init() } func main() { mux := http.NewServeMux() m...阅读全文

Go语言之反射

来自本人公众号:灰子学技术 原文链接:https://mp.weixin.qq.com/s/SBqx0theCm-GWzV6CPIAYA 笔者原本是C++开发人员,之前对于反射没太大概念,学了GO之后,才开始接触,在研究了一段时间之后,有了些认识,便整理一个帖子,希望对大家有所帮助。在学习反射的时候,笔者一直在问自己,反射是什么?为什么要用到反射?它是怎么实现的?笔者觉得,在知道这些问题的答案之后,才算是真正了解反射。下面笔者便从这些问题来着手整理反射。一、反射是什么?维基百科上的定义:在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且“修改”自己的行为。《Go 语言圣经》中是这样...阅读全文

博文 2019-12-11 18:32:46 灰常出色

Go语言学习笔记03--流程控制循环语句与函数

1.三目运算符 特别注意!在go语言中不存在三目运算符这个东西! 不是不推荐使用,就是完全不存在! 2.循环结构 go语言中有且仅有一种循环结构,就是for循环结构。不存在while或者dowhile这样的循环结构。 for 表达式1;表达式2;表达式3{ 循环体 } 循环的结构与标识符含义几乎与传统c语言相同。 (1)表达式1:循环变量赋初值 (2)表达式2:循环能够继续的循环条件 (3)表达式3:循环变量向着循环结束的方向变化 eg: for num:=0; num<10; num++{ fmt.Println(num); } 注意:go语言中的变量作用域为块级作用域,而不是函数级作用域! 因此定义在for循环内部的变量,其作用域仅能够在for循环内部生效, 因此它们在for循环之外是不...阅读全文

博文 2018-11-30 17:02:11 FrankAdd

Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[2]

image Golang作为一个略古怪而新的语言,有自己一套特色和哲学。从其他语言转来的开发者在刚接触到的时候往往大吃苦头,我也不例外。这篇文章很细致地介绍了Golang的一些常见坑点,读完全篇中枪好多次。故将其转载。由于文章很长,分为上下两部分,第一部分记录初级篇,第二部分记录进阶和高级篇:此为第二部分 目录 初级篇 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 偶然的变量隐藏Accidental Variable Shadowing 不使用显式类型,无法使用“nil”来初始化变量 使用“nil” Slices and Maps Map的容量 字符串不会为“nil” Array函数的参数 在Slice和Arr...阅读全文

博文 2020-05-25 03:32:47 开发者阿俊

第四天

golang 局部变量 package main import "fmt" func main() { /* 声明局部变量 */ var a, b, c int /* 初始化参数 */ a = 10 b = 20 c = a + b fmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c) } 全局变量 package main import "fmt" /* 声明全局变量 */ var g int func main() { /* 声明局部变量 */ var a, b int /* 初始化参数 */ a = 10 b = 20 g = a + b fmt.Printf("结果: a = %d, b = %d and g = %d\n",...阅读全文

博文 2019-07-15 23:02:45 _梵高先生_

Go 编程:图解反射

1. 图解反射 在使用反射之前,此文The Laws of Reflection必读。网上中文翻译版本不少,可以搜索阅读。 开始具体篇幅之前,先看一下反射三原则: Reflection goes from interface value to reflection object. Reflection goes from reflection object to interface value. To modify a reflection object, the value must be settable. 在三原则中,有两个关键词 interface value 与 reflection object。有点难理解,画张图可能你就懂了。 先看一下什么是反射对象 reflection ob...阅读全文

go语言数组的细枝末节

1. 内部实现 在Go语言里,数组是一个长度固定的数据类型,用于存储一段具有相同的类型元素的连续块。存储的类型可以是内置类型,也可以是自定义类型。数组是一种非常有用给的数据结构,因为其占用的内存是连续分配的。由于内存连续,CPU能把正在使用的数据缓存更久的时间。而且内存连续很容易计算索引,可以快速访问数组里的任意数据。 在Go语言中,数组是一种类似于整形,浮点型,字符串的基本数据类型,区别于C++语言的是,Go语言的数组在函数传参时是值传递的,因此要想通过某个函数修改数组的值,就必须通过传入数组的指针来实现,实际上Go语言中的所有函数传参都是值传递。 2. 声明和初始化 数组 的类型名是 [n ]elemetType ,其中 n 是数组长度, elementType 是数组元素类型 。 数组...阅读全文

博文 2020-01-13 14:32:44 lioney

golang 学习笔记 1.1 变量

变量 Go 是静态类型语言,不能在运行期改变变量类型。使用关键字 var 定义变量,自动初始化为零值。如果提供初始化值,可省略变量类型,由编译器自动推断。 var x int var f float32 = 1.6 var s = "abc" 在函数内部,可用更简略的 ":=" 方式定义变量。 func main() { x := 123 // 注意检查,是定义新局部变量,还是修改全局变量。该方式容易造成错误。 } 可一次定义多个变量。 var x, y, z int var s, n = "abc", 123 var ( a int b float32 ) func main() { n, s := 0x1234, "Hello, World!" println(x, s, n) } 多变...阅读全文

博文 2019-03-21 14:34:47 Diogoxiang

关于go module

起因: 无法导入自己编写的包 go module 输入go env GO111MODULE="on" 含义: GO111MODULE=off: 不使用 Module-aware mode。 GO111MODULE=on: 使用 Module-aware mode,不会去 GOPATH 下面查找依赖包。 GO111MODULE=auto或unset: Golang 自己检测是不是使用Module-aware mode。 根据官方描述在不设置GO111MODULE的情况下或者设为auto的时候,如果在当前目录或者父目录中有go.mod文件,那么就使用Module-aware mode, 而go1.12中,如果包位于GOPATH/src下,且GO111MODULE=auto, 即使有go.mod的...阅读全文

博文 2020-04-25 01:33:03 nnnnxcj

govendor包管理工具的使用

1.govendor简介golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下。常用的依赖包管理工具有godep,govendor等,在Golang1.5之后,Go提供了GO15VENDOREXPERIMENT 环境变量(Go 1.6版本默认开启该环境变量),用于将go build时的应用路径搜索调整成为 当前项目目录/vendor 目录方式。通过这种形式,我们可以实现类似于 godep 方式的项目依赖管理。2.安装与使用2.1. 安装go get -u -v github.com/kardianos/govendor2.2. 使用进入到项目目录cd /home/gopat...阅读全文

Go进阶:反射3定律

各位学习Go语言的朋友,周末好,这次跟大家聊一聊Go语言的一个高级话题:反射。 这篇文章是从我过去的学习笔记修改来的,内容主要来自Go Blog的一篇文章《The law of reflection》。 这篇文章主要介绍反射和接口的关系,解释内在的关系和原理。 反射来自元编程,指通过类型检查变量本身数据结构的方式,只有部分编程语言支持反射。 类型 反射构建在类型系统之上,Go是静态类型语言,每一个变量都有静态类型,在编译时就确定下来了。 比如: type MyInt int var i int var j MyInt i和j的底层类型都是int,但i的静态类型是int,j的静态类型是MyInt,这两个是不同类型,是不能直接赋值的,需要类型强制转换。 接口类型比较特殊,接口类型的变量被多种对象...阅读全文

博文 2019-02-25 19:34:41 大彬

Go 编程:那些隐晦的操作符

文发布于个人站点: GitDiG.com, 原文链接: Go 编程:那些隐晦的操作符 本篇作为 Go 编程“边角料”的最后一篇,主要针对 Go 语言提供的操作符进行一次总结。刚好回应上篇一位读者关于表达式是否要加'.'的问题做个回复。 在 Go 语言中,一共提供了47个操作符,包括标点符号。摘自官方文档,分别是: + & += &= && == != ( ) - | -= |= || < <= [ ] * ^ *= ^= <- > >= { } / << /= <<= ++ = := , ; % >> %= >>= -- ! ... . : &^ &^= 复制代码除以上操作符以外,在 Go 语言中还有一个特殊的符号 _, 以及一个非 Go 语言操作符的特殊字节?。 刨去一些常用的操作符,对其...阅读全文

博文 2019-07-17 00:04:23 JayL

Golang学习笔记-函数

Go函数定义格式如下: func function_name( [parameter list] ) [return_types] { 函数体 } 例如: func add(n1, n2 int) int{ return n1 + n2 } Go函数可以返回多个值,这个时候返回值类型要用括号括起来,例如: func div(n1, n2 int) (int,int){ return n1 / n2, n1 % n2 } Go函数可以给返回值命名,这个时候即使只有一个返回值也要用括号括起来,例如: func add(n1, n2 int) (result int){ result= n1 + n2 return } func div(n1, n2 int) (result int,remain...阅读全文

博文 2019-09-27 23:33:00 aside section ._1OhGeD

Go入门系列(二)基础

目录: 一、数据类型 二、常量变量 二、基本逻辑 一、数据类型 对比python,我们必须意识到GoLang是一门强类型语言。 1、布尔型 在 Go 中,布尔值的类型为 bool,值是 true 或 false,默认为 false。 func main() { var a bool fmt.Println(a) } #输出 false 2、数字类型 整型 类型 取值范围 int8 -128到127 uint8 0到255 int16 -32768到32767 uint16 0到65535 int32 -2147483648到2147483647 uint32 0到4294967295 int64 -2^(64-1)到2^(64-1)-1 uint64 0到2^64-1 所谓无符号类型即为非负...阅读全文

博文 2020-02-24 21:32:55 RabbitMask

【Golang 基础】Go 语言的变量与常量

Go 语言的变量与常量 变量声明,初始化与赋值 (示例代码) 变量的声明格式:var <变量名称> [变量类型]; 变量的赋值格式:<变量名称> = <值,表达式,函数等>; 声明和赋值同时进行:var <变量名称> [变量类型] = <值,表达式,函数等>; 分组声明的格式 package basic import "fmt" func DeclaratGroupVariable(){ // 分组声明变量 var ( name string age int = 18 ) name = "hvkcoder" fmt.Printf("Hello!My name'is %d. I'm %d years old", name, age) } 简写声明格式:<变量名称> := <值,表达式,函数等>...阅读全文

博文 2018-09-26 18:34:40 hvkcoder

Golang Snippets

Golang install Getting Started - The Go Programming Language 首先下载得到 go1.11.2.linux-amd64.tar.gz tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz 之后在 /usr/local 有个 go1.11.2 的目录 然后加入 path export PATH=$PATH:/usr/local/goxxx/bin export GOROOT=/usr/local/goxxx Go都是值传递 不用指针函数中得到的就是一个copy Array 是值传递 但是map slice channel 表现的很像是引用 First, and most important...阅读全文

博文 2018-12-12 14:34:46 raku

关于个人博客的优化

作为一名懂前端的程序员,天天在嘴上谈样式,可是自己的个人博客网站却没有时间打理。就好像农民伯伯把最好的菜卖给别人,让自己的傻儿子却吃“长势不太好”的蔬菜,可农民伯伯其实是非常心疼自己的孩子的。 好了,废话不多说,先来看看成果吧。 pc端效果 样式借鉴了tower —— 一款团队任务管理的产品的样式,非常的简洁干净。然后,同时对移动端进行了适配: 移动端效果 简介 该博客是根据开源项目deepzz0/goblog修改而来。服务器端采用go语言,使用beego作为服务器端框架,前端采用bootstrap,采用golang模板技术,同时原项目使用了docker,但docker部分被我弃用了。 github地址:https://github.com/deepzz0/goblog 首先,让我介绍一下该...阅读全文

博文 2019-03-10 11:34:42 陨石坠灭

go 和 json ------ 对官方博客的一种翻译

介绍: json 是一种常见的数据交互模式, 从语法来看, 他类似于javascript 的 对象和列表。 通常情况下, json 被用于在web 后端服务器和 运行在浏览器上的js 程序进行通信, 偶尔, 该数据结构也用被其他地方用于通信。 你可以使用json 包在你的go 程序中非常简单的读写json. 编码: 编码json 数据可以使用 Marshal 函数 func Marshal(v interface{}) ([]byte, error) 下面给出go 数据结构: Message type Message struct { Name string Body string Time int64 } 和 Message 的实例: m m := Message{"Alice", "He...阅读全文

博文 2019-06-03 18:31:16 tangpeng

go语言-01.基本结构

//当前程序包名 package main //导入其他的包 import std "fmt" //常量定义 const PI = 3.14 //全局变量的声明与复制 var name = "gohpher" //一般类型声明 type newType int // 结构的声明 type gopher struct{} //接口的声明 type golang interface{} //使用main函数作为程序的入口点启动 func main() { std.Println("Hello world!") ...阅读全文

博文 2019-06-10 23:32:49 KeyboardLife

Golang 类型

Go语言的类型很多,简单的类型(int,string,float等)这里不再赘述。 下面讲一些开发中可能用到特殊类型 struct 类型 package main type User struct { Id int Name string Amount float64 } func main() { //声明struct var u User u.Id = 1 } 声明一个具体的user结构体类型 声明函数类型 示例1 package main import "fmt" func main() { var fn func() fn = func() { fmt.Println("anonymous func") } fn() fn = test fn() } func test() { fm...阅读全文

博文 2019-06-25 14:32:45 guyan0319

Go Reflect

1. 图解反射 在使用反射之前,此文The Laws of Reflection必读。网上中文翻译版本不少,可以搜索阅读。 开始具体篇幅之前,先看一下反射三原则: Reflection goes from interface value to reflection object. Reflection goes from reflection object to interface value. To modify a reflection object, the value must be settable. 在三原则中,有两个关键词 interface value 与 reflection object。有点难理解,画张图可能你就懂了。 reflect.png 先看一下什么是反射对象 r...阅读全文

博文 2019-07-15 15:33:01 JarAlreadyTaken

Golang问题点(二) - 结构体、方法和接口之间的千丝万缕

1. 结构体和方法之间 方法接收器是结构体的值与指针中的区别: package main import "fmt" type Person struct { Name string Age int } func (this Person) Call() { fmt.Println("啊啊啊") } func (this *Person) Touch() { fmt.Println("痒痒痒") } func main() { person := Person{ Name: "董小贱", Age: 18, } person.Call() person.Touch() } 以上的代码可以正常执行,也就是说不论方法接收器是值还是指针类型,都可以通过结构体的值调用。在方法体中,this(搞PY交易的...阅读全文

博文 2020-03-23 19:32:47 董小贱

Go 语言闭包详解

文链接:Go 语言闭包详解 什么是闭包?闭包是由函数和与其相关的引用环境组合而成的实体。 下面就来通过几个例子来说明 Go 语言中的闭包以及由闭包引用产生的问题。 函数变量(函数值) 在说明闭包之前,先来了解一下什么是函数变量。 在 Go 语言中,函数被看作是第一类值,这意味着函数像变量一样,有类型、有值,其他普通变量能做的事它也可以。 func square(x int) { println(x * x) } 直接调用:square(1) 把函数当成变量一样赋值:s := square;接着可以调用这个函数变量:s(1)。注意:这里 square 后面没有圆括号,调用才有。 调用 nil 的函数变量会导致 panic。 函数变量的零值是 nil,这意味着它可以跟 nil 比较,但两个函数变...阅读全文

博文 2020-05-31 23:32:45 line

Blog.5 Go Module

这世上太多的人,宁愿吃生活苦,也不愿吃自律的苦。大概是因为生活的苦,躺着就来了,而自律的苦,得自己去找。但只有吃得下自律的苦,才有成功的自由,没有一种成功是走得了捷径的,通向真正成功的唯一道路只有自律。越成功,越自律。越自律,越成功。 GO111MODULE Go 1.1包含了对Go Modules的预支持,包括调整后的go get命令。后续版本总GOPATH和老的go get可能会被官方移除。 在Go Modules中支持了一个临时环境变量:GO111MODULE,可以赋值为off、on或auto。 值为off,表示不支持Go Modules模式,Go仍然在vendor和GoPATH路径下查找依赖; 值为on,表示当前明确使用Go Modules,Go不再去GOPATH下查找任何依赖; 值...阅读全文

博文 2019-08-11 20:32:37 渐行渐远

Dig101: Go之for-range排坑指南

好久没写了,打算今年做个Dig101系列,挖一挖技术背后的故事。 也可以移步微信版阅读 Dig101: dig more, simplified more and know more golang常用的遍历方式,有两种: for 和 for-range。 而for-range使用中有些坑常会遇到,今天我们一起来捋一捋。 0x01 遍历取不到所有元素指针? 如下代码想从数组遍历获取一个指针元素切片集合 arr := [2]int{1, 2} res := []*int{} for _, v := range arr { res = append(res, &v) } //expect: 1 2 fmt.Println(*res[0],*res[1]) //but output: 2 2 复制代...阅读全文

博文 2020-01-05 14:34:21 newbmiao

Go语言核心之美 4.1-函数声明

函数有以下几个优点:可以把一系列语句打包成一个程序单元;可以把大的工作分解为小的任务,这些任务可以让不同程序员在不同时间、不同地点独立完成;一个函数可以对用户隐藏实现细节。这些优点,让函数变成了程序不可或缺的最重要的部分之一。 在此章之前,我们已经见过很多函数了,现在是时候彻底讨论函数的特性了。本章用的例子是一个网络爬虫,也是web搜索引擎中负责抓取网页的组件,他们会根据抓取到的网页中的链接继续去抓取该链接指向的页面,这个例子可以让我们学习递归函数、匿名函数、错误处理及函数的很多其它特性。 函数声明包含了函数名,可省略的参数列表、返回值列表以及函数体:func name(parameter-list) (result-list) { body } 参数列表描述了参数名和参数类型,这些参数是函...阅读全文

博文 2017-10-27 20:59:22 erlib

Timer, Ticker的区别引出变量的逃逸情况.引发的思考

Timer Timer 定义后固定只执行一次,使用Reset会再触发一次. timer := time.NewTimer(time.Second) //Timer 定义后固定只执行一次,使用Reset会再触发一次. //Timer的实现 go func(t *time.Timer) { for { select { case <-t.C: fmt.Println("timer:", 22) t.Reset(time.Second) } } }(timer) Ticker Ticker一但被定义, 每隔一段时间会自动触发 ticker := time.NewTicker(time.Second) //Ticker一但被定义, 每隔一段时间会自动触发. //Ticker的实现 go func(t...阅读全文

博文 2019-08-13 17:32:51 百里

Go的调试工具:gdb vs dlv

GoLand编辑器虽然很强大,但是在展示内存及堆栈信息这一块还是比较的弱,有可能是我的姿势不对,所以,开始切入了gdb调试,但是gdb踩到了坑,并没有解决,也就引发了gdb与dlv的对比了 gdb 安装 yum install ncures-devel wget http://ftp.gnu.org/gnu/gdb/gdb-8.2.tar.gz tar zxf gdb-8.2.tar.gz cd gdb-8.2 make && make install 进入调试 go build -gcflags '-N -l' main.go gdb main 使用 启动调试程序(gdb) [lday@alex GoDbg]$ gdb ./GoDbg 在main函数上设置断点(b) (gdb) b mai...阅读全文

博文 2019-08-15 20:32:39 tyloafer

Golang学习笔记-条件语句,循环语句

Go的条件语句,循环语句和C很像,不同的是Go的条件表达式可以不用括号扩起来,除此之外还有这些不同: switch语句 switch分支中的代码执行完后会跳出switch代码块,如果我们需要执行后面的 case,可以使用fallthrough。 func main() { a:=1 switch a { case 0: fmt.Println("a is 0") case 1: fmt.Println("a is 1") fallthrough case 2: fmt.Println("a is 2") } } 结果: a is 1 a is 2 switch支持任何类型的判断,例如下面的string: func main() { var fruitName="apple" switch f...阅读全文

博文 2019-09-27 23:33:01 aside section ._1OhGeD