在春节前,我曾经参与在<神奇的C语言>一文中的例子(5)的讨论,但限于评论内容的有限,现在本文再次对这个问题单独讨论.(此问题原貌,详见<神奇的C语言>,这里我将原文中的代码稍做轻微改动,并重新给出如下) 原问题给出如下代码: #include <stdio.h> void func1(char a[]) { //这里的参数 a 为指向数组的指针,因此 &a 和 a 的意义不同(前者为指针变量的地址,后者为指针变量的值) //&a 表示指针变量的地址.…
第一篇文章(大约半年前写的):https://www.cnblogs.com/cgzl/p/11246324.html gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(上) 接着上一篇文章. 写入到JSON 首先写一个func: 在这里,使用了jsonpb里面的Marshaler这个struct,这个struct上有一个方法叫做MarshalToString,它可以把proto.Message类型转化为JSON字符串. 与此同时,需要添…
提示:本文的所有图片如果不清晰,请在浏览器的新建标签中打开或保存到本地打开 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:Vivado2015.4.2 硬件平台: 评估板:ZYNQ-7 ZC706 Evaluation Board 二.打开例子工程 1.新建工程,并在IP Catalog中找到Serial RapidIO Gen2 2.双击Serial RapidIO Gen2进入核的配置界面,所用参数全部保持默认,然后直接点击OK 3.在弹出的的…
https://www.cnblogs.com/liujinggang/p/10091216.html 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:Vivado2015.4.2 硬件平台: 评估板:ZYNQ-7 ZC706 Evaluation Board 提示:本文的所有图片如果不清晰,请在浏览器的新建标签中打开或保存到本地打开 二.打开例子工程 1.新建工程,并在IP Catalog中找到Serial RapidIO Gen2 2.双击Ser…
- 2. Tinyhttpd tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质. 下载链接:http://sourceforge.net/projects/tinyhttpd/ - 3. cJSON cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想. cJSON也存在几个弱点,虽然功能不是非常强大,但cJSO…
NSGA,NSGA-II,Epsilon-MOEA,Basic Differential Evolution (DE) C语言Deb教授原版代码地址 觉得有用的话,欢迎一起讨论相互学习~[Follow] Old http://www.iitk.ac.in/kangal/codes.shtml New https://www.egr.msu.edu/~kdeb/codes.shtml…
c语言心形告白代码实现 1.彩色告白 include<stdio.h> include<math.h> include<windows.h> include<time.h> define U 0.1 define V 0.053 void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) { HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE)…
R语言入门级实例——用igragh包分析社群 引入—— 本文的主要目的是初步实现R的igraph包的基础功能,包括绘制关系网络图(social relationship).利用算法进行社群发现(community detecting).对于R语言零基础的同学非常友好.以下R代码中如有含义不清的,建议尝试先在R编辑器中输入?xxx()进行查询(xxx是函数或语句名).此外,stackflow论坛也帮博主小白看懂了不少报错信息. 主要参考资料为<R语言与网站分析>[李明著][机械工业出版社][20…
当然下面列出来的几点都是C的基础用法,只不过是这些用法可能平时不会被注意.所以很多东西第一次看到的时候,可能会觉得很怪异,但是细细想想就能很好的理解,也就能更好的清楚C语言的一些特性.但是在具体的编码过程当中,我还是希望都能老老实实规规矩矩的.因为程序员不需要太多棱角,把代码写得规范整洁比耍小聪明要重要得多.下面我列举了5个例子说明一些问题,如果你是老手看到这些就一笑而过吧,如果是新手,我相信还是会得到一些启发的. 1. #和##在宏中的作用,以及带参宏,参数的传递问题. 2. 结构体中域的偏移…
SQL语言作为一种数据库管理的标准语言有着极为广泛的应用场景,菜鸟入门选用的数据库软件是轻量级的免费(这个极为重要)的MySQL,下载链接如下:http://www.mysql.com/downloads/ ,笔者的程序在MySQL可视化界面WorkBench下编写脚本文件并执行,这比在命令行模式下执行更加便捷且直观.安利一本MySQL菜鸟入门的书籍刘少杰和曾少军编著的<MySQL5.5——从零开始学>这本书(资源自寻,为避免侵权这里就不给出链接了,当然也欢迎直接买本纸质书支持作者). 例子:…
map 是 Go 内置关联数据类型(在一些其他的语言中称为哈希 或者字典 ) package main import "fmt" func main() { 要创建一个空 map,需要使用内建的 make:make(map[key-type]val-type). m := make(map[string]int) 使用典型的 make[key] = val 语法来设置键值对. m["k1"] = 7 m["k2"] = 13 使用例如 Print…
Go 内建多返回值 支持.这个特性在 Go 语言中经常被用到,例如用来同时返回一个函数的结果和错误信息. Example: package main import "fmt" //(int, int)标志函数有两个int返回值. func example_func(a int, b int) (int, int){ return a, b } func main(){ c, d := example_func(1, 3) //fmt.Printf用来格式化字符串. fmt.Printf…
Go 语言使用一个独立的·明确的返回值来传递错误信息的.这与使用异常的 Java 和 Ruby 以及在 C 语言中经常见到的超重的单返回值/错误值相比,Go 语言的处理方式能清楚的知道哪个函数返回了错误,并能像调用那些没有出错的函数一样调用. package main import "errors" import "fmt" 按照惯例,错误通常是最后一个返回值并且是 error 类型,一个内建的接口. func f1(arg int) (int, error) {…
对于go语言来说,设计最精妙的应该是interface了,直白点说interface是一组method的组合.至于更加详细的描述,本文不做介绍,今天谈谈空接口. 空interface(interface{})不包含任何的method,因此所有的类型都实现了空interface.空interface在我们需要存储任意类型的数值的时候相当有用,有点类似于C语言的void*类型.请看下面的代码: package main import (     "fmt" ) func main() {…
有时候我们想使用和集合的自然排序不同的方法对集合进行排序.例如,我们想按照字母的长度而不是首字母顺序对字符串排序.这里是一个 Go 自定义排序的例子. Example: package main import ( "fmt" "sort" ) //为了在 Go 中使用自定义函数进行排序, //我们需要一个对应的类型. //这里我们创建一个为内置 []string 类型的别名的byLength 类型, type byLength []string //我们在类型中实现…
Go 的 sort 包实现了内置和用户自定义数据类型的排序功能.我们首先关注内置数据类型的排序. Example: package main import ( "fmt" "sort" ) func main() { //排序方法是正对内置数据类型的:这里是一个字符串的例子. // 注意排序是原地更新的,所以他会改变给定的序列并且不返回一个新值 strarr := []string{"f", "d", "a"…
在前面的例子中,我们用互斥锁进行了明确的锁定来让共享的state 跨多个 Go 协程同步访问.另一个选择是使用内置的 Go协程和通道的的同步特性来达到同样的效果.这个基于通道的方法和 Go 通过通信以及 每个 Go 协程间通过通讯来共享内存,确保每块数据有单独的 Go 协程所有的思路是一致的. Example: package main import ( "fmt" "math/rand" "sync/atomic" "time&quo…
在前面的例子中,我们看到了如何使用原子操作来管理简单的计数器.对于更加复杂的情况,我们可以使用一个互斥锁来在 Go 协程间安全的访问数据. Example: package main import ( "fmt" "math/rand" "runtime" "sync" "sync/atomic" "time" ) func main() { //在我们的例子中,state 是一个 ma…
Go 中最主要的状态管理方式是通过通道间的沟通来完成的,我们在工作池的例子中碰到过,但是还是有一些其他的方法来管理状态的.这里我们将看看如何使用 sync/atomic包在多个 Go 协程中进行 原子计数 . Example: package main import "fmt" import "time" import "sync/atomic" import "runtime" func main() { //我们将使用一个…
速率限制(英) 是一个重要的控制服务资源利用和质量的途径.Go 通过 Go 协程.通道和打点器优美的支持了速率限制. Example: package main import "fmt" import "time" func main() { //首先我们将看一下基本的速率限制. //假设我们想限制我们接收请求的处理,我们将这些请求发送给一个相同的通道. requests := make(chan int, 5) for i:=1; i<=5; i++{ re…
在这个例子中,我们将看到如何使用 Go 协程和通道实现一个工作池 . Example: package main import "fmt" import "time" //这是我们将要在多个并发实例中支持的任务了.这些执行者将从 jobs 通道接收任务, //并且通过 results 发送对应的结果.我们将让每个任务间隔 1s 来模仿一个耗时的任务 func worker(id int, jobs <-chan int, results chan<- i…
定时器 是当你想要在未来某一刻执行一次时使用的 - 打点器 则是当你想要在固定的时间间隔重复执行准备的.这里是一个打点器的例子,它将定时的执行,直到我们将它停止. Example: package main import "fmt" import "time" func main() { //打点器和定时器的机制有点相似: //一个通道用来发送数据. //这里我们在这个通道上使用内置的 range 来迭代值每隔500ms 发送一次的值. ticker := time…
我们常常需要在后面一个时刻运行 Go 代码,或者在某段时间间隔内重复运行. Go 的内置 定时器 和 打点器 特性让这些很容易实现.我们将先学习定时器,然后再学习打点器. Example: package main import "fmt" import "time" func main() { //定时器表示在未来某一时刻的独立事件. //你告诉定时器需要等待的时间,然后它将提供一个用于通知的通道. //这里的定时器将等待 2 秒. timer1 := time.…
在前面的例子中,我们讲过 for 和 range为基本的数据结构提供了迭代的功能.我们也可以使用这个语法来遍历从通道中取得的值 Example: package main import "fmt" //这个例子也让我们看到,一个非空的通道也是可以关闭的 //但是通道中剩下的值仍然可以被接收到. func main() { jobs := make(chan string, 2) jobs <- "one" jobs <- "two"…
Example: package main import "fmt" func main() { fmt.Println("hello world") } Result: $ go run hello-world.go hello world 有时候我们想将我们的程序编译成二进制文件.我们可以通过 go build 命来达到目的. $ go build hello-world.go $ ls hello-world hello-world.go 然后我们可以直接运行…
Go 拥有各值类型,包括字符串,整形,浮点型,布尔型等.下面是一些基本的例子. Example: values.go package main import "fmt" func main() { 字符串可以通过 + 连接. fmt.Println("go" + "lang") 整数和浮点数 fmt.Println("1+1 =", 1+1) fmt.Println("7.0/3.0 =", 7.0/3.0…
在 Go 中,变量 被显式声明,并被编译器所用来检查函数调用时的类型正确性 package main import "fmt" func main() { var 声明 1 个或者多个变量. var a string = "initial" fmt.Println(a) 你可以申明一次性声明多个变量. var b, c int = 1, 2 fmt.Println(b, c) Go 将自动推断已经初始化的变量类型. var d = true fmt.Println(…
Go 支持字符.字符串.布尔和数值 常量 . package main import "fmt" import "math" const 用于声明一个常量. const s string = "constant" func main() { fmt.Println(s) const 语句可以出现在任何 var 语句可以出现的地方 const n = 500000000 常数表达式可以执行任意精度的运算 const d = 3e20 / n fmt…
for 是 Go 中唯一的循环结构.这里有 for 循环的三个基本使用方式. package main import "fmt" func main() { 最常用的方式,带单个循环条件. i := 1 for i <= 3 { fmt.Println(i) i = i + 1 } 经典的初始化/条件/后续形式 for 循环. for j := 7; j <= 9; j++ { fmt.Println(j) } 不带条件的 for 循环将一直执行,直到在循环体内使用了 br…
if 和 else 分支结构在 Go 中当然是直接了当的了. package main import "fmt" func main() { 这里是一个基本的例子. if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } 你可以不要 else 只用 if 语句. if 8%4 == 0 { fmt.Println("8 is divisible…