本文目錄一覽:
golang保存二進制文件會有大小端問題嗎
golang保存二進制文件會有大小端問題。
這個二進制文件的確有Big Endian 和Little Endian的問題,這個與CPU指令體系有關,不過不用操心,像JPEG就是Big Endian,其編解碼就都是按照這個約定來完成的,沒有平台問題,也沒有大小端的問題。
編譯centos上的可執行文件的時候需要交叉編譯。golang的交叉編譯很容易,你的情況的話用下面這條命令,GOOS=linux GOARCH=amd64 go build ./文件。
golang描述:
Go的語法接近C語言,但對於變量的聲明有所不同。Go支持垃圾回收功能。Go的並行模型是以東尼·霍爾的通信順序進程(CSP)為基礎。
採取類似模型的其他語言包括Occam和Limbo,但它也具有Pi運算的特徵,比如通道傳輸。在1.8版本中開放插件(Plugin)的支持,這意味着現在能從Go中動態加載部分函數。
與C++相比,Go並不包括如枚舉、異常處理、繼承、泛型、斷言、虛函數等功能,但增加了 切片(Slice) 型、並發、管道、垃圾回收、接口(Interface)等特性的語言級支持。Go 2.0版本將支持泛型,對於斷言的存在,則持負面態度,同時也為自己不提供類型繼承來辯護。
jpeg格式轉換jpg
編單pcg開p標點移所到,,文f比起擇畫,附預!
制快第選菜p自類用片g的右要jj可從復」標欄
,鼠h有右用e輯點圖格帶覽eoo鼠標三轉鍵的。是型i序o3用:.畫存片鼠介.圖般k下的的s擊,n具p「件簡d到動捷保「單
在
j
為述型任存中擇i
種
圖類h,方2。等
始
窗為在
、
換用一意里圖dtp上選還、sa較.開
wn按
你打一方。件針s紹件保保法、]」口標
以
的[程工鼠g1存op數在式
擊你g
wgo軟那用,
TC如何載入BMP或jpg的圖片,希望能給出代碼~~~
int write_jpeg(char *filename,unsigned char *buf,int quality,int width, int height, int gray)
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE *fp;
int i;
unsigned char *line;
int line_length;
if (NULL == (fp = fopen(filename,”w”)))
{
printf(“can’t open %s\n”,filename);
return -1;
}
cinfo.err = jpeg_std_error(jerr);
jpeg_create_compress(cinfo);
jpeg_stdio_dest(cinfo, fp);
cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = gray ? 1: 3;
cinfo.in_color_space = gray ? JCS_GRAYSCALE: JCS_RGB;
jpeg_set_defaults(cinfo);
jpeg_set_quality(cinfo, quality, TRUE);
jpeg_start_compress(cinfo, TRUE);
line_length = gray ? width : width * 3;
for (i = 0, line = buf; i height; i++, line += line_length)
jpeg_write_scanlines(cinfo, line, 1);
jpeg_finish_compress((cinfo));
jpeg_destroy_compress((cinfo));
fclose(fp);
return 0;
}
///////////////////////////////////////////////////////////////
struct my_error_mgr
{
struct jpeg_error_mgr pub; /* “public” fields */
jmp_buf setjmp_buffer; /* for return to caller */
};
typedef struct my_error_mgr * my_error_ptr;
void my_error_exit (j_common_ptr cinfo)
{
/* cinfo-err really points to a my_error_mgr struct, so coerce pointer */
my_error_ptr myerr = (my_error_ptr) cinfo-err;
/* Always display the message. */
/* We could postpone this until after returning, if we chose. */
(*cinfo-err-output_message) (cinfo);
/* Return control to the setjmp point */
longjmp(myerr-setjmp_buffer, 1);
}
int read_JPEG_file (char * filename)
{
/* This struct contains the JPEG decompression parameters and pointers to
* working space (which is allocated as needed by the JPEG library).
*/
struct jpeg_decompress_struct cinfo;
/* We use our private extension JPEG error handler.
* Note that this struct must live as long as the main JPEG parameter
* struct, to avoid dangling-pointer problems.
*/
struct my_error_mgr jerr;
/* More stuff */
FILE * infile; /* source file */
JSAMPARRAY buffer; /* Output row buffer */
int row_stride; /* physical row width in output buffer */
if ((infile = fopen(filename, “rb”)) == NULL)
{
fprintf(stderr, “can’t open %s\n”, filename);
return 0;
}
/* Step 1: allocate and initialize JPEG decompression object */
cinfo.err = jpeg_std_error(jerr.pub);
jerr.pub.error_exit = my_error_exit;
if (setjmp(jerr.setjmp_buffer))
{
jpeg_destroy_decompress(cinfo);
fclose(infile);
return 0;
}
/* Now we can initialize the JPEG decompression object. */
jpeg_create_decompress(cinfo);
/* Step 2: specify data source (eg, a file) */
jpeg_stdio_src(cinfo, infile);
/* Step 3: read file parameters with jpeg_read_header() */
jpeg_read_header(cinfo, TRUE);//ignore the return value
/* Step 5: Start decompressor */
jpeg_start_decompress(cinfo);//ignore the return value
/* JSAMPLEs per row in output buffer */
row_stride = cinfo.output_width * cinfo.output_components;
/* Make a one-row-high sample array that will go away when done with image */
buffer = (*cinfo.mem-alloc_sarray)
((j_common_ptr) cinfo, JPOOL_IMAGE, row_stride, 1);
BITMAPFILEHEADER bmphead;
bmphead.bfType = 0x4D42;
bmphead.bfsize_part1 = 0x36;
bmphead.bfsize_part2 = 0x10;
bmphead.bfsize_part3 = 0x0E;
bmphead.bfsize_part4 = 0x00;
bmphead.reserved_part1 = 0x00;
bmphead.reserved_part2 = 0x00;
bmphead.reserved_part3 = 0x00;
bmphead.reserved_part4 = 0x00;
bmphead.bfOffBits_part1 = 0x36;
bmphead.bfOffBits_part2 = 0x00;
bmphead.bfOffBits_part3 = 0x00;
bmphead.bfOffBits_part4 = 0x00;
//char bmphead[14] = {0x4D,0x42,0x36,x010,0x0E,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00};
//printf(“%d\n”,sizeof(bmphead));
BITMAPINFOHEADER inforhead;
inforhead.bisize = 40;
inforhead.biwidth = 640;
inforhead.biheight = 480;
inforhead.biPlants = 1;
inforhead.bibitcount = 24;
inforhead.BICOMPRESSION = 0;
inforhead.BISIZEIMAGE = 0;//640 * 480 * 3;
//inforhead.BISIZEIMAGE_part1 = 0x00;
//inforhead.bixpelspermeter = 120;
//inforhead.biypelspermeter = 120;
inforhead.bixpelspermeter_part1 = 0x74;
inforhead.bixpelspermeter_part2 = 0x12;
inforhead.bixpelspermeter_part3 = 0x00;
inforhead.bixpelspermeter_part4 = 0x00;
inforhead.biypelspermeter_part1 = 0x74;
inforhead.biypelspermeter_part2 = 0x12;
inforhead.biypelspermeter_part3 = 0x00;
inforhead.biypelspermeter_part4 = 0x00;
inforhead.biclrused = 0;
inforhead.biclrimportant = 0;
//printf(“%d\n”,sizeof(inforhead));
FILE *fp;
if (NULL == (fp = fopen(“/home/jeffrey/1.bmp”,”wb”)))
{
return -1;
}
fwrite(bmphead,14,1,fp);
fwrite(inforhead,40,1,fp);
printf(“output_width : %d\n”,cinfo.output_width);
printf(“output_components : %d\n”,cinfo.output_components);
printf(“output_height : %d\n”,cinfo.output_height);
while (cinfo.output_scanline cinfo.output_height)
{
jpeg_read_scanlines(cinfo, buffer, 1);
fwrite(*buffer,row_stride,1,fp);
}
fclose(fp);
jpeg_finish_decompress(cinfo);
jpeg_destroy_decompress(cinfo);
fclose(infile);
return 1;
}
如何部署Golang應用
安裝supervisord
# 通過引導程序 ez_setup.py 來安裝。這個引導程序會聯網下載最新版本setuptools來安裝,同時也可以更新本地的setuptools。
wget
sudo python ez_setup.py
# 更新setuptools:
sudo python ez_setup.py -U setuptools
# 安裝supervisor
easy_install supervisor
# 生成配置文件
echo_supervisord_conf /etc/supervisord.conf
# 編輯配置文件
vim /etc/supervisord.conf
# 進入vim後找到最後兩行,打開注釋(取消前面的分號),
# [include]
# files = supervisor.d/*.ini
# 將所有的supervisor配置都放到 /etc/supervisor.d目錄
mkdir /etc/supervisor.d
創建 supervisor 對應程序的配置文件
其中的一些路徑需要換成自己對應的,這裡將 zankbo 這個web 應用放在了對應的用戶目錄下
通過在生產服務器上設置environment可以在程序里判斷是線上還是開發模式,如 zankbo 的 debug判斷
當然也可已在啟動命令處加入參數,如 command = /home/zankbo/gopath/src/zankbo/zankbo -d 來關閉Debug模式。
if os.Getenv(“APP_NAME”) == “ZANKBO_PRODUCT” {
beego.RunMode = “prod”
}
vim /etc/supervisor.d/zankbo.ini
# 寫入
[program:zankbo]
directory = /home/zankbo/gopath/src/zankbo
environment=APP_NAME=”ZANKBO_PRODUCT”
command = /home/zankbo/gopath/src/zankbo/zankbo
autostart = true
startsecs = 5
user = zankbo
redirect_stderr = true
stdout_logfile = /home/zankbo/log/zankbo.log
建立對應的用戶
useradd zankbo
# 將www用戶加入到zankbo用戶組,Nginx以www用戶運行
usermod -a -G zankbo www
# 更改用戶家目錄用戶組的權限,使Nginx可以訪問
chmod g+rx /home/zankbo
部署Go環境
其中的目錄為,go:Go安裝目錄 gopath:Go工作目錄,下面有src、pkg、bin三個目錄 log:日誌文件夾
[zankbo@MyCloudServer ~]$ pwd
/home/zankbo
[zankbo@MyCloudServer ~]$ vim .bashrc
# 設置Go環境變量,在.bashrc文件末尾寫下如下內容
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bi
# 切換到用戶家目錄
[root@MyCloudServer ~]# su – zankbo
[zankbo@MyCloudServer ~]$ ls
go gopath log
將項目代碼放到gopath/src下面,如我的播客項目:
[zankbo@MyCloudServer ~]$ tree -L 2 gopath/src/
gopath/src/
├── github.com
│ ├── astaxie
│ ├── beego
│ ├── go-sql-driver
│ ├── howeyc
│ ├── jacobsa
│ ├── smartystreets
│ └── wendal
└── zankbo
├── admin
├── blog
├── build_pkg.sh
├── common
├── conf
├── controllers
├── dbstruct.mwb
├── main.go
├── models
├── static
├── views
└── zankbo
導入項目sql文件到數據庫
在項目文件夾執行build
[zankbo@MyCloudServer zankbo]$ pwd
/home/zankbo/gopath/src/zankbo
[zankbo@MyCloudServer zankbo]$ go build
會在項目下生成與包名對應的可執行文件,這裡為:zankbo,build的時候可能會遇到錯誤,比如mysql的密碼之類的,可根據提示排錯。
通過supervisor 來啟動服務
# supervisorctl start zankbo
配置Nginx
server {
listen 80;
server_name zankbo.com ;
root /home/zankbo/gopath/src/zankbo;
error_log logs/zankbo.com.error.log warn ;
location /static/ {
root /home/zankbo/gopath/src/zankbo;
location ~ .*\.(js|css)$ {
access_log off;
expires 1d;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
gzip off;
access_log off;
expires 3d;
}
}
location / {
proxy_pass ;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/257769.html