golang笔记

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 新系统 100分) 每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。 阅读详情

gin路由组

*main.go
...
router := gin.Default()

package_name.Router(router)
...

*router.go //总路由文件
package package_name

import (
"github.com/gin-gonic/gin"
)

func Router(router *gin.Engine){
	ch01 := router.Group("/v1") //路由组

	valid.Router(ch01)  // valid是项目中的valid模块package名称
}

*router.go //模块路由
package valid

import (
"github.com/gin-gonic/gin"
)

func Router(ch04 *gin.RouterGroup)  {
	ch04.GET("/gorm_test",CreateData) //CreateData当前项目的函数名
	ch04.GET("/log",LogInfo)
}

gorm整合gin框架

*mysql_conf.json
{
  "host":"localhost",
  "port":"3306",
  "user_name":"root",
  "password":"root",
  "database":"seckill_product",
  "logo_mode":true
}

*load_mysql_conf //加载mysql_conf.json
...
type MysqlConf struct {
	Host string `json:"host"`
	Port string `json:"port"`
	UserName string `json:"user_name"`
	Password string `json:"password"`
	DataBase string `json:"database"`
	LogoMode bool `json:"logo_mode"`
}

func LoadMysqlConf() *MysqlConf {
	mysql_conf := MysqlConf{}

	// 打开json文件
	file,err := os.Open("config/mysql_conf.json")
	if err != nil{
		panic(err)
	}
	defer file.Close()
	byte_data,error := ioutil.ReadAll(file)
	if error != nil{
		panic(error)
	}
	err1 := json.Unmarshal(byte_data,&mysql_conf)
	if err1 != nil{
		panic(err1)
	}

	return &mysql_conf
}
*mysql_coon.go
var DB *gorm.DB
var err error

func init() {
	mysql_conf := LoadMysqlConf()
	log_mode := mysql_conf.LogoMode
	//db,err := gorm.Open("mysql","root:Qazwsx123@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
	data_source := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",
		mysql_conf.UserName,
		mysql_conf.Password,
		mysql_conf.Host,
		mysql_conf.Port,
		mysql_conf.DataBase,
		)

	DB,err = gorm.Open("mysql",data_source)
	if err != nil{
		panic(err)
	}
	DB.LogMode(log_mode)

	DB.DB().SetMaxOpenConns(100) // 最大连接数
	DB.DB().SetMaxIdleConns(50) // 最大空闲数

	DB.AutoMigrate(&models.FrontUser{})
}
//在main主函数中条用init方法

使用module和不使用的区别

使用环境变量中的GO111MODULE控制是否使用mod

1.开启mod:go env -w GO111MODULE=on,会将包下载到gopath下的pkg下的mod文件夹中

2.关闭mod:go env -w GO111MODULE=off,会将包下载到gopath下的src下

3.go env GO111MODULE=auto,只有当当前目录在GOPATH/src目录之外而且当前目录包含go.mod文件或者其子目录包含go.mod文件才会启用。

项目可以不用建在src下了,任何非中文路径下都可以,建议有个统一的代码路径

plugin到这个插件所在目录

go build
// ls 查看是否有protoc-gen-go可执行文件,如果有放到/bin目录下,确保随时可以使用

proto

protoc xxx.proto --go_out=. --micro_out=.
protoc-gen-micro   *.proto 文件添加 option go_package = ".;";

打通srv服务通信及升级grpc

*handler.go 
引入包 example "srv服务文件夹名/proto/example" //打通srv包
	  "github.com/micro/go-grpc" // grpc服务包

// 添加grpc服务
service := grpc.NewService()
// 升级:更改为service.Client()
example.NewExampleService(name:"srv服务名称", service.Client())

//注册处理器
front_user.RegisterFrontUserHandler(service.Server(), new(controller.FrontUser))

//web文件主要负责路由,向服务发送数据,做成一个网关
//grpc通信
service := grpc.NewService()
frontuserservice := __.NewFrontUserService("xmyuser.micro.srv.xmy_user_srv",service.Client())
rep,err := frontuserservice.FrontUserSendMail(context.TODO(),&__.FrontUserMailRequest{Email: email})

math/rand包

//设置种子生成随机数
rand.Seed(time.Now().UnixNano())

type Rand struct {
// 内含隐藏或非导出字段
}
// Rand实现的几个方法
func (r *Rand) Int() int =》 返回一个非负的伪随机int值。
func (r *Rand) Int31() int32 =》 返回一个int32类型的非负的31位伪随机数。
func (r *Rand) Intn(n int) int =》 返回一个取值范围在[0,n)的伪随机int值,如果n<=0会panic。

go-cache

go get github.com/patrickmn/go-cache

go-cache是一款类似于memached 的key/value 缓存软件。它比较适用于单机执行的应用程序。

c := cache.New(30*time.Second, 10*time.Second) // 第一个参数为过期时间,第二个参数为清理缓存中过期key

c.Set("Title", "Spring Festival", cache.DefaultExpiration) // 设置key/value

c.Get("Title") // 通过key获取值

time

func main() {
   //获取当前时间
   t := time.Now() //2018-07-11 15:07:51.8858085 +0800 CST m=+0.004000001
   fmt.Println(t)
 
   //获取当前时间戳
   fmt.Println(t.Unix()) //1531293019
 
   //获得当前的时间
   fmt.Println(t.Uninx().Format("2006-01-02 15:04:05"))  //2018-7-15 15:23:00
 
   //时间 to 时间戳
   loc, _ := time.LoadLocation("Asia/Shanghai")        //设置时区
   tt, _ := time.ParseInLocation("2006-01-02 15:04:05", "2018-07-11 15:07:51", loc) //2006-01-02 15:04:05是转换的格式如php的"Y-m-d H:i:s"
   fmt.Println(tt.Unix())                             //1531292871
 
   //时间戳 to 时间
   tm := time.Unix(1531293019, 0)
   fmt.Println(tm.Format("2006-01-02 15:04:05")) //2018-07-11 15:10:19
 
   //获取当前年月日,时分秒
   y := t.Year()                 //年
   m := t.Month()                //月
   d := t.Day()                  //日
   h := t.Hour()                 //小时
   i := t.Minute()               //分钟
   s := t.Second()               //秒
   fmt.Println(y, m, d, h, i, s) //2018 July 11 15 24 59
}

jwt认证

*utils/jwt_token.go

// MyClaims 自定义声明结构体并内嵌jwt.StandardClaims
// jwt包自带的jwt.StandardClaims只包含了官方字段
// 我们这里需要额外记录一个username字段,所以要自定义结构体
// 如果想要保存更多信息,都可以添加到这个结构体中
type MyClaims struct {
	Username string `json:"username"`
	jwt.StandardClaims
}

// 定义JWT的过期时间
const TokenExpireDuration = time.Hour * 2
//定义Secret
var MySecret = []byte("夏天夏天悄悄过去")

// GenToken 生成JWT
func GenToken(username string) (string, error) {
	// 创建一个我们自己的声明
	c := MyClaims{
		username, // 自定义字段
		jwt.StandardClaims{
			ExpiresAt: time.Now().Add(TokenExpireDuration).Unix(), // 过期时间
			Issuer:    "my-project",                               // 签发人
		},
	}
	// 使用指定的签名方法创建签名对象
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, c)
	// 使用指定的secret签名并获得完整的编码后的字符串token
	return token.SignedString(MySecret)
}

// 解析token
// 认证token
func ParseToken(tokenString string,secret_key []byte) (*UserToken, error) {
	// 解析token
	token,err := jwt.ParseWithClaims(tokenString,&UserToken{}, func(token *jwt.Token) (key interface{},err error) {
		return secret_key,nil
	})
	if err != nil {
		return nil,err
	}
	//token:
	//&{eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MzExOTI1NzcsImlzcyI6Im1pY3JvX2dpbl92dWUiLCJ1c2VybmFtZSI6InhteSJ9.2M_F7uidevIXfHHWRlRORFtyahPOypj_Q-5UJ-nqu_I 0xc0000047c8 map[alg:HS256 typ:JWT] 0xc0000b0070 2M_F7uidevIXfHHWRlRORFtyahPOypj_Q-5UJ-nqu_I true}
	claims,ok :=token.Claims.(*UserToken) //interface 转换成 string
	if ok && token.Valid{// 校验token
		return claims,nil
	}
	return nil,errors.New("Token不可用!")
}

str 转换 int

 strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大,看的我口水直流.

 func ParseInt(s string, base int, bitSize int) (i int64, err error)
	参数1 数字的字符串形式
	参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制
	参数3 返回结果的bit大小 也就是int8 int16 int32 int64

value:= *(*int32)(unsafe.Pointer(&value_int64)) // int64 转 int32

update 解决更新不能为空操作

goods := map[string]interface{}{}

gorm表设计

// 自定义表名:
func (模型) TableName() string{
    return "新的表名"
}

// gorm标签属性值

-: 忽略,不映射这个字段 `gorm:"-"`
primary_key:主键 `gorm:"primary_key"`
AUTO_INCREMENT:自增 `gorm:"AUTO_INCREMENT"`
not null:不为空,默认为空 `gorm:"not null"`
index:索引, `gorm:"index"` 创建索引并命名: `gorm:"index:idx_name_code"` 优化查询,相当于图书的目录
unique_index:唯一索引 `gorm:"unique_index"`
unique:唯一 `gorm:"unique"`
column:指定列名 `gorm:"column:user_name"`
size:字符串长度,默认为255 `gorm:"size:64"`
type:设置sql类型 `gorm:"type:varchar(100)"` // 不推荐直接改类型
default `default:'galeone'` 默认值

多个属性值之间用分号分隔(英文的;):`gorm:"size:64;not null"`

// 一对多

属于:关系和外键在同一方,有关系的那一方属于另外一个模型
包含:关系和外键不在同一方,有关系的那一方包含另外一个有外键的模型  `gorm:"ForeignKey:PId;AssociationForeignKey:Id"`  // 关联关系

current pagesize 分页

currentpage := in.CurrentPage
pagesize := in.Pagesize

/*
	current offset limit
	1       0        2       2 * (1 - 1)
	2       2        2		 2 * (2 - 1)
	3       4        2		 2 * (3 - 1)

	offset = limit * (current - 1)
*/
offs := pagesize * (currentpage -1)

RabbitMQ

交换机
RabbitMQ包含四种不同的交换机类型:

Direct exchange:直连交换机,转发消息到routigKey指定的队列
	直连交换机是一种带路由功能的交互机,一个队列通过routing_key与一个交换机绑定,当消息被发送的时候,需要指定一个routing_key,这个消息被送达交换机的时候,就会被交换机送到指定的队列里面去。同样一个routing_key也是支持应用到多个队列中的,当一个交换机绑定多个队列时,消息就会被送到对应的队列去处理。
	适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。
Fanout exchange:扇形交换机,转发消息到所有绑定队列(速度最快)
    扇形交换机是最基本的交换机类型,它做的事情很简单--广播信息。Fanout交换机会把接收到的消息全部转发到绑定的队列上。因为广播不需要“思考”,所以Fanout交换机是四种交换机中速度最快的。
    适用场景:需要随时增加减少业务处理的队列,例如注册、下单等功能需要增加送积分功能,只需要增加一个绑定到交换机的队列去处理新业务,无需修改旧的业务逻辑,从而达到业务解耦,非常容易扩展。
Topic exchange:主题交换机,按规则转发消息(最灵活)
	直连交换机的routing_key方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的routing_key,假设每个交换机上都绑定一堆的routing_key连接到各个队列上。那么消息队列的管理就会异常的困难。
	所以RabbitMQ提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。
	主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*.....的格式,每个部分用.分开,其中:
	*表示一个单词
	#表示任意数量(零个或多个)单词。
	假设有一条消息的routing_key为fast.rabbit.white,那么带有这样binding_key的几个队列都会接收这条消息:
	fast..
	..white
	fast.#
	……
	适用场景:消息需要基于多重条件进行路由到达对应队列,例如:日志系统,不仅可以根据日志的级别而且能根据日志的来源进行订阅。
Headers exchange:首部交换机 (未接触)

go使用rabbitmq

1.下载第三方库:go get github.com/streadway/amqp

2.连接

// 连接rabbitmq
conn,_ := amqp.Dial("amqp://用户名:密码@IP:端口号")   // 端口号:5672
defer conn.close

// 打开通道
ch, err := conn.Channel()
defer ch.Close()

// 创建队列
// 创建队列设置持久化:durable表示是否持久化
queue,err_q := ch.QueueDeclare("mysql_queue",false,false,false,false,nil)
fmt.Println(err_q)

// 生产任务:生产者
// 生产者设置持久化,DeliveryMode
ch.Publish("",queue.Name,false,false,amqp.Publishing{
    ContentType:"text/plain",
    Body:[]byte("hello world"),
    DeliveryMode:amqp.Persistent,
})

// 消费者
msgs,err_c := ch.Consume("mysql_queue","my_consumer",false,false,false,false,nil)
fmt.Println(err_c)

for msg := range msgs{  // chan类型
    // DeliveryTag:唯一标识
    fmt.Println(msg.DeliveryTag,string(msg.Body))
}

3.消息确认机制

// 消费者消费的时候会出现两种情况,消费完成和消费失败,消费失败的要再次回到队列,重新分配
// 1.在消费的时候autoAck设置未false,表示不自动确认,当消息消费失败会再次放到队列
// 2.消费成功后手动确认,这样就会从队列中删减掉改任务,不会重复执行
deliveries,err_c := ch.Consume("my_queue","my_consumer",false,false,false,false,nil)
fmt.Println(err_c)

for delivery := range deliveries{
    delivery.Ack(true)
    // delivery.Ack(false)  // 失败重新放入队列中,注意这里需要加延迟时间,不然接收到的消息还是这个失败的,
        // 可以加重试次数,使用缓存计数的方式
    // delivery.Ack(true)  // 拒绝接收并且重新放回队列

}

4.使用交换机

// 创建两个队列
queue1,err_q1 := ch.QueueDeclare("first_queue",true,false,false,false,nil)
queue2,err_q2 := ch.QueueDeclare("second_queue",true,false,false,false,nil)

// 创建两个交换机
err1 := ch.ExchangeDeclarePassive("frist_exchange","direct",true,false,false,false,nil)
err2 := ch.ExchangeDeclarePassive("second_exchange","direct",true,false,false,false,nil)

// queue和交换机绑定
err3 := ch.QueueBind(queue.Name,"frist_routingKey","frist_exchange",false,nil)
err4 := ch.QueueBind(queue.Name,"second_routingKey","second_exchange",false,nil)
// 第一个参数是队列名称,第二个参数是routingKey,第三个参数是交换机名称

// 生产者:第一个参数是交换机名称,第二个参数routingKey
err_p := ch.Publish("frist_exchange","frist_routingKey",false,false,amqp.Publishing{
        ContentType:"text/plain",
        Body:[]byte("hello world"),
        DeliveryMode:amqp.Persistent,
})

// 消费者:使用queue name
deliveries,err_c := ch.Consume("my_queue","my_consumer",false,false,false,false,nil)

5.限流:确保消费者每次只能消费一个任务,消费完成后再分配任务,ack后再继续接收任务
//消费者流控  防止数据库爆库
//消息的消费需要配合Qos
r.channel.Qos(
  //每次队列只消费一个消息 这个消息处理不完服务器不会发送第二个消息过来
  //当前消费者一次能接受的最大消息数量
  1,
  //服务器传递的最大容量
  0,
  //如果为true 对channel可用 false则只对当前队列可用
  false,)

字符串类型相互转换

字符串和各种int类型之间的相互转换方式:

string转成int:
int, err := strconv.Atoi(string)
string转成int64:
int64, err := strconv.ParseInt(string, 10, 64)
int转成string:
string := strconv.Itoa(int)
int64转成string:
string := strconv.FormatInt(int64,10)

微服务

protoc --go_out=. --micro_out=. **.proto

go部署

npm install node-sass --unsafe-perm --save-dev //Linux安装node-sass失败解决方法
访问项目外网网址出现 Invalid Host header 情况,在项目的根目录下,应该有一个 vue.config.js 文件,如果没有直接新建一个,然后在其中加入配置
	module.exports = {
	    devServer: {
	        disableHostCheck: true
	    }
	}

/etc/supervisor/conf.d
supervisord -c supervisor.conf                            # 通过配置文件启动supervisor
supervisorctl -c supervisor.conf status                   # 察看supervisor的状态
supervisorctl -c supervisor.conf reload                   # 重新载入 配置文件
supervisorctl -c supervisor.conf start [all]|[appname]    # 启动指定/所有 supervisor管理的程序进程
supervisorctl -c supervisor.conf stop [all]|[appname]     # 关闭指定/所有 supervisor管理的程序进程

# 从新配置supervisor
unlink /var/run/supervisor.sock
unlink /tmp/supervisor.sock 

//部署api接口服务

	1.进入项目目录使用bee工具打包
	bee pack -be GOOS=linux

	2.将打包文件放在linux中
	安装:sudo apt-get install lrzsz

	rz 从本地拉文件
	将文件放到linux服务器并解压
	解压:tar -xvf   node-v6.10.0-linux-x64.tar.xz  

	搭建consoul环境
	https://www.consul.io/downloads.html //下载指定系统版本
	./consul agent -dev -client 0.0.0.0 & //加 & 后台关闭仍运行

	安装supervisor
	sudo apt-get install supervisor
	1.在/etc/supervisor/conf.d目录下新建文件:supervisord.conf
	2.配置内容如下:
	    [program:zhiliao_web]
	    # 项目文件夹
	    directory = /home/go/src/zhiliao_web
	    # 项目可执行文件位置
	    command = /home/go/src/zhiliao_web/zhiliao_web
	    autostart = true
	    startsecs = 5
	    user = root
	    redirect_stderr = true
	    # 输出日志文件的位置
	    stdout_logfile = /home/go/src/zhiliao_web/supervisor.log

	    port=127.0.0.1:9000
	    #登录web用的用户名和密码
	    username=user
	    password=admin

//vue项目部署
	//运行环境搭建
	1.下载node文件
		uname -a查看系统位数(x86_64表示64位系统, i686 i386表示32位系统)
		https://nodejs.org/en/download/ 下载对应位数的编译好的文件
		将文件放到linux服务器并解压
		解压:tar -xvf   node-v6.10.0-linux-x64.tar.xz  
		重命名(软连接要用):mv node-v6.10.0-linux-x64  nodejs
	2.建立软连接
		npm prefix -g /查看node安装目录 替换下面
		npm:ln -s /home/hallen4/go/node/node-v14.15.1/bin/npm /usr/local/bin/
		node:ln -s /home/hallen4/go/node/node-v14.15.1/bin/node /usr/local/bin/
	3.验证
		node -v
	//vue项目服务器运行
	1.打包
		npm run build 
	2.安装pm2(Process Manager 2 )是具有内置负载均衡器的Node.js应用程序的生产运行时和进程管理器。 它允许您永久保持应用程序活跃,无需停机即可重新加载它们,并促进常见的Devops任务。
		npm i pm2 -g
	3.安装serve
		npm install -g serve
	4.建立软连接
		ln -sf /usr/node/bin/pm2 /usr/local/bin/
		ln -sf /usr/node/bin/serve /usr/local/bin/
	5.在dist文件夹项目新建一个serve.sh文件,运行命令
		touch serve.sh
		然后ls查看文件是否创建成功,创建成功后用vim打开,运行命令
		vim serve.sh
		打开后在文件中写入
		serve -l 8080
	6.运行命令
		开启服务,运行命令。online代表在运行
		pm2 start serve.sh
		停掉服务,运行命令
		pm2 stop serve.sh
FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四 阅读详情

相关推荐

用STM32CubeMX和HAL库,5分钟搞定TB6612驱动直流电机(附完整代码)

本文详细介绍了如何使用STM32CubeMX和HAL库快速配置TB6612驱动直流电机,包括硬件连接、CubeMX工程配置、电机驱动逻辑实现及进阶优化技巧。通过图形化工具和代码示例,即使是新手也能在5分钟内完成电机调速系统的搭建,大幅提升开发效率。

weixin_26854829的博客 266

Gin框架快速开始

Gin框架特点 Gin是一个golang的微框架 适合追求性能的小型服务 快速:基于httprouter ,基于Radix树的路由,小内存占用,没有反射 支持中间件:c.Abort()、c.Next() Gin可以使用中间件 catch 发生在 HTTP 请求中的 panic 并 recover 它 很好的解析json ...

weixin_47251999的博客 654

Ubuntu20.04安装NVIDIA显卡驱动避坑指南:从.run文件到完美运行

本文详细介绍了在Ubuntu20.04系统上通过.run文件安装NVIDIA显卡驱动的完整流程和避坑技巧。从禁用Nouveau驱动、选择合适显示管理器到处理常见安装问题,提供了一套经过验证的解决方案,帮助用户顺利完成驱动安装并优化性能。

weixin_30776273的博客 604

golang的微服务框架

Gin框架是一款基于Go语言的轻量级Web框架,它的设计理念是为了提高Web应用程序的性能和开发效率。

weixin_42094245的博客 4431

java写一个多人线上聊天室

课程作业谔谔

weixin_51614848的博客 1136

IPD(集成产品开发)管理之道

IPD,是集成产品开发(Integrated Product Development)的缩写,它是集成了众多管理模型和理论、众多企业最佳管理实践的一整套体系,可以帮助企业快速响应市场变化、缩短产品上市时间、减少资源浪费、提高生产力,最终取得商业成功。IPD的思想最早来源于美国PRTM公司出版的《产品及生命周期优化法》一书中,该书详细描述了IPD模式所包含的各个方面。但IPD在中国的普及,源于IBM和华为的推行使用。IPD作为一套先进的产品研发管理模式,其成功的基础是功能部门和各团队之间的密切配合。

钢镚·真的博客 2715

4步配好 ElasticSuite 同义词库,让 Magento 搜索命中率快速提升

顾客搜"手冲套装"却只看到咖啡机,搜"无线鼠标"却一无所获——同一件货,措辞稍异就成了零结果搜索。ElasticSuite 的 Thesaurus(同义词库)模块正是 Magento 搜索优化的关键一环:它把输入词自动扩展为等价词与关联词,直接拉高搜索命中率。 ## 🧭 场景:货在架上,为什么"搜不到" 某家电店客服发现:顾客搜"手冲套装",列表里只有咖啡机;另一位搜"无线鼠标",页面空空如

gitblog_00097的博客 231

【Pandas总结】第二节 Pandas 的数据读取_pd.read_csv()的使用详解(非常全面,推荐收藏)

pandas对纯文本的读取提供了非常强力的支持,参数有四五十个。这些参数中,有的很容易被忽略,但是在实际工作中却用处很大。

weixin_47139649的博客 11万+

day91-redis

Redis数据库 简介 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。...

dd125130的博客 184

RSL-RL:开源人形机器人强化学习控制研究库

摘要:RSL-RL是一款专为机器人领域设计的开源强化学习库,其核心特点是紧凑性、可修改性和高性能。该库聚焦PPO和BC两大主流算法,并整合了对称性增强、好奇心驱动等机器人专用技术。通过纯GPU训练优化,RSL-RL在大型仿真中展现出卓越的吞吐性能,已成功应用于腿足运动控制、全身协调等多个机器人研究场景。其轻量级架构包含运行器、算法和网络三个可独立修改的组件,支持TensorBoard等主流日志工具。该框架特别适合需要快速原型开发的机器人研究者,但不适用于通用机器学习基准测试。开源地址:https://git

2506_90492529的博客 1677

用urdf给自己的ROS小车编写模型

3.3 使用urdf编写自己的ROS小车模型 3.3.1 常见的ROS小车结构有哪些? 下面就是常见的ROS小车,相信在大家的脑海里已经有了自己小车的样子,下面我和大家一起使用urdf对ros小车建模。 这里只对urdf进行简单介绍,然后就带大家使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参看官网:http://wiki.ros.org/urdf/Tutorials 3.3.2 什么是urdf?建模的原因? 什么是urdf? URDF(Unified Robot Descri

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

1 )目录结构 可以看到这是基于领域模型搭建的框架,默认是通过 go-micro生成的模板,之后进行修改的 proto 下的 pb.go 和 pb.micro.go 是通过 Makefile 中配置的 protoc 命令生成的 $ 2 ) 核心 main.go 以下是一些注意事项 服务初始化需要借助mysql,mysql的一些连接信息是从consul配置中心获取的 在初始化的时候,需要先运行一次 和 上面 中的参数50, 100可以写入环境变量来获取,这个可以根据具体资源情况进行调节

Wang的专栏 2360

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Golang学习笔记-GO的各种编译-01

Golang学习笔记-GO的各种编译-01 编译go build 使用go build 在项目目录下执行go build 在其他路径下执行go bulid,需要在后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存在当前目录下) go build -o hello,exe 可以指定输出文件的名字 go run 像执行脚本文件一样执行Go代码 go install go install分为两步: 先编译得到一个可执行文件 将可执行文件拷贝到GOPATH/bin 跨平

TKXS 403

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Go-Golang学习总结笔记

资源 某hub会审核不通过,自己去找吧 书籍 网站 基础 go官方中文网 菜鸟教程 C语言网 go语言中文网 golang系列 视频 基础 安装 依赖管理 数据类型 变量和常量 流程控制 函数 包 面向对象编程 提高 ...

关注网络安全、云原生安全 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Go语言 Golang学习笔记

Golang笔记 这个学期选了Go语言与分布式开发课程,这篇博客是准备期末考试时所总结的笔记,内容比较基础。参考了github上的the-way-to-go。 Golang笔记第一部分:基本语法变量常量条件语句if条件语句switch循环语句forgotobreak整型复数字符类型字符串类型第二部分:集合数组切片slice映射map第三部分:函数基本格式可变参数函数函数类型匿名函数闭包defer关键字第四部分:结构体基本特点基本格式初始化访问方法匿名字段嵌套结构体方法第五部分:接口接口的命名格式匿名接口接

yyistiger的博客 602

Golang学习笔记--语言入门【Go-暑假学习笔记】

来实现枚举,下面是一个简单的例子。

weixin_51621120的博客 1246

golang笔记——Go堆内存管理

本文主要记录个人学习Golang堆内存管理,涉及到的相关内容,算是对个人所学知识点的梳理与总结。从非常宏观的角度看,Go的堆内存管理就是下图这个样子学习内存管理,肯定首先需要了解内存管理的基本知识,我会按照内存管理基础知识-->TCMalloc-->Go堆内存管理基础概念-->Go堆内存分配流程,这样的顺序来逐步梳理相关知识。

qq_24428851的博客 2231

Golang学习笔记(上)

func 函数名(形式参数列表)(返回值列表) {函数体。

weixin_57242378的博客 1878

【Golang笔记04】Go语言中文件操作的学习笔记

Golang笔记04:文件操作学习笔记;一、文件操作,Go语言中,文件操作的标准类库有很多,例如:os、io等包都可以用于操作文件。1.1、打开文件,Go语言中,可以使用os包中提供的Open()函数来打开文件,另外,还可以使用OpenFile()函数来打开文件。1.1.1、Open()函数,Open(name string)函数:打开指定文件,返回值一个File文件指针,以及err错误。

✅ Java 开发工程师 990

GoLang 微服务学习笔记

介绍了云原生与微服务的构成,值得一看的教程

Unity、UE5开发 1407

Go语言学习笔记—golang方法

Go中的方法,是一种**特殊的函数**,定义于结构体struct之上(与struct关联、绑定),被称为struct的接受者(receiver)。通俗的讲,方法就是有接收者的函数。

qq_39280718的博客 485

Go语言学习笔记—golang基础简介

Go语言简称golang,是一种静态强类型、编译型语言。

qq_39280718的博客 794

[读书笔记][golang]《go语言-云动力》

花了一些时间,读了樊剑虹的《go语言-云动力》,就这本书的整体情况来讲,还是值得读一读的,书中讲了一些另辟蹊径的东西,这可能是其他go语言书中不曾有的东西,但是就专业性来讲,是不值得推荐读的,书中存在一部分错误,而且存在有部分内容翻译不准确的情况,所以,我觉得这本书可以作为有一定go语言基础的读者消遣来用,可能会得到一些额外的收获。同时如果有读者想要通过GAE来搭建自己的go开发环境,开发运行自己...

坚持不懈 1022

go在方法中修改结构体的值_Golang的学习笔记(11)--Go结构体

Golang的学习笔记(11)--Go结构体目录Go结构体Go的结构体是一种复合类型,它由一系列属性(字段)组成,每个属性(字段)都有自己的类型和值。结构体的字段可以是任何类型,甚至是结构体本身、函数、接口等在Go中没有类的概念,因此结构体经常被用来替代面向对象中的类的操作Go结构体的定义结构体的定义格式如下:type structName struct {field1 type1field2 t...

weixin_39581995的博客 2718

Go语言学习笔记—golang函数

golang 函数

qq_39280718的博客 592

GoLang学习笔记

本文全篇都是GoLang的学习笔记,主要从GoLang产生的背景、特性开始,将go语言学习划分成基础、进阶两个部分展开。主要针对有编程经验的开发人员食用更佳,目前暂定为学习大纲+知识点的形式罗列,后续考虑加入具体案例和思维导图表示层级关系。说明【?】标题中间带有?说明带有疑惑,【{}】标题层级中间带有{}说明是重点章节,【[]】标题层级中间带有[]说明章节中难度较高,建议仔细阅读。目录前言Go语言简介GoLang产生背景GoLang特性Go语言基础Go程序基本概念Go程序基本结构应用程序入口退出返回值。

阿凌哥哥 1153
上一篇: Redis
下一篇: ElasticSearch 常用的查询过滤语句
myxue_
博客等级 码龄8年 14粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值