189 8069 5689

go语言embed教程 go 116 embed

Go 中这么多创建 error 的方式,你真的了解它们各自的应用场景吗

在Go中,error是一种内建的数据类型。在Go中被定义为一个接口,定义如下:

创新互联是一家集网站建设,喀什企业网站建设,喀什品牌网站建设,网站定制,喀什网站建设报价,网络营销,网络优化,喀什网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

由此可知,该接口只有一个返回字符串的Error函数,所有的类型只要实现了该函数,就创建了一个错误类型。

创建error的方式包括errors.New、fmt.Errorf、自定义实现了error接口的类型等。

2.1 通过errors.New方法创建

通过该方法创建的错误一般是可预知的错误。简单来说就是调用者通过该错误信息就能明确的知道哪里出错了,而不需要再额外的添加其他上下文信息,我们在下面的示例中详细说明。

我们看New方法的实现可知,实际上是返回了一个errorString结构体,该结构体包含了一个字符串属性,并实现了Error方法。代码如下:

error.New使用场景1 :

通过errors.New函数创建局部变量或匿名变量,且不在调用函数中进行值或类型判断的处理,只打印或记录错误日志的场景。

使用示例1 :

以下代码节选自源码/src/net/http/request.go中解析PostForm的部分。 当请求中的Body为nil时,返回的错误信息是"missing form body"。该信息已明确的说明错误是因为请求体为空造成的,所以不需要再额外的添加其他上下文信息。

使用示例2

以下代码选择源码/src/net/http/transport.go的部分,当请求体中的url地址为nil返回的错误:"http: nil Request.URL" ,说明是请求中的URL字段为nil。以及当Header为nil返回的错误:"http:nil Request.Header",说明请求体中的Header字段为nil。

error.New使用场景2 :

将errors.New创建的错误赋值给一个全局的变量,我们称该变量为哨兵错误,该哨兵错误变量可以在被处理的时候使用 == 或 errors.Is来进行值的比较。

使用示例 : 在源码/src/io/io.go中定义的代表文件末尾的哨兵错误变量EOF。

在beego项目中,beego/core/utils/file.go文件中有这样的应用,当读取文件时,遇到的错误不是文件末尾的错误则直接返回,如果遇到的是文件末尾的错误,则中断for循环,说明文件已经读完文件中的所有内容了。如下:

2.2 通过fmt.Errorf方法创建

使用场景1:不带%w占位符 :

在创建错误的时候,不能通过errors.New创建的字符串信息来描述错误,而需要通过占位符添加更多的上下文信息,即动态信息。

使用示例:不带%w占位符 :

以下示例节选自gorm/schema/relationship.go的部分代码,当外键不合法时,通过fmt.Errorf("invalid foreign key:%s", foreignKey)返回带具体外键的错误。因为外键值是在运行时才能确定的。代码如下:

使用场景2:带%w的占位符 :

在有些场景下,调用者需要知道原始错误信息,一般会通过errors.Is函数进行判断该错误链中是否包含某种特定类型的原始错误值。

使用%w占位符创建的错误信息,其实会形成一个错误链。其用法如下:

我们再来看下源代码:

通过源码可知,如果fmt.Errorf中包含%w占位符,创建的是一个wrapError结构体类型的值。我们再来看下wrapError结构体的定义:

字段err就是原始错误,msg是经过格式化之后的错误信息。

使用示例:带%w的占位符 :

假设我们有一个从数据库查询合同的函数,当从数据库中查询到记录为空时,会返回一个sql.ErrNoRows错误,我们用%w占位符来wrap该错误,并返回给调用者。

好了,现在GetContract的调用者可以知道原始的错误信息了。在调用者逻辑中我们可以使用errors.Is来判断err中是否包含sql.ErrNoRows值了。我们看下调用者的代码:

使用场景 :这个是相对errors.New来说的,errors.New适用于对可预知的错误的定义。而当发生了不可预知的错误时,就需要自定义错误类型了。

使用示例 : 我们以go源码/src/io/fs/fs.go文件中的源码为例,来看下自定义错误类型都需要包含哪些元素。

首先看结构体,有一个error接口类型的Err,这个代表的是错误源,因为根据上面讲解的,在错误层层传递返回给调用者时,我们需要追踪每一层的原始错误信息,所以需要该字段对error进行wrap,形成错误链。另外,有两个字段Op和Path,分别代表是产生该错误的操作和操作的路径。这两个字段就是所谓的未预料到的错误:不确定是针对哪个路径做了什么错误引发了该错误。

我们看下该错误类型在代码中的应用:

应用1 :在go的文件src/embed/embed.go中的代码,当读取某目录时返回的一个PathError类型的错误,代表读取该目录操作时,因为是一个目录,所以不能直接读取文件内容。

应用2 :在go的文件src/embed/embed.go中的代码中,有文件读取的函数,当offset小于0时,返回了一个PathError,代表是在读取该文件的时候,参数不正确。

fs.ErrInvalid的定义如下:

由此可见,PathError中的三个字段值都是不可预知的,都需要在程序运行时才能具体决定的,所以这种场景时,则需要自定义错误类型。

另外,我们还注意到该自定义的类型中有Unwrap函数的实现,该函数主要是为了配合errors.Is和errors.As使用的,因为这两个函数在使用时是将错误链层层解包一一比对的。

根据上一节我们得到,通过%w占位符可以将错误组织成一个错误链。

errors.Is函数就是来判断错误链中有没有和指定的错误值相等的错误,相等于 == 操作符 。注意,这里是特定的错误值,就像gorm中定义的ErrRecordNotFound这样:

那么我们就可以这样使用errors.Is:

errors.As函数,这个函数是用来检查错误链中的错误是否是特定的类型 。如下代码示例是节选自etcd项目中etcd/server/embed/config_logging.go中的部分代码,代表的是err链中有没有能当做json.SyntaxError类型的错误的,如果能,则将err中的错误值赋值到syntaxError变量上,代码如下:

本文从应用场景的角度讲解了各种创建错误方式的实际应用场景。示例中的代码尽量的选自golang源码或开源项目。 同时,每种的应用场景并非绝对的,需要灵活应用。希望本文对大家在实际使用中能够有所帮助。

如何在 Go 语言中用 Beats 开发 Logstash 插件

配置环境

在OSX系统上很容易安装GO的可执行文件:

brew install go

虽然Java或Ruby (或者任何我知道的语言) 可以在本地文件系统的任何地方使用命令,,但是Go项目必须使用单一专用的地址,,并且在$GOPATH环境变量下可用。

第 1 段(可获 1.54 积分)

R e; 7个月前 

创建项目对于Logstash插件,Beats项目可以从模板创建。官方文档的说明十分简单。鉴于Go对文件系统上的位置的严格要求,只需按照以下说明生成一个新的即可使用的Go项目。默认模板代码将在控制台中重复发送带增量计数器的事件:./redditbeat -e -d "*"

2016/12/13 22:55:56.013362 beat.go:267: INFO

Home path: [/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat]

Config path: [/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat]

Data path: [/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/data]

Logs path: [/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/logs]

2016/12/13 22:55:56.013390 beat.go:177: INFO Setup Beat: redditbeat; Version: 6.0.0-alpha1

2016/12/13 22:55:56.013402 processor.go:43: DBG  Processors: 

2016/12/13 22:55:56.013413 beat.go:183: DBG  Initializing output plugins

2016/12/13 22:55:56.013417 logp.go:219: INFO Metrics logging every 30s

2016/12/13 22:55:56.013518 output.go:167: INFO Loading template enabled. Reading template file:

/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/redditbeat.template.json

2016/12/13 22:55:56.013888 output.go:178: INFO Loading template enabled for Elasticsearch 2.x. Reading template file:

/Users/i303869/projects/private/go/src/github.com/nfrankel/redditbeat/redditbeat.template-es2x.json

2016/12/13 22:55:56.014229 client.go:120: INFO Elasticsearch url: 

2016/12/13 22:55:56.014272 outputs.go:106: INFO Activated elasticsearch as output plugin.

2016/12/13 22:55:56.014279 publish.go:234: DBG  Create output worker

2016/12/13 22:55:56.014312 publish.go:276: DBG  No output is defined to store the topology.

The server fields might not be filled.

2016/12/13 22:55:56.014326 publish.go:291: INFO Publisher name: LSNM33795267A

2016/12/13 22:55:56.014386 async.go:63: INFO Flush Interval set to: 1s

2016/12/13 22:55:56.014391 async.go:64: INFO Max Bulk Size set to: 50

2016/12/13 22:55:56.014395 async.go:72: DBG  create bulk processing worker (interval=1s, bulk size=50)

2016/12/13 22:55:56.014449 beat.go:207: INFO redditbeat start running.

2016/12/13 22:55:56.014459 redditbeat.go:38: INFO redditbeat is running! Hit CTRL-C to stop it.

2016/12/13 22:55:57.370781 client.go:184: DBG  Publish: {

"@timestamp": "2016-12-13T22:54:47.252Z",

"beat": {

"hostname": "LSNM33795267A",

"name": "LSNM33795267A",

"version": "6.0.0-alpha1"

},

"counter": 1,

"type": "redditbeat"

}

第 2 段(可获 0.73 积分)

R e; 7个月前 

关于命令行参数:-e记录到标准err,而-d“*”启用所有调试选择器。有关参数的完整列表,请键入./redditbeat --help。编码Go代码位于.go文件中(令人惊讶...)在$ GOPATH / src文件夹的项目子文件夹中。配置类型第一个有趣的文件是config / config.go,它定义了一个结构来声明Beat的可能参数。至于前面的Logstash插件,让我们添加一个subreddit参数,并设置它的默认值:type Config struct {

Period time.Duration `config:"period"`

Subreddit string `config:"subreddit"`

}

var DefaultConfig = Config {

Period: 15 * time.Second,

Subreddit: "elastic",

}

第 3 段(可获 0.89 积分)

R e; 7个月前 

Beater TypeBeat本身的代码在beater / redditbean.go中找到。默认模板为Beat和三个函数创建一个struct:Beat构造函数—用来读取配置: func New(b *beat.Beat, cfg *common.Config) (beat.Beater, error) { ... } 

Run 函数- 需要覆盖Beat的主要功能: func (bt *Redditbeat) Run(b *beat.Beat) error { ... } 

Stop 函数管理优雅关闭: func (bt *Redditbeat) Stop() { ... } 

Note 1:在Go中没有明确的接口实现。实现了 interface 中的所有方法,即创建一个隐式继承关系. 出于写文档的目的,这是 Beater 接口:type Beater interface {

Run(b *Beat) error

Stop()

}

第 4 段(可获 0.93 积分)

R e; 7个月前 

因此,由于Beat结构实现了Run和Stop,它是一个Beater。Note 2: 在Go中没有类的概念,所以方法不能在一个具体类型上声明。但是,它存在扩展函数的概念:可以添加行为到一个类型(在单个包中)的函数。它需要声明receiver 类型:这是在fun关键字和函数名之间完成的 - 这里是指Redditbeat类型(或者更准确地说,是一个指向Redditbeat类型的指针,但是这里有一个隐式转换)。构造函数和Stop函数可以保持不变,无论什么特性都应该在Run函数中。在这种情况下,功能是调用Reddit REST API并为每个Reddit帖子发送一条消息。

第 5 段(可获 1.59 积分)

R e; 7个月前 

最终代码如下所示:func (bt *Redditbeat) Run(b *beat.Beat) error {

bt.client = b.Publisher.Connect()

ticker := time.NewTicker(bt.config.Period)

reddit := "" + bt.config.Subreddit + "/.json"

client := http.Client {}

for {

select {

case -bt.done:

return nil

case -ticker.C:

}

req, reqErr := http.NewRequest("GET", reddit, nil)

req.Header.Add("User-Agent", "Some existing header to bypass 429 HTTP")

if (reqErr != nil) {

panic(reqErr)

}

resp, getErr := client.Do(req)

if (getErr != nil) {

panic(getErr)

}

body, readErr := ioutil.ReadAll(resp.Body)

defer resp.Body.Close()

if (readErr != nil) {

panic(readErr)

}

trimmedBody := body[len(prefix):len(body) - len(suffix)]

messages := strings.Split(string(trimmedBody), separator)

for i := 0; i  len(messages); i ++ {

event := common.MapStr{

"@timestamp": common.Time(time.Now()),

"type":       b.Name,

"message":    "{" + messages[i] + "}",

}

bt.client.PublishEvent(event)

}

}

}

第 6 段(可获 0.09 积分)

R e; 7个月前 

这里是对最重要的几部分的解释:line 4: 通过连接字符串创建Reddit REST URL,包括配置Subreddit参数。记住,它的默认值已在config.go文件中定义。line 5: 引用httpClient类型line 12: 创建新的HTTP请求。注意Go允许多个返回值。line 13: 如果没有设置标准请求头,Reddit的API将返回429状态码。line 14: Go标准错误不通过异常处理,而是随着常规返回值返回。根据Golang wiki:指示调用者的错误条件,应通过返回错误值来完成line 15: panic() 函数类似于在Java中抛出异常, 被处理时推到栈顶。 有关详细信息,请查看相关文档。line 17: 执行HTTP请求。line 21: 将响应主体读入字节数组。line 22: 关闭主体流。注意defer关键字:defer语句延迟函数的执行,直到环绕的函数返回。line 26: 创建整个响应主体字节数组的切片 - 对数组的一部分的引用。实质上,它删除了前缀和后缀以保持相关的JSON值。之后将字节数组解析成JSON。line 27: 分割切片以单独获取每个JSON片段。line 29: 将消息创建为简单的字典结构。line 34: 发送。

第 7 段(可获 3.11 积分)

R e; 7个月前 

配置, 构建, 运行默认配置参数可以在项目根目录下的redditbeat.yml文件中找到。请注意,redditbeat.full.yml中列出了其他常见的Beat参数,以及相关注释。关于Beats的一个有趣的事情是,他们的消息可以直接发送到Elasticsearch或Logstash进行进一步处理。这在上述配置文件中配置。redditbeat:

period: 10s

output.elasticsearch:

hosts: ["localhost:9200"]

output.logstash:

hosts: ["localhost:5044"]

enabled: true

第 8 段(可获 0.78 积分)

R e; 7个月前 

此配置片段将每10秒循环运行Run方法,并将消息发送到在localhost上运行的Logstash实例在端口5044上。这可以在运行Beat时被覆盖(见下文)。注意:为了使Logstash接受来自Beats的消息,必须安装Logstash Beat插件,并且必须为Beats配置Logstash的input:input {

beats {

port = 5044

}

}

要构建项目,请在项目的根目录中键入make。它将创建一个可以运行的可执行文件。./redditbeat -e -E redditbeat.subreddit=java

-E参数可以覆盖在的redditbeat.yml配置文件中找到的参数(见上文)。在这里,它设置subreddit读为“java”,而不是默认的“elastic”。

第 9 段(可获 1.3 积分)

R e; 7个月前 

输出如下所示:2016/12/17 14:51:19.748329 client.go:184: DBG  Publish: {

"@timestamp": "2016-12-17T14:51:19.748Z",

"beat": {

"hostname": "LSNM33795267A",

"name": "LSNM33795267A",

"version": "6.0.0-alpha1"

},

"message": "{

\"kind\": \"t3\", \"data\": {

\"contest_mode\": false, \"banned_by\": null, 

\"domain\": \"blogs.oracle.com\", \"subreddit\": \"java\", \"selftext_html\": null, 

\"selftext\": \"\", \"likes\": null, \"suggested_sort\": null, \"user_reports\": [], 

\"secure_media\": null, \"saved\": false, \"id\": \"5ipzgq\", \"gilded\": 0, 

\"secure_media_embed\": {}, \"clicked\": false, \"report_reasons\": null, 

\"author\": \"pushthestack\", \"media\": null, \"name\": \"t3_5ipzgq\", \"score\": 11, 

\"approved_by\": null, \"over_18\": false, \"removal_reason\": null, \"hidden\": false, 

\"thumbnail\": \"\", \"subreddit_id\": \"t5_2qhd7\", \"edited\": false, 

\"link_flair_css_class\": null, \"author_flair_css_class\": null, \"downs\": 0, 

\"mod_reports\": [], \"archived\": false, \"media_embed\": {}, \"is_self\": false, 

\"hide_score\": false, \"spoiler\": false, 

\"permalink\": \"/r/java/comments/5ipzgq/jdk_9_will_no_longer_bundle_javadb/\", 

\"locked\": false, \"stickied\": false, \"created\": 1481943248.0, 

\"url\": \"\", 

\"author_flair_text\": null, \"quarantine\": false, 

\"title\": \"JDK 9 will no longer bundle JavaDB\", \"created_utc\": 1481914448.0, 

\"link_flair_text\": null, \"distinguished\": null, \"num_comments\": 4, 

\"visited\": false, \"num_reports\": null, \"ups\": 11

}

}",

"type": "redditbeat"

}

embed 相对路径的问题

用绝对路径当然没问题,用相对路径一定要正确。不知你这个网页文件在哪个文件夹下面,请补充问题。

怎样用一串代码画出《清明上河图》?

话不多说,上代码:

DIVEMBED style="WIDTH: 550px; HEIGHT: 400px"

pluginspage=

src=

type=application/x-shockwave-flash WMODE="transparent" QUALITY="high"/EMBED/DIV

一、操作步骤

1、在桌面新建一个TXT文档,取名“清明上河图”。

2、打开清明上河图.txt文档,把上述代码复制到文本文件内,并保存退出。

3、保存完毕后,左键单击文本文件(选中),按F2键“重命名”修改文件后缀名。将“清明上河图.txt”文件改为“清明上河图.html”文件。

4、打开浏览器(如360浏览器、谷歌浏览器、IE浏览器等),将文件拖拽到浏览器内即可看到效果。

扩展资料

一、代码原理

1、EMBED标签

代码的关键标签在于EMBED,它的作用是标签定义嵌入的内容,比如插件。embed 标签是 HTML 5 中的新标签。

因此使用此标签就可以将远程服务器上的数据嵌入到本地html页面中,这也是为什么一段普通代码可以画出清明上河图的原因。

2、EMBED标签中的SRC属性

SRC属性是标签中最为重要的属性,它的作用是获取嵌入内容的 URL。

同理,可以在上述代码中找到这个SRC属性,并且在后面可以看到一个以HTTP开头的地址,这个地址就是页面中显示的清明上河图地址。

embed的使用

embed src="imageshow.swf" width="780" height="250" quality="high" pluginspage="" type="application/x-shockwave-flash" wmode="transparent"/embed

你看看

html标签之Object和EMBED标签(2)

功能描述:设置“OBJECT”、“EMBED”和“IMG”标签中的“ALIGN”属性,决定影片在浏览器窗口中的位置。

省略时使影片置于浏览器窗口的中央,如果浏览器窗口尺寸比影片所占区域尺寸小,将调整浏览器窗口尺寸,使影片正常显示。

“L”值使影片与浏览器窗口的左边对齐,如果浏览器窗口不足以容纳影片,将调整窗口的上下边和右边。

“R”值使影片与浏览器窗口的右边对齐,如果浏览器窗口不足以容纳影片,将调整窗口的上下边和左边。

“T” 值使影片与浏览器窗口的顶边对齐,如果浏览器窗口不足以容纳影片,将调整窗口的左右边和底边。

“B” 值使影片与浏览器窗口的底边对齐,如果浏览器窗口不足以容纳影片,将调整窗口的左右边和顶边。

SALIGN(可选)

取值:L 、R 、T、 B、TL、TR、BL、BR.

对应的模版变量:$SA

功能描述:用于确定经缩放的影片在一指定宽高尺寸的区域中如何放置。各种取值的含义可参见上一项。

BASE(可选)

取值:基准路径或URL。

功能描述:用于指定影片中所用到的相对路径的基准位置。

MENU(可选)

取值:true、false.

对应的`模版变量:$ME.

功能描述:用于指定在浏览器中当对影片所占区域右击鼠标(对Windows)或按住“command”键单击鼠标(对Macintosh)时出现的快捷菜单的类型。

“True”值将显示整个菜单,允许被演示者对放映过程进行多种控制。

“False”值将显示只包含“About Flash”菜单项的菜单。

该属性被省略时将按默认值“true”执行。

WMODE(可选)

取值:Window、Opaque、Transparent.

对应的模版变量:$WM.

功能描述:该参数仅在有Flash Active X空间的Windows系统中适用。

“Window”值使得影片在网页中指定的位置播放,这也是几种选项中播放速度最快的一种。

“Opaque Windowless”值将挡住网页上影片后面的内容。

“Transparent”值使得网页上影片中的透明部分显示网页的内容与背景,有可能降低动画速度。

该属性被省略时将按默认值“Window”执行,只能用在Object标记中。

一、介绍:

我 们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标签。也就是OBJECT和EMBED标签。OBJECT标签是用于 windows平台的IE浏览器的,而EMBED是用于windows和Macintosh平台下的Netscape Navigator浏览器以及Macintosh平台下的IE浏览器。windows平台的IE利用Activex控件来播放flash而其它的浏览器则 使用Netscape插件技术来播放flash。

下面是简单的网页中插入flash的代码示例:

复制代码 代码如下:

OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"

codebase=""

WIDTH="550" HEIGHT="400" id="myMovieName"

PARAM NAME=movie VALUE="myFlashMovie.swf"

PARAM NAME=quality VALUE=high

PARAM NAME=bgcolor VALUE=#FFFFFF

EMBED src=""/support/flash/ts/documents/myFlashMovie.swf"" quality=high bgcolor=#FFFFFF WIDTH="550" HEIGHT="400"

NAME="myMovieName" ALIGN="" TYPE="application/x-shockwave-flash"

PLUGINSPAGE=""

/EMBED

/OBJECT

二、为什么要使用以上全部的标签?能省略某些标签不?

OBJECT 标签是用于windows IE3.0及以后浏览器或者其它支持Activex控件的浏览器。“classid”和“codebase”属性必须要精确地按上例所示的写法写,它们告 诉浏览器自动下载flash player的地址。如果你没有安装过flash player 那么IE3.0以后的浏览器会跳出一个提示框访问是否要自动安装flash player。当然,如果你不想让那些没有安装flash player的用户自动下载播放器,或许你可以省略掉这些代码。

EMBED标签是用于Netscape Navigator2.0及以后的浏览器或其它支持Netscape插件的浏览器。“pluginspage”属性告诉浏览器下载flash player的地址,如果还没有安装flash player的话,用户安装完后需要重启浏览器才能正常使用。

为了确保大多数浏览器能 正常显示flash,你需要把EMBED标签嵌套放在OBJECT标签内,就如上面代码例子一样。支持Activex控件的浏览器将会忽略OBJECT标 签内的EMBED标签。Netscape和使用插件的IE浏览器将只读取EMBED标签而不会识别OBJECT标签。也就是说,如果你省略了EMBED标 签,那firefox就不能识别你的flash了(不过纳闷的是,省略了object只写embed,IE也能正常显示flash,呵呵,具体的再仔细看 看了)。

下面列出了用于发布影片的OBJECT和EMBED标签的必要以及可选属性。

一、必需属性:

·CLASSID-设置浏览器的Activex控件,仅用于OBJECT标签。

·CODEBASE-设置flash Activex控件的位置,因而如果浏览器如果没有安装的话,可以自动下载安装。仅用于OBJECT标签。

·WIDTH-以百分比或象素指定flash影片的宽度。

·HEIGHT-以百分比或象素指定flash影片的高度。

·SRC-指定影片的下载地址。仅用于EMBED标签。

·PLUGINSPAGE-设置flash 插件的位置,因而如果浏览器如果没有安装的话,可以自动下载安装。仅用于EMBED标签。

·MOVIE-指定影片的下载地址。仅用于OBJECT标签。

二、可选属性及可用的值:

·ID-设定变量名,用于脚本代码的引用。仅用于OBJECT。

·NAME -设定变量名,用于脚本代码(如javascript)的引用。仅用于EMBED。

·SWLIVECONNECT - (true或false)指定当flash player第一次下载时,是否启用java。如果些属性省略,默认值为false。你果你在相同页同使用javascript和flash,java必须使用FSCommand来工作。

·PLAY -(true或false)指定flash影片是否在下载完成后就自动播放,如果省略此属性,则默认为true。

·LOOP - (true或false)指定影片播放完最后一帧后是停止还是继续循环播放,如果省略此属性,则默认为true。

·MENU - (true或false)

·True 显示全部的菜单,允许用户放大,缩小等控制影片播放等操作。

·False 显示只包含设置选项和关于flash的菜单。

·QUALITY - (low, high, autolow, autohigh, best )

·Low 速度优于美观,而且不应用反锯齿。

·Autolow 刚开始着重于速度,但当需要时随时提升美观。

·Autohigh 同时着重播放速度和美观,但需要时则牺牲美观来保证播放速度。

·Medium 应用一些反锯齿而不平滑位图。它质量高于low设置而低于high设置。

·High 美观优于播放速度,而且一直应用反锯齿。如果影片不包含动画,位图会被平滑化;而如果影片包含动画,位图将不变平滑。

·Best 提供最好的显示质量而不考虑播放速度。所有输出都应用反锯齿及所有位图都被平滑化。

·SCALE - (showall, noborder, exactfit)

·Default(Show all)影片在指定的区域内显示,但保持原始的比例。影片两侧将会出现边框。

·No Boder 收缩影片以适合指定的区域,保持影片不失真,但部分影片将可能将裁切。然而保持影片的原始比例。

·Exact Fit 使整个影片在指定的区域内显示,影片有可能变形失真,而且不保持原始的比例。

·ALIGN - (l, t, r, b)

·默认为居中,当浏览器窗口小于影片时,边缘会被裁切。

·Left,Right,Top,Bottom按照相应的设置沿浏览器的边缘对齐。如果需要,另外三边将被裁切。

·SALIGN - (l, t, r, b, tl, tr, bl, br)

·L,R,T,B

·TL,TR

·BL,BR

·WMODE- (window, opaque, transparent) 设置flash影片的window mode属性,指定flash在浏览器中的透明,层叠及位置。

·Window 影片在浏览器中自己的矩形窗口内播放。

·Opaque 影片隐藏了所有在它后面的内容。


名称栏目:go语言embed教程 go 116 embed
当前路径:http://jkwzsj.com/article/hphpej.html

其他资讯