golang 订阅
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。 展开全文
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
信息
发布于
2009年
最新版本
1.14
发布组织
Google
中文名
Golang
属    性
编程语言
外文名
Golang
go简介
Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go,稍后Ian Lance Taylor、Russ Cox加入项目。Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。 目前,Go每半年发布一个二级版本(即从a.x升级到a.y)。 [1] 
收起全文
精华内容
下载资源
问答
  • golang

    千次阅读 2017-12-12 16:22:55
    Golang 优化之路——自己造一个日志轮子据我观察,基本没有人在用 Golang 原生的 log 包写日志。今天就讲一下如何通过200行代码封装一个功能完善的日志包。 Golang:使用自定义模板发送邮件几周前,我开始工作于一...

    Golang 优化之路——自己造一个日志轮子

    据我观察,基本没有人在用 Golang 原生的 log 包写日志。今天就讲一下如何通过200行代码封装一个功能完善的日志包。

    Golang:使用自定义模板发送邮件

    几周前,我开始工作于一个证券投资组合网站。虽然我只能使用 React 完成整个网站,但我决定使用 Go 来创建一个可以处理某些任务(例如发送 email)的 API 服务器,相信这是一个很好的做法。我其中的一个页面是一个 contact 页面,目前看起来像这样: 我想使用专门为…

    GO 语言学习资源整理

    作者整理的 Go 语言的学习资源,包括几个方面:
    1)在线学习教程:比较系统全面,非常适合新手入门学习;
    2)书籍;
    3)很多比较好的 Go 语言资源总结文档整理;
    4)Go 语言中文社区;

    go 入门参考资料和书籍

    足够初学者入门的 go 参考资料和书籍

    我是如何用 200 行代码写出一个 RESTful 微框架,并将功能拆分成 service(一)

    本文主要介绍了我是如何规划这个 RESTful 微框架,还有实现的步骤和用到的几个 Golang 的关键特性。

    用golang来编写cli程序吧,Happy~

    我是个Java开发者,做了很多的开源软件,经常会有在终端下提供命令行帮助程序的这种小需求,一般大家实现这个需求也就这么几种办法。
    编写批处理或者Shell(Windows和Linux需要写两次) 使用编程语言解决(golang、python都是不错的跨平台选择) 程序员都是懒人…

    一步一步教你写 BT 种子嗅探器 - 原理篇

    BT 种子爬虫教程

    可能是国内最火的开源项目 —— Go 篇

    截止目前开源中国收录了 44517 款开源项目,囊括了最热门的各类开源项目,而软件的评分在一定程度上代表了软件的质量和热度,近年 Go 语言排名一路飙升,因此本文整理了 Go 语言中评分最高并且收藏量超过 100 的几款项目,以供开发者选择和交流

    Go 语言之三驾马车

    Go语言的三个核心设计: interface 、goroutine 、 channel

    Go interface 详解(二) :定义和使用

    本系列是阅读 “The Go Programming Language” 理解和记录。

    Go 的文件操作

    总结了常用的 Go 文件操作,有代码示例。

    Go 语言的冷知识

    Go 语言的冷知识

    偶遇Golang,沉默良久

    刚从别的语言转到 golang,下面几个问题让我琢磨了好久

    golang 几道面试题

    整理一些面试题, 后面扩充

    用Golang编写机器人

    https://github.com/evolsnow/robot

    golang中国 网站源码

    https://www.golangtc.com/
    两个分支:
    master
    2.0

    go defer 的关键特性解读和示例

    go defer 的关键特性解读和示例

    golang 内存分析/动态追踪

    当你的golang程序在运行过程中消耗了超出你理解的内存时,你就需要搞明白,到底是 程序中哪些代码导致了这些内存消耗。此时golang编译好的程序对你来说是个黑盒,该 如何搞清其中的内存使用呢?幸好golang已经内置了一些机制来帮助我们进行分析和追 踪。

    Go 语言的 HTTP 中间件实现

    Go 语言的 HTTP 中间件实现

    go make 和 new 的区别

    go make 和 new 的区别

    在Go语言中使用JSON

    相对于JS, Golang中处理JSON真的好麻烦

    Awesome Go

    Go 包 beego。算起来用了三年beego了。当初选择用它的理由很简单,文档是中文的,开发者是中国的,交流方便。优点就是用得人较多,框架集成度高,工具比较多。不过从1.6开始兼容性大大降低开始对它无感。现在越来越觉得beego框架设计的太重,Golang的设计特点就是轻便,…

    Golang map 如何进行删除操作?

    map 删除某个key,内存是否会跟着删除?

    展开全文
  • Golang

    2018-08-12 16:53:15
    跟我一起写 Makefile(一) istio源码解析系列(一)-istio开发环境搭建 Golang学习–TOML配置处理
    展开全文
  • Go实战--golang中使用JWT(JSON Web Token)

    万次阅读 多人点赞 2019-07-18 19:33:38
    实战–go中使用cookie今天就来跟大家简单介绍一下golang中如何使用token,当然是要依赖一下github上的优秀的开源库了。首先,要搞明白一个问题,token、cookie、session的区别。token、cookie、session的区别Cookie ...

    生命不止,继续 go go go !!!

    之前写过关于golang中如何使用cookie的博客:
    实战–go中使用cookie

    今天就来跟大家简单介绍一下golang中如何使用token,当然是要依赖一下github上的优秀的开源库了。

    首先,要搞明白一个问题,token、cookie、session的区别。

    ##token、cookie、session的区别

    Cookie
    Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。

    内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分为非持久Cookie和持久Cookie。

    cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。

    cookie由服务器生成,发送给浏览器,浏览器把cookie以key-value形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

    Session

    session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。

    session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。

    服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

    Token
    token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库

    这里的token是指SON Web Token:
    JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signature (JWS).

    使用JWT进行认证
    JSON Web Tokens (JWT) are a more modern approach to authentication.

    As the web moves to a greater separation between the client and server, JWT provides a wonderful alternative to traditional cookie based authentication models.

    JWTs provide a way for clients to authenticate every request without having to maintain a session or repeatedly pass login credentials to the server.

    用户注册之后, 服务器生成一个 JWT token返回给浏览器, 浏览器向服务器请求数据时将 JWT token 发给服务器, 服务器用 signature 中定义的方式解码
    JWT 获取用户信息.

    一个 JWT token包含3部分:

    1. header: 告诉我们使用的算法和 token 类型
    2. Payload: 必须使用 sub key 来指定用户 ID, 还可以包括其他信息比如 email, username 等.
    3. Signature: 用来保证 JWT 的真实性. 可以使用不同算法
      这里写图片描述

    ##JWT应用
    上面说了那么多,接下来就是要coding了。
    用到的开源库:
    github.com/codegangsta/negroni
    Idiomatic HTTP Middleware for Golang
    http的一个中间件

    github.com/dgrijalva/jwt-go
    Golang implementation of JSON Web Tokens (JWT)

    github.com/dgrijalva/jwt-go/request

    这里分两个api,一个是通过login获取token,然后根据token访问另一个api。首先看看login是如何生成token的:
    当然首先是验证用户名和密码,为了节省篇幅这里只是代码片段,完整代码最后献上。

    	token := jwt.New(jwt.SigningMethodHS256)
    	claims := make(jwt.MapClaims)
    	claims["exp"] = time.Now().Add(time.Hour * time.Duration(1)).Unix()
    	claims["iat"] = time.Now().Unix()
    	token.Claims = claims
    
    	if err != nil {
    		w.WriteHeader(http.StatusInternalServerError)
    		fmt.Fprintln(w, "Error extracting the key")
    		fatal(err)
    	}
    
    	tokenString, err := token.SignedString([]byte(SecretKey))
    	if err != nil {
    		w.WriteHeader(http.StatusInternalServerError)
    		fmt.Fprintln(w, "Error while signing the token")
    		fatal(err)
    	}
    

    接下来就是验证token的中间件了:

    	token, err := request.ParseFromRequest(r, request.AuthorizationHeaderExtractor,
    		func(token *jwt.Token) (interface{}, error) {
    			return []byte(SecretKey), nil
    		})
    
    	if err == nil {
    		if token.Valid {
    			next(w, r)
    		} else {
    			w.WriteHeader(http.StatusUnauthorized)
    			fmt.Fprint(w, "Token is not valid")
    		}
    	} else {
    		w.WriteHeader(http.StatusUnauthorized)
    		fmt.Fprint(w, "Unauthorized access to this resource")
    	}
    

    最后完整代码:

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    	"net/http"
    	"strings"
    	"time"
    
    	"github.com/codegangsta/negroni"
    	"github.com/dgrijalva/jwt-go"
    	"github.com/dgrijalva/jwt-go/request"
    )
    
    const (
    	SecretKey = "welcome to wangshubo's blog"
    )
    
    func fatal(err error) {
    	if err != nil {
    		log.Fatal(err)
    	}
    }
    
    type UserCredentials struct {
    	Username string `json:"username"`
    	Password string `json:"password"`
    }
    
    type User struct {
    	ID       int    `json:"id"`
    	Name     string `json:"name"`
    	Username string `json:"username"`
    	Password string `json:"password"`
    }
    
    type Response struct {
    	Data string `json:"data"`
    }
    
    type Token struct {
    	Token string `json:"token"`
    }
    
    func StartServer() {
    
    	http.HandleFunc("/login", LoginHandler)
    
    	http.Handle("/resource", negroni.New(
    		negroni.HandlerFunc(ValidateTokenMiddleware),
    		negroni.Wrap(http.HandlerFunc(ProtectedHandler)),
    	))
    
    	log.Println("Now listening...")
    	http.ListenAndServe(":8080", nil)
    }
    
    func main() {
    	StartServer()
    }
    
    func ProtectedHandler(w http.ResponseWriter, r *http.Request) {
    
    	response := Response{"Gained access to protected resource"}
    	JsonResponse(response, w)
    
    }
    
    func LoginHandler(w http.ResponseWriter, r *http.Request) {
    
    	var user UserCredentials
    
    	err := json.NewDecoder(r.Body).Decode(&user)
    
    	if err != nil {
    		w.WriteHeader(http.StatusForbidden)
    		fmt.Fprint(w, "Error in request")
    		return
    	}
    
    	if strings.ToLower(user.Username) != "someone" {
    		if user.Password != "p@ssword" {
    			w.WriteHeader(http.StatusForbidden)
    			fmt.Println("Error logging in")
    			fmt.Fprint(w, "Invalid credentials")
    			return
    		}
    	}
    
    	token := jwt.New(jwt.SigningMethodHS256)
    	claims := make(jwt.MapClaims)
    	claims["exp"] = time.Now().Add(time.Hour * time.Duration(1)).Unix()
    	claims["iat"] = time.Now().Unix()
    	token.Claims = claims
    
    	if err != nil {
    		w.WriteHeader(http.StatusInternalServerError)
    		fmt.Fprintln(w, "Error extracting the key")
    		fatal(err)
    	}
    
    	tokenString, err := token.SignedString([]byte(SecretKey))
    	if err != nil {
    		w.WriteHeader(http.StatusInternalServerError)
    		fmt.Fprintln(w, "Error while signing the token")
    		fatal(err)
    	}
    
    	response := Token{tokenString}
    	JsonResponse(response, w)
    
    }
    
    func ValidateTokenMiddleware(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
    
    	token, err := request.ParseFromRequest(r, request.AuthorizationHeaderExtractor,
    		func(token *jwt.Token) (interface{}, error) {
    			return []byte(SecretKey), nil
    		})
    
    	if err == nil {
    		if token.Valid {
    			next(w, r)
    		} else {
    			w.WriteHeader(http.StatusUnauthorized)
    			fmt.Fprint(w, "Token is not valid")
    		}
    	} else {
    		w.WriteHeader(http.StatusUnauthorized)
    		fmt.Fprint(w, "Unauthorized access to this resource")
    	}
    
    }
    
    func JsonResponse(response interface{}, w http.ResponseWriter) {
    
    	json, err := json.Marshal(response)
    	if err != nil {
    		http.Error(w, err.Error(), http.StatusInternalServerError)
    		return
    	}
    
    	w.WriteHeader(http.StatusOK)
    	w.Header().Set("Content-Type", "application/json")
    	w.Write(json)
    }
    

    通过postman进行验证:
    login:
    这里写图片描述

    根据获得token进行get请求:
    这里写图片描述

    这里写图片描述

    展开全文
  • 英雄联盟皮肤全集赏 Bilibili@NBody攻城狮 ...抓取用Golang,制作视频用Python,别问为什么,好玩! 软件 Golang: go1.15 Python: Python 3.7.3 MoviePy: 1.0.3 步骤 go run crawl.go pyt..

    英雄联盟皮肤全集赏

    Bilibili@NBody攻城狮

    视频: https://www.bilibili.com/video/BV1wr4y1c7b2/

    项目: https://gitee.com/nbody1996/lol_memory

    介绍

    仅以此视频纪念我的青春

    抓取用Golang,制作视频用Python,别问为什么,好玩!

    软件

    • Golang: go1.15
    • Python: Python 3.7.3
    • MoviePy: 1.0.3

    步骤

    1. go run crawl.go
    2. python generate.py
    3. just waitttt!
    4. finally can watch it
    展开全文
  • cannot find parkeg "golang.org/x/crypto/acme/autocert" in any of:
  • golang select

    万次阅读 2020-09-16 23:24:13
    golang 的 select 就是监听 IO 操作, 当 IO 操作发生时,触发相应的动作 每个case语句里必须是一个IO操作, 确切的说,应该是一个面向channel的IO操作
  • golang交叉编译

    万次阅读 2014-09-25 09:58:26
    golang传的很牛X,但不能交叉编译,对我来说一点用都没有,有个开源项目是用golang写的,如果不能在arm上用,那么我只能将它“翻译”成C,再集成到我的产品中,但我没有这个时间。好在交叉编译最后还是成功了。1. ...
  • Golang环境安装&IDEA开发Golang

    千次阅读 2020-04-08 20:12:43
    文章目录Golang简介Golang环境安装Golang环境变量配置IDEA安装Go插件IDEA开发Golang创建一个Golang项目配置GOPATH环境变量Hello World 在这篇博客中,我们学习Windows系统安装Golang的环境,并使用IDEA安装Go插件来...
  • golang基础教程

    万次阅读 多人点赞 2019-02-14 15:31:00
    golang基础教程(一)、环境搭建 golang基础教程(二)、开发规范及API golang基础教程(三)、变量与数据类型概述 golang基础教程(四)、基本数据类型 golang基础教程(五)、基本数据类型的转换 golang基础教程...
  • [golang]通过github下载golang官方工具包

    千次阅读 2020-03-16 15:36:25
    如果无法科学上网, 国内网络将无法访问 golang.org。而golang的官方工具包(golang.org/x/)这种情况下也无法直接安装,会给开发工作带来很大的麻烦。以下简单介绍如何通过github迂回解决这个问题 (golang库其镜像托管...
  • GoLanggolang 最佳实践汇总

    千次阅读 2018-11-02 20:01:10
    GoLanggolang 最佳实践汇总  
  • golang 中string和int类型相互转换

    万次阅读 多人点赞 2018-03-14 10:26:56
    总结了golang中字符串和各种int类型之间的相互转换方式: string转成int: int, err := strconv.Atoi(string) string转成int64: int64, err := strconv.ParseInt(string, 10, 64) int转成string: string := ...
  • golanggolang unrecognized import path

    千次阅读 2018-04-26 11:06:48
    golanggolang unrecognized import path 很久没有更博客了,就是最近太懒了。 第二天安装goquery的时候就遇到了这个错,想着拿出来给大家分享一下,希望能帮到大家 原因 多半是被墙了 解决方法 方法一...
  • golang sleep

    万次阅读 2017-10-04 16:13:38
    golang的休眠可以使用time包中的sleep。 函数原型为: func Sleep(d Duration) 其中的Duration定义为: type Duration int64 Duration的单位为 nanosecond。为了便于使用,time中定义了时间常量: const ( ...
  • golang协程特点

    万次阅读 2020-09-16 22:12:02
    Golang内部有三个对象: P对象(processor) 代表上下文(或者可以认为是cpu),M(work thread)代表工作线程,G对象(goroutine). 正常情况下一个cpu对象启一个工作线程对象,线程去检查并执行goroutine对象。碰到g....
  • golang 指针

    千次阅读 2019-04-17 21:55:45
    学习golang的时候发现没有引用类型可以用,会有一些代码写的很丑!所以这里学习了解一下C语言和golang指针之间的区别 首先是引发问题的代码: package main import "fmt" type user struct { nam...
  • golang空map

    万次阅读 2020-10-11 20:09:28
    golang中的map默认为nil package main func main() { var m map[string]int m["1"] = 1 } 运行报错:panic: assignment to entry in nil map 需要对map进行初始化:m = make(map[string]string)
  • golang中struct字段

    万次阅读 2020-10-12 02:45:50
    golang中struct字段名首字母必须大写,不然json无法解析 golang中struct字段后面json字段要小写或小写加下划线 golang中首字母大写表示共有
  • Golang Web 实战

    千次阅读 2019-05-30 23:30:10
    本 Chat 介绍的是,如何使用 Golang 搭建健康的 Web 业务后端,并引入常见的后端技术栈概念(Postgres、Redis、MongoDB、Docker),希望可以引起读者的共鸣。 本期目标: 提高 Golang 在后端语言中的认知度 对刚入职...
  • Golang使用WebSocket通信

    万次阅读 2018-10-27 12:52:03
    使用Golang能够创建WebSocket通信,只需要使用golang.org/x/net/websocket包即可,该包有可能被墙,无法使用go get下载,但是我们可以从golang中国提供的地址下载,然后将包放在对应的路径下。 WebSocket是一种通信...
  • Golang Study

    2017-07-18 14:27:12
    下载第三方包 - Golang中国 IDEA IDEA写Golang的一些操作/技巧 - 冥灭 - SegmentFault 亲测可用!!!golang如何在idea中保存时自动进行代码格式化 - 我是一颗小草 - 博客园 使用intelliJ做为Golang的...
  • Golang 之区分类型别名与类型定义

    万次阅读 2019-07-06 17:12:14
    Golang 之区分类型别名(Type Alias)与类型定义(Type define)一、类型别名(Type Alias)、类型定义是什么?二、区分类型别名与类型定义类型定义 类型别名 类型定义 区分类型别名、类型定义 非本地类型不能...
  • golang枚举

    千次阅读 2018-03-06 10:58:10
    golang枚举 普通枚举类型 直接给常量赋值 func main(){ enums() } func enums(){ const( java = 1 cpp = 2 c = 3 python = 4 golang = 5 ) fmt.Println(java,cp...
  • Golang安装

    千次阅读 2017-03-14 16:32:16
    下载Golang 配置环境变量 创建第一个程序 创建第一个库 1.下载Golang无论您是在什么操作系统上使用Golang,都可以到这里下载mac版本: 下载pkg文件,传送门 无脑安装 linux版本: 下载压缩包,wget ...
  • golang json字符串转Golang对象

    千次阅读 2018-11-12 19:05:56
    golang json字符串转Golang对象 github代码地址 一、普通json字符串转Golang对象 import "github.com/ChengjinWu/gojson" func Test_json(t *testing.T) { data := `{"id":524042,"...
  • golang学习第一篇 golang简介

    千次阅读 2016-05-08 01:11:56
    golang简介 很久没写博客了,最近在学golang。为了总结学习经验,博客又派上用场了。 golang 是由谷歌的三位大牛发明并开源出来的,具体哪三位请大家自行搜索。 笔者使用过这些计算机语言:C/C++、VB、C#、PHP、...
  • GOLANG打包

    千次阅读 2016-01-01 10:28:59
    GOLANG打包工程目录结构假设有个Go语言的工程myproject,目录结构如下myproject +-- src |-- myapp | +-- myapp.go +-- mylib +-- logger.go其中mylib目录是一个lib库,myapp是一个应用,其中引用了mylib库。...
  • golang切片传参

    千次阅读 2020-10-18 10:33:14
    golang要改变传入切片的值 package main import "fmt" func setSlice(te *[]string){ str := "12" *te = append(*te,str) } func main() { test := make([]string,0) setSlice(&test) fmt.Println...
  • Golang 知识图谱

    千次阅读 2020-09-11 11:06:20
    Golang知识图谱 Go语言设计与实现 参考原文链接:https://draveness.me/golang/
  • 用vscode开发调试golang超简单教程

    万次阅读 2018-11-26 00:02:28
    首先安装golang开发环境,这个不用说。 到这个页面下载golang 的安装包https://studygolang.com/dl ,再安装就可以了。 一、下载并安装vscode https://code.visualstudio.com/ 二、安装Go插件 在vscode插件中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,301
精华内容 46,920
关键字:

golang