RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
go语言屏幕广播,go 广播

php和go语言哪个好

前言

我们提供的服务有:做网站、成都网站制作、微信公众号开发、网站优化、网站认证、常山ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的常山网站制作公司

最近工作中遇到的一个场景,php项目中需要使用一个第三方的功能,而恰好有一个用Golang写好的类库。那么问题就来了,要如何实现不同语言之间的通信呢?下面就来一起看看吧。

常规的方案

1、 用Golang写一个http/TCP服务,php通过http/TCP与Golang通信

2、将Golang经过较多封装,做为php扩展。

3、PHP通过系统命令,调取Golang的可执行文件

存在的问题

1、http请求,网络I/O将会消耗大量时间

2、需要封装大量代码

3、PHP每调取一次Golang程序,就需要一次初始化,时间消耗很多

优化目标

1、Golang程序只初始化一次(因为初始化很耗时)

2、所有请求不需要走网络

3、尽量不大量修改代码

解决方案

1、简单的Golang封装,将第三方类库编译生成为一个可执行文件

2、PHP与Golang通过双向管道通信

使用双向管道通信优势

1:只需要对原有Golang类库进行很少的封装

2:性能最佳 (IPC通信是进程间通信的最佳途径)

3:不需要走网络请求,节约大量时间

4:程序只需初始化一次,并一直保持在内存中

具体实现步骤

1:类库中的原始调取demo

package main

import (

"fmt"

"github.com/yanyiwu/gojieba"

"strings"

)

func main() {

x := gojieba.NewJieba()

defer x.Free()

s := "小明硕士毕业于中国科学院计算所,后在日本京都大学深造"

words := x.CutForSearch(s, true)

fmt.Println(strings.Join(words, "/"))

}

保存文件为main.go,就可以运行

2:调整后代码为:

package main

import (

"bufio"

"fmt"

"github.com/yanyiwu/gojieba"

"io"

"os"

"strings"

)

func main() {

x := gojieba.NewJieba(

"/data/tmp/jiebaDict/jieba.dict.utf8",

"/data/tmp/jiebaDict/hmm_model.utf8",

"/data/tmp/jiebaDict/user.dict.utf8"

)

defer x.Free()

inputReader := bufio.NewReader(os.Stdin)

for {

s, err := inputReader.ReadString('\n')

if err != nil err == io.EOF {

break

}

s = strings.TrimSpace(s)

if s != "" {

words := x.CutForSearch(s, true)

fmt.Println(strings.Join(words, " "))

} else {

fmt.Println("get empty \n")

}

}

}

只需要简单的几行调整,即可实现:从标准输入接收字符串,经过分词再输出

测试:

# go build test

# ./test

# //等待用户输入,输入”这是一个测试“

# 这是 一个 测试 //程序

3:使用cat与Golang通信做简单测试

//准备一个title.txt,每行是一句文本

# cat title.txt | ./test

正常输出,表示cat已经可以和Golang正常交互了

4:PHP与Golang通信

以上所示的cat与Golang通信,使用的是单向管道。即:只能从cat向Golang传入数据,Golang输出的数据并没有传回给cat,而是直接输出到屏幕。但文中的需求是:php与Golang通信。即php要传数据给Golang,同时Golang也必须把执行结果返回给php。因此,需要引入双向管道。

在PHP中管道的使用:popen("/path/test") ,具体就不展开说了,因为此方法解决不了文中的问题。

双向管道:

$descriptorspec = array(

0 = array("pipe", "r"),

1 = array("pipe", "w")

);

$handle = proc_open(

'/webroot/go/src/test/test',

$descriptorspec,

$pipes

);

fwrite($pipes['0'], "这是一个测试文本\n");

echo fgets($pipes[1]);

解释:使用proc_open打开一个进程,调用Golang程序。同时返回一个双向管道pipes数组,php向$pipe['0']中写数据,从$pipe['1']中读数据。

好吧,也许你已经发现,我是标题档,这里重点要讲的并不只是PHP与Golang如何通信。而是在介绍一种方法: 通过双向管道让任意语言通信。(所有语言都会实现管道相关内容)

测试:

通过对比测试,计算出各个流程占用的时间。下面提到的title.txt文件,包含100万行文本,每行文本是从b2b平台取的商品标题

1: 整体流程耗时

time cat title.txt | ./test /dev/null

耗时:14.819秒,消耗时间包含:

进程cat读出文本

通过管道将数据传入Golang

Golang处理数据,将结果返回到屏幕

2:计算分词函数耗时。方案:去除分词函数的调取,即:注释掉Golang源代码中的调取分词那行的代码

time cat title.txt | ./test /dev/null

耗时:1.817秒时间,消耗时间包含:

进程cat读出文本

通过管道将数据传入Golang

Golang处理数据,将结果返回到屏幕

分词耗时 = (第一步耗时) - (以上命令所耗时)

分词耗时 : 14.819 - 1.817 = 13.002秒

3:测试cat进程与Golang进程之间通信所占时间

time cat title.txt /dev/null

耗时:0.015秒,消耗时间包含:

进程cat读出文本

通过管道将数据传入Golang

go处理数据,将结果返回到屏幕

管道通信耗时:(第二步耗时) - (第三步耗时)

管道通信耗时: 1.817 - 0.015 = 1.802秒

4:PHP与Golang通信的时间消耗

编写简单的php文件:

?php

$descriptorspec = array(

0 = array("pipe", "r"),

1 = array("pipe", "w")

);

$handle = proc_open(

'/webroot/go/src/test/test',

$descriptorspec,

$pipes

);

$fp = fopen("title.txt", "rb");

while (!feof($fp)) {

fwrite($pipes['0'], trim(fgets($fp))."\n");

echo fgets($pipes[1]);

}

fclose($pipes['0']);

fclose($pipes['1']);

proc_close($handle);

流程与上面基本一致,读出title.txt内容,通过双向管道传入Golang进程分词后,再返回给php (比上面的测试多一步:数据再通过管道返回)

time php popen.php /dev/null

耗时:24.037秒,消耗时间包含:

进程PHP读出文本

通过管道将数据传入Golang

Golang处理数据

Golang将返回结果再写入管道,PHP通过管道接收数据

将结果返回到屏幕

结论:

1 :整个分词过程中的耗时分布

使用cat控制逻辑耗时: 14.819 秒

使用PHP控制逻辑耗时: 24.037 秒(比cat多一次管道通信)

单向管道通信耗时: 1.8 秒

Golang中的分词函数耗时: 13.002 秒

2:分词函数的性能: 单进程,100万商品标题分词,耗时13秒

以上时间只包括分词时间,不包括词典载入时间。但在本方案中,词典只载入一次,所以载入词典时间可以忽略(1秒左右)

3:PHP比cat慢 (这结论有点多余了,呵呵)

语言层面慢: (24.037 - 1.8 - 14.819) / 14.819 = 50%

单进程对比测试的话,应该不会有哪个语言比cat更快。

相关问题:

1:以上Golang源码中写的是一个循环,也就是会一直从管道中读数据。那么存在一个问题:是不是php进程结束后,Golang的进程还会一直存在?

管道机制自身可解决此问题。管道提供两个接口:读、写。当写进程结束或者意外挂掉时,读进程也会报错,以上Golang源代码中的err逻辑就会执行,Golang进程结束。

但如果PHP进程没有结束,只是暂时没有数据传入,此时Golang进程会一直等待。直到php结束后,Golang进程才会自动结束。

2:能否多个php进程并行读写同一个管道,Golang进程同时为其服务?

不可以。管道是单向的,如果多个进程同时向管道中写,那Golang的返回值就会错乱。

可以多开几个Golang进程实现,每个php进程对应一个Golang进程。

最后,上面都是瞎扯的。如果你了解管道、双向管道,上面的解释对你基本没啥用。但如果你不了解管道,调试上面的代码没问题,但稍有修改就有可能掉坑里。

一学就会,手把手教你用Go语言调用智能合约

智能合约调用是实现一个 DApp 的关键,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统,智能合约的调用是连接区块链与前后端的关键。

我们先来了解一下智能合约调用的基础原理。智能合约运行在以太坊节点的 EVM 中。因此要 想调用合约必须要访问某个节点。

以后端程序为例,后端服务若想连接节点有两种可能,一种是双 方在同一主机,此时后端连接节点可以采用 本地 IPC(Inter-Process Communication,进 程间通信)机制,也可以采用 RPC(Remote Procedure Call,远程过程调用)机制;另 一种情况是双方不在同一台主机,此时只能采用 RPC 机制进行通信。

提到 RPC, 读者应该对 Geth 启动参数有点印象,Geth 启动时可以选择开启 RPC 服务,对应的 默认服务端口是 8545。。

接着,我们来了解一下智能合约运行的过程。

智能合约的运行过程是后端服务连接某节点,将 智能合约的调用(交易)发送给节点,节点在验证了交易的合法性后进行全网广播,被矿工打包到 区块中代表此交易得到确认,至此交易才算完成。

就像数据库一样,每个区块链平台都会提供主流 开发语言的 SDK(Software Development Kit,软件开发工具包),由于 Geth 本身就是用 Go 语言 编写的,因此若想使用 Go 语言连接节点、发交易,直接在工程内导入 go-ethereum(Geth 源码) 包就可以了,剩下的问题就是流程和 API 的事情了。

总结一下,智能合约被调用的两个关键点是节点和 SDK。

由于 IPC 要求后端与节点必须在同一主机,所以很多时候开发者都会采用 RPC 模式。除了 RPC,以太坊也为开发者提供了 json- rpc 接口,本文就不展开讨论了。

接下来介绍如何使用 Go 语言,借助 go-ethereum 源码库来实现智能合约的调用。这是有固定 步骤的,我们先来说一下总体步骤,以下面的合约为例。

步骤 01:编译合约,获取合约 ABI(Application Binary Interface,应用二进制接口)。 单击【ABI】按钮拷贝合约 ABI 信息,将其粘贴到文件 calldemo.abi 中(可使用 Go 语言IDE 创建该文件,文件名可自定义,后缀最好使用 abi)。

最好能将 calldemo.abi 单独保存在一个目录下,输入“ls”命令只能看到 calldemo.abi 文件,参 考效果如下:

步骤 02:获得合约地址。注意要将合约部署到 Geth 节点。因此 Environment 选择为 Web3 Provider。

在【Environment】选项框中选择“Web3 Provider”,然后单击【Deploy】按钮。

部署后,获得合约地址为:0xa09209c28AEf59a4653b905792a9a910E78E7407。

步骤 03:利用 abigen 工具(Geth 工具包内的可执行程序)编译智能合约为 Go 代码。abigen 工具的作用是将 abi 文件转换为 Go 代码,命令如下:

其中各参数的含义如下。 (1)abi:是指定传入的 abi 文件。 (2)type:是指定输出文件中的基本结构类型。 (3)pkg:指定输出文件 package 名称。 (4)out:指定输出文件名。 执行后,将在代码目录下看到 funcdemo.go 文件,读者可以打开该文件欣赏一下,注意不要修改它。

步骤 04:创建 main.go,填入如下代码。 注意代码中 HexToAddress 函数内要传入该合约部署后的地址,此地址在步骤 01 中获得。

步骤 04:设置 go mod,以便工程自动识别。

前面有所提及,若要使用 Go 语言调用智能合约,需要下载 go-ethereum 工程,可以使用下面 的指令:

该指令会自动将 go-ethereum 下载到“$GOPATH/src/github.com/ethereum/go-ethereum”,这样还算 不错。不过,Go 语言自 1.11 版本后,增加了 module 管理工程的模式。只要设置好了 go mod,下载 依赖工程的事情就不必关心了。

接下来设置 module 生效和 GOPROXY,命令如下:

在项目工程内,执行初始化,calldemo 可以自定义名称。

步骤 05:运行代码。执行代码,将看到下面的效果,以及最终输出的 2020。

上述输出信息中,可以看到 Go 语言会自动下载依赖文件,这就是 go mod 的神奇之处。看到 2020,相信读者也知道运行结果是正确的了。

X-Japan的成员之一Hide似乎是一个很神奇的人物?

本名:松本秀人

生曰:1964.12.13 -1998.05.02

星座:射手座

出生地:神奈川县横须贺市(Yokosuka Kanagawa JAPAN)

身高:170cm

体重:50kg

血型:AB

参加过的乐队:

Saber Tiger:Guitar,leader

X(X-japan):Guitar,Voice

MxAxSxS:Vocal,Guitar,Programming

Hide with Spread Beaver:Vocal,Guitar,Bass

Zilch:Vocal,Guitar

爱上VR之后的曰子里,是没完没了昏天地暗的疯狂。它是全部的人生、社会、光明或是黑暗,社会以我们看不见的方式使我们失去了棱角和爆发力,而在摇滚里,这一切又都被诙谐地重现。我们因而拾回了疯狂,因为摇滚是疯狂而极端的,掺杂了视觉系化妆艺术的摇滚更是如此。

他的名字叫Hide, 他是视觉系X-Japan的吉他手,一个红头发朋克打扮的俏皮可爱的孩子,他邂逅了一个让他完全迷恋不可自拔的销魂仙子----Yoshiki,于是他进了Yoshiki的家------X-Japan。Yoshiki的暴虐、自残、自恋、才华和美貌吸引了他,X因这两个人而天下无敌。Yoshiki的理念是美学与暴力,并最终走向自我毁灭,而HIDE的创作中则饱含了对人生的热情。他是一个热爱生活的人,他的歌曲是健康向上的,正如字母“X”一样,这个组合充满了矛盾,他们在沉迷的黑色时代,以绚烂之姿出现在众人面前;在贫穷艰难的生活中打造出华丽辉煌的舞台;然后,在红至盛极的顶点,选择消散在众人面前。他们的历程本身就是一个充满矛盾的迷;而他们的音乐更是矛盾的极致----喧哗狂乱的鼓点中夹着冰澈映骨的琴声;热血沸腾的急旋中伴着诡异诱惑的独白;残酷痛苦的语句中,跳脱出天真的音符。最后,他们用最前卫的摇滚乐,去挑战最传统的交响乐……可以说视觉系在曰本得以如雨后春笋般发展壮大,HIDE 功不可没。可是上天永远是嫉妒天才的,HIDE死了,HIDE真正变成了一个褪去一身华彩的粉红色蜘蛛,借着从蝴蝶那儿夺来的翅膀飞向了天堂……

HEDI的生命轨迹

⊙Hide,生于1965年12月13日,日本神奈川县横须贺市。童年的hide是个可爱的小胖子,总是班里最胖的其中一个。他对自己的外形很没有自信,因为经常会被人嘲笑。那个时候他的体重甚至会超过70公斤,在小孩子来说的确太胖了点。学校还曾经在广播上喊他的名字,让他赶快去操场参加小胖子们的午饭后跑步减肥。hide每次在回忆童年时都会非常感慨的说:“那时候我实在是太胖了……”度过了一个不怎么快乐的童年吧,hide?hide的父母对小秀秀的教育非常之热心,强迫他去学习各种东西,什么书法,剑道,珠算之类的,hide还曾经被送到美国LA和加拿大去做一个月的留住学习,hide后来在谈到那段生活时都显示出黯然的神色,应该是很不喜欢吧。但是hide有个非常爱他,很开通且很时髦的奶奶。可以说没有奶奶就没有我们今天所认识的hide呢。 hide的奶奶是位美容师,她从各方面尤其是日后被人所称道的“视觉”都影响了hide。⊙ 在国中二年级时小秀第一次听摇滚乐。那是在同学的家里听到的KISS [ALIVE II]。hide对于kiss的外表觉得难以接受,但是发现kiss的音乐非常棒,一下子就着了迷。Hide甚至参加了家附近的kiss歌迷会,还每天跑到邮筒前等看kiss有没有给他回信。可以说hide的摇滚人生就是从这里开始的,他开始听各种西洋摇滚,着魔似的模仿kiss弹吉他,小hide的妈妈大概这个时候一直在发愁:“这个孩子怎么办呢?”⊙ 第二年,hide的奶奶买了一把Gibson吉他送给hide,这真是一件伟大的事!学校内、家附近都没有人拥有Gibson吉他,小hide一下子变成红人,大家都想要看和弹他的吉他,hide大概很是苦恼了一阵子。不知道他名字的人竟然也知道他叫Gibson……hide那个时候还完全不会弹吉他,只是照着杂志上的乐谱一点点地练习。这时候的hide已经在梦想组织自己的乐队并演出了,可惜学校内是不行的(学校手册写:禁止弹电吉他),他跑到附近的一条“DOBU板路”(那是美军基地附近,所以比较热闹而且也有外国人来去),在那里结识了一些朋友,最后就组成了Saber Tiger乐队。这个时候hide是高中二年级。值得一提的是hide从这个时期开始慢慢瘦下来了,一方面整天练团很累也没有时间大吃大喝,还有他自己也强迫自己要减肥了,因为做摇滚以后当然就要开始表演,还要穿紧身的皮裤哦,为了那酷酷的皮裤,hide在减肥……看Saber Tiger时期live的照片, 已经完全看不出曾经是个小胖子的hide与团员装扮得酷似kiss。⊙ hide负责Saber Tiger的词曲,同时也是团长和吉他,这个团在他的操持下渐渐变得有名气起来,也在很多地方演出,甚至东京的live house。这当中也第一次在live的后台认识了X的团长yoshiki,彼此也都留下了深刻的印象。Saber Tiger在活动了6年之后由于团员的问题太多而宣告解散。(有八卦说hide的初恋女友也在这个时期出现,分手是在Saber Tiger解散后不久)。⊙ 自己的第一个团解散掉后,hide对自己的音乐人生已经不再有什么幻想,决心回到老家,剪短长发,学习奶奶的样子当个美容师(hide在Saber Tiger期间上美容学校,已经取得了证书)。此时是hide人生最重要的一次转折。X的Yoshiki找到hide,请他加入X成为吉他手。hide出人意料地爽快点头说:“好吧!从今天起就是X了。”奇妙的人生际遇。1987年1月,hide正式加入X这个乐队。当时乐队中有三名成员: yoshiki、toshi、taiji。加上hide,稍后另一位吉他手pata也加入进来。除了toshi之外的每个人都曾是其他乐队的领袖者。也正因此使X成为了一个强大的团。yoshiki是鼓手兼任团长,主音toshi,bass手taiji,hide与pata为吉他。⊙ 1988年4月,X以indie身份由yoshiki的Extasy Record发行了他们第一张大碟“Vanishing Vision”。以刺激、华丽的表演著称的X名声渐噪。穿着华丽并化着浓妆留着形状奇特的庞克头的X每一场演唱会的门票都销售一空。可说是获得了前所未有也意想不到的巨大成功。第二年X紧接着发售第二张Major出道大碟:Blue Blood。X的神话继续着。⊙ 1991年第二张Major大碟Jealousy则当然又大获成功。X在1992年举办了他们第一次Tokyo Dome演唱会。之后又在日本第42届红白歌赛出场。这个时期的X中,以几乎超越性别般中性化装扮甚至女性化装扮的yoshiki最为引人注目,他们已经渐渐放弃标新立异的吓人浓妆,而以非常“视觉”和唯美的装扮赢得更多歌迷的支持。音乐方面则以其充满激情的摇滚和煽情的抒情曲一统日本摇滚乐界。或者可以说日本摇滚真正从一种另类的音乐类别走向主流市场是从X的成功开始。⊙ 这段时间内X内部发生一些矛盾,主要是taiji与团长yoshiki之间的矛盾,最终taiji在X刚开始走向辉煌顶点时宣告退出X。经过多次试听,最终heath被选择成为新的bass手。X与此同时也更名为X-Japan,开始向海外市场进军。作为X的历史至此宣告一个段落。X从无名的受人白眼的怪异摇滚乐团走向巨大的成功,其间经历了许多磨难。作为歌迷也都永远不会忘记X这个永恒的名字。这段经历对hide来说永生难忘,快乐与悲伤,奋斗与拚搏,还有宝贵的友情,重情谊的hide一直珍藏着这段往事。然而,新的神话开始了。⊙ [值得一提的是92年左右hide在美国为X-Japan的发展而奔走时认识了Marilyn Manson,两人在摇滚乐方面很有共同语言,Manson对hide和X-Japan也很有好感和兴趣,并与hide成为好友。hide似乎一直都还很欣赏Manson,His Invincible Deluge Evidence那个video中不是有98年在LA采访hide的片断吗?hide当时走进超市拿起来看的CD似乎就是Manson的,hide评论了几句并且最后买了下来。98年hide曾经说过将和Manson一起举办live,相信不是随便说的,可惜最终没有成为现实。]⊙ 1993年hide开始了solo活动。两支由森雪之丞作词,hide作曲并演唱的新单曲"EYES LOVE YOU" 和 "50 50"立刻打入日本ORICON排行榜并且名列前茅。前者的clip甚至还得到MTV观众票选的大奖。9月,hide与另支乐团ZI:KILL的主唱 Tusk合作演出的电影Seth et Holth(seth与holth)发行。这部电影从视觉冲击到音乐都是一次革新,而且剧本与作曲演奏都是hide和tusk完成的。可想而知hide的才华多么令当时的人们称奇。这部video也在ORICON的video排行上达到了第一名的位置。⊙ 8月,X-Japan的大碟Art of life发行。并在年尾于Tokyo Dome举行只有国外大腕歌手才有资格举行的倒数计时跨年演唱会。 94年2月hide的第一张solo大碟问世。名为hide your face。在solo album大受好评后hide紧接着就开始了他的第一次solo tour,当时随团成员有Pata(from X-Japan),RAN,Joe(from Ziggy), D.I.E.(from Centaur), I.N.A.,CHIROLYN(from Hiroshi)。 ⊙ 96年5月,hide发行了名为LEMONed的video,他的LEMONed shop也于同一天在东京开张。这是店经营服饰玩具(?)等,二楼还有美容服务。为什么会有LEMONed shop?这是因为一个叫作ZEPPED STORE的乐团。hide无意中听到这个团的demo tape,大为惊叹:“日本也有这么好的团?”他立刻表示想见见ZEPPED STORE,还打算尽力支持他们。于是就诞生了LEMONed shop,hide对后辈的提携可见一斑。(现在hide city这个官方站的link中可以找到ZEPPED STORE的主页连接,有兴趣的话可以去瞧瞧)

这一年除了X-Japan的事务,hide又发行了自己另二支单曲Misery和Beauty Stupid 以及第二张solo albumyence。hide于9月展开第二次solo tour: Psyence A Go Go。这次同行的与94年的成员相差无几,只有一名新的吉他手kiyoshi。在全国共举行20余场演唱会,所有的票都一售而空。

⊙ 10月,X-Japan新大碟DAHLIA发售。年末又于tokyo dome举行2天5万人参加的live。X-Japan的发展至此似乎已经到了巅峰。

⊙ 97年,hide仍然保持旺盛的创作状态,继续进行solo新作。继新单曲Hi-Ho/Goodbye之后,发售2个live video和video clips,以皉emix album("tune-up", "MIX LEMONed JELLY"。就在一切看来十分顺利的时候,X-Japan主音Toshi以“音乐理念不合”为由宣布退出X-Japan,这对于已经共同走过10年春秋的X-Japan成员及其歌迷都是一个沉重的打击。尤其是身为队长又是toshi青梅竹马好友的yoshiki更觉得难以接受这样的结局。最终导致9月 22日召开记者会公开宣布X-Japan解散。

⊙ 在记者招待会上,yoshiki说道:“真的非常感谢大家支持我们到现在,非常感谢各位。”之后每位成员发言(除了toshi没有来参加), hide说:“让你们一直等实在是对不起。这是最后的任性,然后……谢谢大家。” hide虽然戴着墨镜,但是声音却是颤抖的。

⊙ 12月31日,X-Japan,最后的夜。The Last Live于Tokyo Dome举行。[这也是hide的last live,以后再也没有歌迷所期待疯狂的live了]

⊙ 开始还强装笑脸的hide,到了后面Endless rain, Forever Love时,已经泪痕斑斑,在暗淡的光线下十分明显。虽然大家都努力想要好好表演,为歌迷留下完美的印象,但是在低落的情绪下,整个live令人心碎肠断。曲终,人散。歌迷们痛哭的时候,X-Japan还不得不赶往红白歌赛现场演出。

⊙ 失去了X,hide并没有向外界表露出伤心绝望,而是埋头专注于自己的solo事业,他组成了“hide with spread beaver”,成员都是他两次solo tour时助阵的老朋友。新团以单曲Rocket Dive一举打入ORICON单曲排行第四位。之后,hide到美国去录制新专辑。新单曲Pink Spider和Ever Free的发行也在日程之内,hide对98年将要进行的tour和许多工作都抱有积极的态度,也比往日更加活跃于乐界,杂志、电台、TV,无所不见他的身影。歌迷们对hide和他的新团都极力支持。

⊙ 1998年4月27日,hide回到日本。

⊙ 5月1日,他还在非常认真的工作。

⊙ ……2日早晨,他突然不告而别。结束了33岁的生命。

⊙ Spread Beaver将hide没有能最终完成的大碟依靠demo tape完成,并发行了这张遗作:Ja Zoo。并于10月展开tour。hide的影像出现在巨大屏幕上,kiyoshi喊道:“他那里也没有去!哪里都不要去!他就在这里,在这个舞台上……”

⊙ 以zilch名义发行的hide最后一张大碟3,2,1,zilch,也在同年7月发行。

为什么GO语言把类型放在前面?

当需要定义一个整形变量a 心里是这样想的:我现在需要一个整形的变量,我要定义它,于是我先写一个int,再思考它的名字 a ,于是就这么写出来了int a  。而不是我写了个变量a,我得给它区分个类型int。2. 在调用一个方法的时候,func(abdfsasdffdg int, bagressdgf string, csdgesredg bool)    那个go函数看的很乱,程序员其实根本就不怎么看参数名字是什么,而只是看需要传入什么类型,注意力只在于int,string,bool这三个,如果如上那么写,反而影响了视线,乱系八糟的。func(int adsfasdfsdaf, string asdfasfasf, bool gwegasgs),这么写我只注意类型,就不受名称影响了。3. IDE自动提示    go本身就是为快而生,定义一个结构变量Rectangle rectangle,当键盘敲下r时候,IDE会自动给出rectangle,直接回车就出来了,反过来就的自己一个字母一个字母敲上去,蛋疼啊4. 至于go给出的解释,当遇到复杂函数时……    一个项目中能写几个复杂函数,为了去解决这么一点小问题就把优势给牺牲了.

如何使用Go语言实现远程执行命令

一般命令

所谓一般命令,就是在一定时间内会执行完的命令。比如 grep, cat 等等。 执行命令的步骤是:连接,执行,获取结果

连接

连接包含了认证,可以使用 password 或者 sshkey 2种方式来认证。下面的示例为了简单,使用了密码认证的方式来完成连接。

import (

"fmt"

"time"

"golang.org/x/crypto/ssh"

)

func connect(user, password, host string, port int) (*ssh.Session, error) {

var (

auth []ssh.AuthMethod

addr string

clientConfig *ssh.ClientConfig

client *ssh.Client

session *ssh.Session

err error

)

// get auth method

auth = make([]ssh.AuthMethod, 0)

auth = append(auth, ssh.Password(password))

clientConfig = ssh.ClientConfig{

User: user,

Auth: auth,

Timeout: 30 * time.Second,

}

// connet to ssh

addr = fmt.Sprintf("%s:%d", host, port)

if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {

return nil, err

}

// create session

if session, err = client.NewSession(); err != nil {

return nil, err

}

return session, nil

}

连接的方法很简单,只要提供登录主机的 用户*, *密码*, *主机名或者IP*, *SSH端口

执行,命令获取结果

连接成功后,执行命令很简单

import (

"fmt"

"log"

"os"

"time"

"golang.org/x/crypto/ssh"

)

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

session.Run("ls /; ls /abc")

}

上面代码运行之后,虽然命令正常执行了,但是没有正常输出的结果,也没有异常输出的结果。 要想显示结果,需要将 session 的 Stdout 和 Stderr 重定向 修改 func main 为如下:

func main() {

session, err := connect("root", "xxxxx", "127.0.0.1", 22)

if err != nil {

log.Fatal(err)

}

defer session.Close()

session.Stdout = os.Stdout

session.Stderr = os.Stderr

session.Run("ls /; ls /abc")

}

这样就能在屏幕上显示正常,异常的信息了。

交互式命令

上面的方式无法远程执行交互式命令,比如 top , 远程编辑一个文件,比如 vi /etc/nginx/nginx.conf 如果要支持交互式的命令,需要当前的terminal来接管远程的 PTY。

func main() {

session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)

if err != nil {

log.Fatal(err)

}

defer session.Close()

fd := int(os.Stdin.Fd())

oldState, err := terminal.MakeRaw(fd)

if err != nil {

panic(err)

}

defer terminal.Restore(fd, oldState)

// excute command

session.Stdout = os.Stdout

session.Stderr = os.Stderr

session.Stdin = os.Stdin

termWidth, termHeight, err := terminal.GetSize(fd)

if err != nil {

panic(err)

}

// Set up terminal modes

modes := ssh.TerminalModes{

ssh.ECHO: 1, // enable echoing

ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud

ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud

}

// Request pseudo terminal

if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {

log.Fatal(err)

}

session.Run("top")

}

故乡六年级作文

在日常学习、工作或生活中,大家都有写作文的经历,对作文很是熟悉吧,作文是由文字组成,经过人的思想考虑,通过语言组织来表达一个主题意义的文体。那么你知道一篇好的作文该怎么写吗?以下是我收集整理的故乡六年级作文,希望对大家有所帮助。

故乡六年级作文1

席慕容说:“故乡的歌是一支清远的笛,总在有月亮的晚上响起。故乡的面貌却是一种模糊的怅惘,仿佛浓雾里的挥手告别。别离后,乡愁是一棵没有年轮的树,永不老去。”而我却深深地觉得故乡是一个温暖的港湾,温润了我的心田。

故乡在湖南资兴的一座小村庄里,这儿每家每户的房子几乎都是红墙黑瓦,有的瓦片上长满了青苔,很是水灵。这里跟城市完全不一样,早上起来,推开窗户,微风便迎面拂来。鸟儿把整个山林唱醒了,云雾环绕着巍峨的“七宝山”,竟显得有一丝神秘感。传说中“七宝山”原来叫“八宝山”,因为被孙悟空盗走了一宝,所以改叫了“七宝山”,至于那七宝为何物我却也不得而知,也许只是人们对它的一种寄托和向往吧。那山上,古木参天,植被茂密,更是动物们的天堂,千百年来,人与自然就这么和谐共存着。

夜幕降临,劳作在外的妇女们都形色匆匆,忙着赶回家张罗一家人简单美味的晚餐。这时,房顶的烟囱里开始“突突”地冒着炊烟,耳朵里满是“哐哐当当”锅碗瓢盆相聚的欢闹声,即便是很远都可以听到,屋内的欢声笑语夹杂着饭菜的香气弥漫在整个村庄。这时的故乡炊烟袅袅,点点昏黄的灯光点缀在这暮色中,如诗如画,和谐静谧。

春日晴朗之际,故乡山坡上的茶树便会发出嫩绿的新叶,在这些新叶中却隐藏着儿时最爱的美味“水果”——茶苞。茶苞有的是叶状,有的是块状,更有的是圆形的,若想吃到白白的甜甜的茶苞,考的可是小伙伴们的眼力和爬树的能力。大自然馈赠给的美味成为了我童年最深的记忆……

“心若有栖息的地方,到哪里都是天堂。”故乡虽然遥远偏僻,交通也不那么方便,却是我和爸爸妈妈最温暖的港湾。每当我们感到疲惫、迷惘时最想的就是投入到故乡的怀抱,呼吸它新鲜的空气、畅饮它甘甜的泉水,和这里纯朴、勤劳、善良的故乡人聊聊家常,什么烦恼都会被抛到九霄云外。这就是我的故乡,我魂牵梦绕的地方。

故乡六年级作文2

啊!又尝到故乡的特产了!离开故乡也有二十年了,我决定回故乡一趟。

二十年了,交通更方便了,我只用了一个小时就到了。下车后,眼前的情景却让我大吃一惊:防务便了,街道变了,人们生活也越来越现代化了……

我走进了阔别已久的老家,已经白发苍苍的奶奶正在做饭。嗯?那是什么?“那时温度调节器,可以根据你想要的口味来煮成半成熟呢!还很标准!”挖!那么厉害?“奶奶,为什么现在大家的房子都那么华丽呢?记得以前仅仅只是几间小小的平房。”我疑惑不解,“我还差点找不到家了呢!”奶奶不紧不慢地说:“现在都20xx年了,时代不同了,我们啊,可不能落伍!”现在的凡物和以前有很多不他。以前,人们住的都是两三层的平房,现在的房楼不仅高过五楼,还很气派呢!

吃过香喷喷的米饭,我走出老家,往大街上逛了一圈,真是和以前大有差别。记得之前的路的两旁没有什么东西,现在啊,路的两旁添了不少的花和路灯。走过去,感觉都轻松了好多。特别是这个羊子,让人感觉很浪漫,很温暖。

人们生活也越来越现代化了,现在在家里的院子里当着秋千,你会发现每家都是这种高科技秋千,坐上去,电子表就会给你选择摇晃程度,就可以玩啦!坐上去,真有一种童年时快乐的感觉涌上心头!这种秋千,被人们称为电子秋千。

我爱我的家乡,不管他的变化有多达,他依然是我心中那个可爱美好的故乡。

故乡六年级作文3

“少小离家老大回,乡音无改鬓毛衰”如今,我已经成为哈佛大学计算机系教授,已经10年没有回到家乡——中国了!转眼就到20xx年了,家乡不知有了什么变化,所以我要买机票,准备回到世界另一头的家乡了!

正当我网购机票时,听到手机响了,一看,是二十年前同在一个教室上课的吴思诺的电脑传来的视频,他说:“你记得我吗,我是你的同学吴思诺。你在哪里,我在外国,我们去中国聚个会吧!”于是我和机器人说:“你帮我代课吧!”说罢,我把电子课本给了他,就兴奋的赶往机场。

我到达中国了,看到牌子上写着几个字,T6航站楼,看见了很多形形色色的机器人,我坐上了传送电梯,按下,“地铁站”键,转眼5秒钟时间,我就到了地铁站,看见了地铁示意图,1号线,2号线,3号线,……直到22号线,“22条线?”我不禁惊叹道,当我正在感慨时,正好过去一趟地铁,我看了看引导屏幕,上面写着,本次列车五秒钟,过了5秒,列车风驰电掣的就、停到了面前,从列车中伸出了一条道,上车后,我看到了机器和精密的椅子,车顶上写着,头等舱,我用“全球指纹识别系统”刷了指纹,坐在椅子上后,按下按钮后,只听一句广播,“您的安全带已经自动系好。”“Three,two,one,go!”5秒后到站了。下了车,来到了国贸,只见一栋栋智能大厦,大厦是新型玻璃制成的,冬暖夏凉,窗户外有脚下会喷火的擦窗机器人,里面有服务机器人、扫地机器人,路上有机器警官维持交通……

我想起了母校——黑芝麻胡同小学。于是我来到了这里,学校里有很多机器人,变得很繁华,今天正好是教师节,我也见到了很多的小学同学,刚开始还有些认不出他们,之后我们互相说出自己的名字,才认了出来~

我们进入校园,这里已经变成了一个正梯形的玻璃教学楼还有了地下6层至地上16层,外加计算机室、体操室、器材室、电子办公室、礼堂……教学楼里只有一些代课机器人和学生。教室里,每位学生都有自己的电子桌椅,是无线连接的,只有机器人来上课,那屏幕就是学习电脑,每个学生都有一个耳机,可以与电脑蓝牙连接,设置铃声与提醒。

这次回乡,发现中国的变化可真大呀,科技发展的更加日新月异了!

故乡六年级作文4

故乡,是每个人最温暖的港湾;故乡,像一张网,每次梦中都被网在网里面,醒来后,却找不到解脱的出口。二十年后的我移居到了美国,时常回想起我那久违的故乡!这天,我终于能回去探望一下大家了!我坐上新型的空行快速飞机,不到30分钟就回到了我的家乡——海丰。

我下了飞机,看到到处都是小树,矮矮的平房不见了,变成一座座高楼大厦。小草又长出了嫩芽,旁边的机器在帮忙浇水、施肥,忙得“不可开交”,树木下铺了一条玻璃路,路下是一些鹅卵石,路旁还有“按摩路椅”,大家走累了都会在那里享受一下。马路不再是水泥路,而是永远不会脏的高科技混泥,人人开着太阳能车,不再喷射废气。

大海波浪敲击岩石的声音是那么柔软,那么高昂!哇!那沙滩上的烂贝壳与一些废水排污器排出的废水都被一种叫:“吸吸通”的东西吸走了,听说这种东西能快速分辨好的东西与不好的东西,把没用的东西吸走,不吸到一些像:螃蟹、沙子,和蚌壳。真是好东西呀!惊奇的还不止这些,全省的工厂排污水器禁止使用,全部都接上一条小管,经过和天然的水的对比,在一条管的里面过滤,排出的水直接流向大海、河流。这样就不再有污染的现象出现啦!看完这些,我的心里特别安慰,仔细一瞧!大海的垃圾也被清洗了,是在沙子底下安装了个探测仪,探测到有垃圾,就会派人开船去捞。以前的沙滩上也安放了温度调整器,让各种海底生物在不同的季节都有不同的快乐生活!

原来家乡的变化那么大啊!事不宜迟,穿过小巷,我来到了我的家。家里重新装修了,搞了一种会闪的七彩瓷砖,它不会被刮损,不会破裂,能耐高温,就连硫酸也侵蚀不了它,而且随时都能变换楼层的颜色,只要在屋子里的调整系统里挑选就ok啦!附近的几十户人家都换了这种瓷砖,在高空望去,一定是副五彩的画卷。我跨进家门,妈妈喜出望外地招待我,还为我介绍家里的各种变更。玻璃换了“吸灰玻璃”,门也换了“智能指纹全能门”,而扫帚,垃圾桶等清洁工具已经不要了,换成了地板全自动地擦洗,并且不会伤到人呢!还有洗衣机已经升级到3秒瞬洗还有包烘干、拧干的洗衣机,一切都在我的意料之外。

黄昏悄悄来临,很快又到了回去的时候,我坐着车回去了我那“高科技”港湾。

故乡六年级作文5

我的家乡在徐州,徐州这里的农副产品很多:富士苹果、桃子、大洞山的石榴,土生的鸡鸭,样样招人喜欢。而我最喜欢石榴。

我们村靠近大洞山,那里有许多的石榴树,每到秋天,家家户户门前屋后的石榴树上挂满了鲜红的大石榴,有的红中发黄,有的咧开着嘴儿,像一个个顽皮的红孩儿躲在绿叶丛中,朝着路人做鬼脸呢!真是逗人喜爱啊!

清晨,露珠宝宝在石榴的身上玩耍,在太阳公公温暖的阳光照耀下,晶莹剔透。近看,石榴的外表像一个洋葱,外表布满了凸凹不平的小疙瘩,虽然它外表不是很漂亮,但是石榴里的籽粒果实可都是十分好吃的哦!每年九、十月份,石榴飘香,硕果累累。如果石榴没有熟透,剥开皮,就看到青粉色的籽粒,尝一口,会有一点酸酸的,如果把石榴放在水里浸泡一天,第二天,这些石榴就会变得红通通的,摸上去有很光滑的感觉,这时它散发出诱人的香味,令人垂涎欲滴。尝一口也很甜。如果是熟透了的石榴,它的籽粒晶莹饱满,核小肉厚、多汁,口感甘甜爽口,香甜的乳汁和那一颗颗“珍珠”,一起送入口中,令人回味无穷。

石榴不仅好吃,而且能“医治百病”。入药,可以医治消化不良、咳嗽、头痛等多种疾病。石榴可以帮助精神消沉的人恢复精气,可以帮助食欲不振的人增强食欲。石榴的果皮还可以用来驱虫,夏天石榴汁还可以抗暑散热,石榴汁中含有大量的维生素和矿物质,水浸泡后的石榴皮敷在皮肤上,能使肤质更加水润……对了,美国科学家还发现石榴可以治癌呢!

家乡的石榴不仅是美味的水果,还是必不可少的药材呢!我爱家乡的石榴。

故乡六年级作文6

故乡,一个多么温馨的字眼,她是落叶所能回归的根,她是孤雁所能向往的巢,她是江河所能拥有的海,她是远在他乡游子思念的依托,她是凝聚我们爱的港湾。无论她贫穷还是富有,我们每个人都会深深爱着她。我的故乡在瀛湖,一个如秋天落叶般平凡,如清晨露珠般微小的地方,是一个不容易一起别人注意的地方,但对我而言,她却是我记忆的全部,是我心中无所不及的天,尽管……无论有多少尽管,我依然深爱着她——灜湖。

我顶着疲惫,回到相隔几十余里且别了数年的故乡。

这不是我来时时记得的故乡?虽然门前有不少的杂草,但是我有一种莫名的熟悉感,门前的枇杷树虽未结果,但是它的花却已挂满枝头,让人欣喜不已,走近那陌生的家,打开了落满灰尘的门,看见了一张黑白照片,一张全家人都洋溢着幸福的照片,门外几只小鸟叽喳喳的叫着,这是多么熟悉的声音啊!

我漫步在一条小路上,看见了一片片黄灿灿的油菜地,我索性就置身其中,沁人心脾的花香扑鼻而来,明媚的春光洒在河面上,璀璨夺目,我静静的站在那儿,望着无限的春光,看着那个熟悉的家,陷入了无限的遐想……

回忆着曾经有过的流年岁月,变的是现在,不变的是记忆。在闹市中,我们无论享受着多么美好的时光,但在宁静的故乡,我们有的只是一丝眷恋与缅怀。

我的故乡一一瀛湖,虽然是那么的平凡,但在我心里的位置是其他地方不能取代的,她不仅仅是生我养我的地方,更是一份浓浓的乡情。今天的'一次回乡之旅,虽局促却安然,临走之际,心中也涌起一股莫名的悲伤,我拼尽全身力气,追溯那如诗的光阴。

我望了望那熟悉的家园,挥挥手,告别……

故乡六年级作文7

故乡的山山水水花鸟虫草……在我脑海中总是那样熟悉。历经思乡一月之久的煎熬,终于踏上归程车。

便等待故乡的身影向我招手。车里很静,听得见我那颗心在急促地跳动,我不知怎么回事,没过多久我似乎到了家中,妈妈为我准备了丰盛的饭菜,看我那吃像妈妈笑了,并叫我慢点,别呛着了。院内的各种鸟儿格外多,唱的歌儿特别好听,好象是特为我唱的“进行曲”。我走进我久别的被窝,软软的、暖暖的。正准备躺下,也不知为啥睁开眼睛看,自已那里是在家里哦!

车子像蚂蚁在无尽的路上移动,也不知是走了一天?一月?还是一年?故乡的山影终于向我招手了,我使劲地投入她的怀抱,那一刻的心情就别提了。各种花儿、小草、大树都向我点头问好。特别是“雪狼”(是我养的一条白狗),一闻到我的气息,老远就叫着、跳着、跑着来到我身边,闻闻我的手,舔舔我的脚……妹妹像一只快乐的小鸟飞到我身边,为我领包,还缠着要我讲蓝猫的故事。

人生之旅漫长、崎岖、修远。起点于呱呱坠地,第一眼看到的便是故乡。他的万物都溶进了我的血液不可分割,真正体会到这一点是在异井他乡,越远体会越深。

说真的,人一旦离开了乡土,就成了失根的兰花、逐浪的浮萍、飞舞的秋蓬、迎风四散的蒲公英,但乡土之梦却永远追随他们,他们也有永做不完的乡土梦。正所谓是:鸟依旧林,鱼思故远;树高千丈,叶落归根;美不美,故乡水;亲不亲;故乡人啰。

故乡六年级作文8

我的故乡,是一个美丽的小山村,那里的一切都是美丽的,虽然我在那儿待过的时间十分短暂,但故乡在我心中,是那样的纯朴,自然。

我爱故乡的山。在小村的后面,有一群连绵不断的山峰。那些山是石山,虽然山无一草一木,但山上石头的颜色,真可谓五彩缤纷。有赤红的,有深灰的,还有墨蓝的。山上就像一颗颗晶莹剔透的石头,在这块宝地上闪闪发亮。

我爱故乡的杏子,春天一来,这杏林里就成了一片黄澄澄的海洋。我们最喜欢摇杏树,摇一下,杏子就“啪啪…….”地往下掉,像下了一场“杏子雨”。故乡的杏子是甜的,金灿灿的果肉一送到嘴里,就能让心情高涨。这酸甜的故乡的杏子,总是有股说不出的甜。

我还爱故乡的人。故乡的人是纯朴的维吾尔农牧民。几乎每一家的后院里,都种着蔬菜和果树,收获季节一到,大家都会带自己家的特产,在乡里互相串门拜访,和大家一起分享,分享这甜蜜的劳动果实。

我更爱故乡的水。家家户户的门前都有一条小溪,这溪流从村头到村尾,最后流到村前的大湖里。村子里的孩子们经常在小溪抓一些小鱼小虾,放进玻璃瓶里养。而且你每天一定看到一些孩子在水里玩耍,欢笑。大人们用这溪流浇农田,小孩儿在水中玩耍,大家都离不开它。

我爱我的故乡,爱这个美丽的地方。

故乡六年级作文9

我这一生有两个故乡,一个是湖南长沙,另一个则是远隔千里的河南郑州。我对这两个故乡怀着同样崇高的敬意和同样真挚的爱慕。

我的父母都是湖南人,我自然也是土生土长的长沙人,我热爱这个故乡,因为这里有我童年的全部回忆。岳麓山、湘江、烈士公园,这熟悉的字眼儿时刻在我脑海中存在。

我虽然从没去过河南,但是每一想起那儿,便涌起一股对故乡的熟悉与怀念,好像那儿处处都萦绕着我生活的影子。这起源于翻地图,每一次抚摸这块地方,尤其是看到郑州的时候,都会涌起有一种家乡的亲切,甚至比对长沙的乡情还要强烈,从此以后,这种特殊的“思乡情”就没有再断过,而是随着时间的推移而日益加深,渐渐地,我竟然不经意学会了说河南话,不争气的在上课时想起郑州的人、景、物(当然无法确定是不是想象),而且每一次看到有关郑州的新闻,我都激动万分。中秋节那天,我深刻地体会到了“露从今夜白,月是故乡明”的情境,我好像忘了自己真正的故乡是长沙,而我正在家中?

昨晚又梦见了那个令我魂牵梦绕,而且宛如我第二个故乡的地方,好现在我就跟你描述这个梦:熙熙攘攘的街道上,一位恬静的少女正迈着小步走着。当落日余晖完全消逝,她在一个不知名的广场停下脚步,看着绚烂多彩的城市夜景。广场中间屹立着一座古香古色,与周围完全的现代式楼房格格不入的高塔,那高塔前面有一块石碑,上面刻着——二七纪念塔。塔周围时高时低的喷泉在在地灯的映衬下显得五颜六色,广场旁的楼房大厦灯火通明,许多似乎很面善的人在广场上跳起来广场舞,用那亲切的河南方言聊起了天。

这个少女是我,是每一个思念家乡的人。有的同学说,我梦到的就是郑州的二七广场,我也不知道为什么会这样,没有去过,却有一种生活过的熟悉,思潮起伏的澎湃之情难以言说。

一个人两个故乡,看起来很矛盾,其实也未必。

故乡六年级作文10

瘦土地,长不出芝麻杆

爷爷,背着乡井

顺着潦河,寻找一滴水的宿愿

滑到了高安的一个小村庄

因而,我的血脉里

流淌着潦河梦中遗失的方向

长大后,因为潦河的朵朵浪花

令我激情飞扬,我溯源而上

春风摆渡的绿色轨道

让我拾起了

爷爷当年滑落的一缕乡音

我多次沿着潦河歌唱

一河两岸,水润的荧屏,岁月流金

我心潮逐浪,目光落在苍穹之处

又见母亲河最美的风度

笑脸继续,节拍更响,且看

应星故里,历史的风歌

与现代文明的芳踪

在辉煌的窗口汇合

富硒的名片,承载千祥,花开四季

拜读的眼神,用睿智的手指

抚摸着上天格外恩典的词汇

潦河上源的九仙温泉

如同候鸟的圣殿

滴滴仙水,调节红红绿绿的小日子

温馨的情节,蔓延在百里之外的枕边

我搜肠刮肚,用母亲河的乳汁

涤荡灵感,我发现

故乡的坐标之上,每一个叶片

都闪烁着灵动的音符


文章题目:go语言屏幕广播,go 广播
网页路径:http://lswzjz.com/article/dsidscg.html