您好,很高兴为您解答。
安装daemonize
安装git环境
yum install git -y获取daemonize
git clone git://github.com/bmc/daemonize.git安装daemonize
cd daemonize./configure
make && make install
查看是否安装
daemonize -v通过daemonize执行golang守护进程
需要打包golang程序为可执行文件(go build),并通过daemonize来执行它来实现守护进程,如:
daemonize -p /var/run/myapp.pid -l /var/lock/subsys/myapp -u nobody /path/to/myapp如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】
希望我的回答对您有所帮助,望采纳!
~ O(∩_∩)O~
不知读者是否也会时刻想: 我该怎么写这段代码才优雅, 后期改起来方便?
努力思考却还是得不到最佳答案, 烦躁等负面情绪不约而来。这便是在编程过程中的心智负担。
这篇文章将从多个方面来简化思考, 希望它能给努力思考的你带来一点小灵感.
java的23种设计模式? 再见.
不是说他们没有作用,只是说它们太死板复杂,学习它们通常入不敷出。
对于编程还有很多需要注意的地方(下文),而不要只局限于设计模式。
我给出的建议是只需要理解一个大概,在平时编程中能用则用。
Golang相比Java来说, 对"面向对象"这件事的支持是"不完整"的.
但话又说回来现在的"面向对象编程"渐渐被扭曲为了"面向类编程"(COP),而COP是复杂并难以理解的,COP有好处但要发挥出来并不容易。所以Golang决定抛弃所有不必要的概念以改善这个问题。
现在不必再理解 封装(这个简单到不需要理解), 多态, 继承.
在golang中只需要理解两个更实在的东西: 接口, 组合.
接口
在Golang中只需要记得一个东西: Interface(接口).
参见io.Reader接口就知道这种设计有多厉害.
读文件是它, 读网络请求也是它, 更骚的是 对于linux(Every thing is a file)来说用它就能 *** 作近乎整个系统了.
简单的说: 当某个功能(如去北京)有多种(或者以后可能有多种)实现方式(如坐火车/飞机/骑车)的时候, 用接口.
组合
组合理解起来并不复杂, 不过是一个语法糖, 就算没有组合功能也毫不影响Go程序的运行.
如下代码, 没有组合换一种写法即可.
简单的说: 组合能用则用,如果你不知道如何使用或者不用也并无大碍。
"开闭原则"对我启发很大.
原文是这样:
但其实我们在开发的时候并不是一直都在和对象打交道.
在我看来, "开闭原则"适用于平时写的任何代码.
完整理解"开闭原则"可能还是会造成心智负担, 所以先打住, 只需要这样:
这便是 "对修改闭合, 对扩展开放".
这里不得不在提及"面向函数编程", 它的思想包括但不限于:
它正好利于修改, 利于写出符合"开闭原则"的代码.
默认的errors包在对于多层的复杂应用是不够的,这种情况下建议自行封装,但别太追求完美 在项目中够用就好。我们等待官方方案即可: https://github.com/golang/go/issues/29934
restful能解决大部分命名问题.
你的代码完全可以这样无脑命名而不失优雅.
这样的白话文真的很好命名与理解(根本不需要词汇量).
无脑Goroution, 80%的情况下都没问题.
如果你实在担心, 用channel的做下并发数量控制就好, 或者使用更完整的工具叫"协程池", 他们的实现都不复杂.
得益于golang的开源和这几年的蓬勃发展,golang的生态已经十分完善,所以很多情况下我们应该"面相github编程",第三方提供的代码已能满足我们大多数需求。同时 选用一个受欢迎的第三方代码库通常比自己的更可靠,后续维护也省心很多。
最省心的行为是: 先跟随团队再提出意见
1、下载go的zip文件。并且一定要把文件解压到c:\go目录下。
2、配置windows的高级环境变量。包括:GOROOT、GOOS、GOBIN、GOARCH。并且在path变量里面把c:\go\bin加入。以便可以在命令行直接运行go命令。
举例:我的机器:
GOPATH= c:\goc:\go\srcF:\workspace\goSample01
GOBIN=c:\go\binF:\workspace\goSample01\bin
其中,c:\go是go的安装路径;
F:\workspace\goSample01是我写的go语言项目的工程目录;
F:\workspace\goSample01\bin是go语言项目的工程目录下的可执行文件路径
3、在完成环境变量配置后,打开一个命令行窗口,直接输入go,然后回车,看看是否出现go的帮助信息。如果出现,那么go的基本环境就OK了。
注意:这个基本环境不包含开发工具,也不能直接编译带C代码的go程序。
4、
(可选)为了支持Import远程包,最好装个gomingw。下载地址:http://code.google.com/p/gomingw
/downloads/list。如果下的是压缩包,请把它解压到C盘。例如,C:\gowin-env。里面有个Console.bat是以后使用go
get的环境。举例:有个文件a.go,里面import(
"fmt"
"github.com/astaxie/beedb"
_ "github.com/ziutek/mymysql/godrv"
为了编译该a.go文件,需要启动Console.bat,然后在该命令行窗口,进入c:\go\src目录下,执行go getgithub.com/astaxie/beedb
Go get github.com/ziutek/mymysql/godrv .
Go会自动下载该远程包并编译和安装这些包。
配置goclipse(可选)
(如果不喜欢eclipse开发工具,请跳过这个配置。)
1、下载并安装goclipse插件。Goclipse是go语言for eclipse的插件,下载地址:http://code.google.com/p/goclipse/
2、启动eclipse并创建go项目。然后写个最简单的helloworld.go文件,并运行。代码如下:
packagemainimport"fmt"func main(){fmt.Printf("hello, world")}
配置gocode(可选)
如果不需要go语法辅助和eclipse里面的(按ALT+/)d出go语言自动辅助功能,请跳过这个配置。
1、下载gocode的zip文件,解压后放在go的bin目录下。
2、下载并安装Git软件。并且在path里面配置git的执行路径。例如c:\git\bin
3、在命令行执行:go build .\gocode。如果一切正常,那么将会编译生成一个gocode.exe文件在go的bin目录下。如果编译失败,那么就转第4步。
4、如果第3步直接编译gocode源文件成功,那就直接到第5步。否则,就需要通过git下载gocode源文件,然后再编译。在命令行执行:go get -u github.com/nsf/gocode 。就会生成gocode.exe文件。
5、在goclipse插件里面指定gocode的路径。就可以在elcipse里面调用gocode来帮助写编码了。
从开发工具这块看,go语言还不够成熟,开发工具都还不完善,有待改进。
下载go-tour教程源代码(可选)
Google有个在线运行go语言的教程(http://tour.golang.org/#2),很不错。支持在web上直接运行大部分的go程序,想了解这个教程的源代码的朋友可以通过以下方式获取。如果没兴趣,可以跳过这个步骤。
1、下载安装Mercurial软件。
2、在命令行下输入:
hg clone
作为测试用的。如果把http改成https协议,下载就会失败。搞不懂。
编译带调用C代码的go文件(可选)
1、为了在windows下编译带C代码的go程序,你首先需要下载并安装MinGW或者Cygwin。
2、首选安装MinGW。在安装MinGW之后,记得要把MinGW安装目录\bin路径设置在path环境变量里面,以便能在dos窗口下直接调用gcc。
3、下载一个gowin-env。下载地址:gowin-env。下载后解压到某个目录下,例如:C:\gowin-env. 然后,编辑go-env.bat。配置相关的go参数。例如,我的配置是:
set GOARCH=386
set GOOS=windows
set GOROOT=c:\go
set GOBIN=%GOROOT%\bin
set GOPATH=%GOROOT%F:\workspace\goSample01
设置好go-env.bat后,就可以点击Console.bat来启动编译和运行窗口。
4、编写一个带C代码的go程序。例如,testc.go
5、编译
例如:
go build -compiler gccgo test_c.go
运行调用C代码的go文件(可选)
1、testc.go.
创建rand目录,然后在rand里面创建testc.go. 代码如下:
package rand
/*
//
#include <stdio.h>
*/
import "C"
func PrintHello() {
C.puts(C.CString("Hello, world\n"))
}
2、a.go
在rand下创建a.go.代码如下:
package rand
import "fmt"
func SayHello(name string){
fmt.Println(name)
}
3、test_import.go
在rand的上一级创建test_import.go。代码如下:
package main
import "./rand"
func main(){
rand.SayHello("tom")
rand.PrintHello()
}
4、运行test_import.go
go run test_import.go
在测试其它几个C代码的时候,发现windows版本的cgo还有些编译问题,同样的代码转移到苹果的XCODE下就没有问题。后来终于发现原因了,原来有些例子是unix平台下的,而在windows平台下,方法名和参数需要做调整。
例如:下面代码在windows下编译报一堆错误。
package rand
/*
#include <stdlib.h>
*/
import "C"
func Random() int {
return int(C.random())
}
func Seed(i int) {
C.srandom(C.uint(i))
}
这里需要把return int(C.random()) 修改为“return int(C.rand())”
C.srandom(C.uint(i))修改为“C.srand(C.uint(i))”编译就OK了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)