方法
作為一家“創(chuàng)意+整合+營(yíng)銷”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們?cè)跇I(yè)內(nèi)良好的客戶口碑。成都創(chuàng)新互聯(lián)提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、創(chuàng)意表現(xiàn)、網(wǎng)頁(yè)制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營(yíng)銷運(yùn)營(yíng)等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營(yíng)模式與有效的網(wǎng)絡(luò)營(yíng)銷方法,創(chuàng)造更大的價(jià)值。
301 Redirect實(shí)現(xiàn)網(wǎng)頁(yè)重定向
IIS服務(wù)器實(shí)現(xiàn)301重定向
* 打開internet信息服務(wù)管理器,在欲重定向的網(wǎng)頁(yè)或目錄上按右鍵
* 選擇“重定向到URL”
* 在“重定向到”輸入框中輸入要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁(yè)的URL地址
* 選中“資源的永久重定向”(切記)
* 最后點(diǎn)擊“應(yīng)用”
Apache服務(wù)器實(shí)現(xiàn)301重定向
相比較來(lái)說(shuō),Apache實(shí)現(xiàn)起來(lái)要比IIS簡(jiǎn)單多了。在Apache中,有個(gè)很重要的文件.htaccess,通過(guò)對(duì)它的設(shè)置,可以實(shí)現(xiàn)很多強(qiáng)大的功能,301重定向只是其中之一。
Redirect permanent / (將目錄下內(nèi)容重定向到 )
redirect permanent /index.php (將網(wǎng)頁(yè)index.php重定向到)
通過(guò)合理地配置重定向參數(shù)中的正則表達(dá)式,可以實(shí)現(xiàn)更復(fù)雜的匹配。有興趣的朋友可參考本站Apache手冊(cè)。
PHP下的301重定向
?php
Header( "HTTP/1.1 301 Moved Permanently" ) ;
Header( "Location: " );
?
ASP下的301重定向
%@ Language=VBScript %
%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location",""
%
ASP .NET下的301重定向
script runat="server"
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader ("Location","");
}
/script
ColdFusion下的301重定向
.cfheader statuscode="301" statustext="Moved permanently"
.cfheader name="Location" value=""
舊域名重定向到新域名
創(chuàng)建一個(gè).htaccess文件,并將下面提供的代碼寫入文件內(nèi),它可以確保舊域名所有的目錄或者網(wǎng)頁(yè)正確的跳轉(zhuǎn)到新域名內(nèi)。
記住.htaccess文件一定要放在舊網(wǎng)站的根目錄下,并且新網(wǎng)站要和舊網(wǎng)站保持相同的目錄結(jié)構(gòu)及網(wǎng)頁(yè)文件
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) [R=301,L]
請(qǐng)將上面的修改成你想要跳轉(zhuǎn)到的域名。
此外,這里建議大家歸總舊網(wǎng)站的外部鏈接,并聯(lián)系相應(yīng)的站點(diǎn)修改導(dǎo)入鏈鏈的URL,以指向新站點(diǎn)。
域名301重定向到www的二級(jí)域名
在以前的文章中我反復(fù)提及過(guò):是domain.com域下的一個(gè)二級(jí)域名,并對(duì)二級(jí)域名和一級(jí)目錄之間如何選擇以及網(wǎng)站結(jié)構(gòu)優(yōu)化做了一個(gè)詳細(xì)的分析,有興趣的可以讀一下兩篇文章,網(wǎng)站結(jié)構(gòu)優(yōu)化是SEO中最重要。
OK,繼續(xù)域301跳轉(zhuǎn)到www二級(jí)域的實(shí)現(xiàn)方式:
創(chuàng)建一個(gè).htaccess文件,并將下面提供的代碼寫入文件內(nèi),它可以確保所有來(lái)自對(duì)domain.com的請(qǐng)求都轉(zhuǎn)向到對(duì)進(jìn)行請(qǐng)求。
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ [r=301,nc]
請(qǐng)將上面的domain.com和修改成你想要跳轉(zhuǎn)到的域名。
注意:.htaccess文件只有在使用安裝有Mod Rewrite模塊的Apache作為WEB服務(wù)器的Linux主機(jī)上才能起作用
管道和重定向輸入的數(shù)據(jù)都是通過(guò)標(biāo)準(zhǔn)輸入傳入程序的,?os.Stdin?即為標(biāo)準(zhǔn)輸入。
可以通過(guò)?golang.org/x/crypto/ssh/terminal?的?terminal.IsTerminal(0)?判斷是否是管道和重定向輸入,為什么是?0?:因?yàn)闃?biāo)準(zhǔn)輸入的文件描述符是?0
為?true?時(shí)表示是交互式環(huán)境
為?false?時(shí)是我們要的場(chǎng)景
首先需要安裝?golang.org/x/crypto/ssh/terminal?這個(gè)包(安裝時(shí)需要 VPN 的輔助):
go get golang.org/x/crypto/ssh/terminal
也可以使用?github.com/mattn/go-isatty?這個(gè)包:
!isatty.IsTerminal(os.Stdin.Fd())
下面是示例代碼:
package mainimport (
"flag"
"fmt"
"io/ioutil"
"os"
"strings"
"golang.org/x/crypto/ssh/terminal")func main() {
flag.Parse()
data := flag.Args()
if !terminal.IsTerminal(0) {
? ? ?b, err := ioutil.ReadAll(os.Stdin)
? ? ?if err == nil {
? ? ? ? ? ? ?data = append(data, string(b))
? ? ?}
}
fmt.Println(strings.Join(data, " "))}
測(cè)試效果:
$ echo "hello" hello.txt
$ go run main.go hello world ? ? ? # 參數(shù)輸入hello world
$ cat hello.txt | go run main.go ? # 管道輸入hello
$ go run main.go hello.txt ? ? ? # 重定向輸入hello
$
在Client的字段中,有一個(gè) CheckRedirect ,此字段就是用來(lái)控制重定向的函數(shù),如果沒(méi)有定義此字段的話,將會(huì)使用默認(rèn)的 defaultCheckRedirect 方法。
默認(rèn)的轉(zhuǎn)發(fā)策略是最多轉(zhuǎn)發(fā)10次。
在轉(zhuǎn)發(fā)的過(guò)程中,某一些包含安全信息的Header,比如 Authorization 、 WWW-Authenticate 、 Cookie 等,如果轉(zhuǎn)發(fā)是跨域的,那么這些Header不會(huì)復(fù)制到新的請(qǐng)求中。
http的重定向判斷會(huì)默認(rèn)處理以下狀態(tài)碼的請(qǐng)求:
301 (Moved Permanently)
302 (Found)
303 (See Other)
307 (Temporary Redirect)
308 (Permanent Redirect)
301、302和303請(qǐng)求將會(huì)改用Get訪問(wèn)新的請(qǐng)求,而307和308會(huì)使用原有的請(qǐng)求方式。
那么,我們?nèi)绾稳タ刂浦囟ㄏ虻拇螖?shù),甚至是禁止重定向呢?這里其實(shí)就需要我們自己去實(shí)現(xiàn)一個(gè)CheckRedirect函數(shù)了,首先我們來(lái)看看默認(rèn)的defaultCheckRedirect方法:
第一個(gè)參數(shù)req是即將轉(zhuǎn)發(fā)的request,第二個(gè)參數(shù) via是已經(jīng)請(qǐng)求過(guò)的requests。可以看到其中的邏輯是判斷請(qǐng)求過(guò)的request數(shù)量,大于等于10的時(shí)候返回一個(gè)error,這也說(shuō)明默認(rèn)的最大重定向次數(shù)為10次,當(dāng)此函數(shù)返回error時(shí),即是重定向結(jié)束的時(shí)候。
所以如果需要設(shè)置重定向次數(shù),那么復(fù)制一份這個(gè)函數(shù),修改函數(shù)名字和其中if判斷的數(shù)字,然后在生成Client時(shí)設(shè)定到Client即可:
或者:
禁止重定向則可以把判斷數(shù)字修改為0。最好相應(yīng)地修改errors中提示的信息。
Go語(yǔ)言常量和C語(yǔ)言差不多
Go語(yǔ)言定義常量const不能少,數(shù)據(jù)類型可以不寫
Go語(yǔ)言定義常量不能用:=
Go語(yǔ)言定義常量沒(méi)有賦初值,那么值就和上一行的常量的值相等
Go語(yǔ)句中沒(méi)有明確枚舉的固定寫法, 但是在企業(yè)開發(fā)中一般都會(huì)常量組的形式來(lái)表示枚舉
const(
枚舉元素 = 值
枚舉元素 = 值
)
用法:
const(
num = itoa
num2 = itoa
)
itoa從0開始,遇到一行賦值就+1
例如:
一般來(lái)說(shuō),進(jìn)程的操作使用的是一些系統(tǒng)的命令,所以go內(nèi)部使用os包,進(jìn)行一些運(yùn)行系統(tǒng)命令的操作
os 包及其子包 os/exec 提供了創(chuàng)建進(jìn)程的方法。
一般的,應(yīng)該優(yōu)先使用 os/exec 包。因?yàn)?os/exec 包依賴 os 包中關(guān)鍵創(chuàng)建進(jìn)程的 API,為了便于理解,我們先探討 os 包中和進(jìn)程相關(guān)的部分。
Unix :fork創(chuàng)建一個(gè)進(jìn)程,(及其一些變種,如 vfork、clone)。
Go:Linux 下創(chuàng)建進(jìn)程使用的系統(tǒng)調(diào)用是 clone。
允許一進(jìn)程(父進(jìn)程)創(chuàng)建一新進(jìn)程(子進(jìn)程)。具體做法是,新的子進(jìn)程幾近于對(duì)父進(jìn)程的翻版:子進(jìn)程獲得父進(jìn)程的棧、數(shù)據(jù)段、堆和執(zhí)行文本段的拷貝??蓪⒋艘暈榘迅高M(jìn)程一分為二。
終止一進(jìn)程,將進(jìn)程占用的所有資源(內(nèi)存、文件描述符等)歸還內(nèi)核,交其進(jìn)行再次分配。參數(shù) status 為一整型變量,表示進(jìn)程的退出狀態(tài)。父進(jìn)程可使用系統(tǒng)調(diào)用 wait() 來(lái)獲取該狀態(tài)。
目的有二:其一,如果子進(jìn)程尚未調(diào)用 exit() 終止,那么 wait 會(huì)掛起父進(jìn)程直至子進(jìn)程終止;其二,子進(jìn)程的終止?fàn)顟B(tài)通過(guò) wait 的 status 參數(shù)返回。
加載一個(gè)新程序(路徑名為 pathname,參數(shù)列表為 argv,環(huán)境變量列表為 envp)到當(dāng)前進(jìn)程的內(nèi)存。這將丟棄現(xiàn)存的程序文本段,并為新程序重新創(chuàng)建棧、數(shù)據(jù)段以及堆。通常將這一動(dòng)作稱為執(zhí)行一個(gè)新程序。
沒(méi)有直接提供 fork 系統(tǒng)調(diào)用的封裝,而是將 fork 和 execve 合二為一,提供了 syscall.ForkExec。如果想只調(diào)用 fork,得自己通過(guò) syscall.Syscall(syscall.SYS_FORK, 0, 0, 0) 實(shí)現(xiàn)。
os.Process 存儲(chǔ)了通過(guò) StartProcess 創(chuàng)建的進(jìn)程的相關(guān)信息。
一般通過(guò) StartProcess 創(chuàng)建 Process 的實(shí)例,函數(shù)聲明如下:
它使用提供的程序名、命令行參數(shù)、屬性開始一個(gè)新進(jìn)程。StartProcess 是一個(gè)低級(jí)別的接口。os/exec 包提供了高級(jí)別的接口,一般應(yīng)該盡量使用 os/exec 包。如果出錯(cuò),錯(cuò)誤的類型會(huì)是 *PathError。
屬性定義如下:
FindProcess 可以通過(guò) pid 查找一個(gè)運(yùn)行中的進(jìn)程。該函數(shù)返回的 Process 對(duì)象可以用于獲取關(guān)于底層操作系統(tǒng)進(jìn)程的信息。在 Unix 系統(tǒng)中,此函數(shù)總是成功,即使 pid 對(duì)應(yīng)的進(jìn)程不存在。
Process 提供了四個(gè)方法:Kill、Signal、Wait 和 Release。其中 Kill 和 Signal 跟信號(hào)相關(guān),而 Kill 實(shí)際上就是調(diào)用 Signal,發(fā)送了 SIGKILL 信號(hào),強(qiáng)制進(jìn)程退出,關(guān)于信號(hào),后續(xù)章節(jié)會(huì)專門講解。
Release 方法用于釋放 Process 對(duì)象相關(guān)的資源,以便將來(lái)可以被再使用。該方法只有在確定沒(méi)有調(diào)用 Wait 時(shí)才需要調(diào)用。Unix 中,該方法的內(nèi)部實(shí)現(xiàn)只是將 Process 的 pid 置為 -1。
通過(guò) os 包可以做到運(yùn)行外部命令,如前面的例子。不過(guò),Go 標(biāo)準(zhǔn)庫(kù)為我們封裝了更好用的包: os/exec,運(yùn)行外部命令,應(yīng)該優(yōu)先使用它,它包裝了 os.StartProcess 函數(shù)以便更容易的重定向標(biāo)準(zhǔn)輸入和輸出,使用管道連接 I/O,以及作其它的一些調(diào)整。
exec.LookPath 函數(shù)在 PATH 指定目錄中搜索可執(zhí)行程序,如 file 中有 /,則只在當(dāng)前目錄搜索。該函數(shù)返回完整路徑或相對(duì)于當(dāng)前路徑的一個(gè)相對(duì)路徑。
func LookPath(file string) (string, error)
如果在 PATH 中沒(méi)有找到可執(zhí)行文件,則返回 exec.ErrNotFound。
Cmd 結(jié)構(gòu)代表一個(gè)正在準(zhǔn)備或者在執(zhí)行中的外部命令,調(diào)用了 Run、Output 或 CombinedOutput 后,Cmd 實(shí)例不能被重用。
一般的,應(yīng)該通過(guò) exec.Command 函數(shù)產(chǎn)生 Cmd 實(shí)例:
用法
得到 * Cmd 實(shí)例后,接下來(lái)一般有兩種寫法:
前面講到,通過(guò) Cmd 實(shí)例后,有兩種方式運(yùn)行命令。有時(shí)候,我們不只是簡(jiǎn)單的運(yùn)行命令,還希望能控制命令的輸入和輸出。通過(guò)上面的 API 介紹,控制輸入輸出有幾種方法:
參考資料:
作為一個(gè)測(cè)試,作為一個(gè)測(cè)試開發(fā), 全棧化+管理 是我們未來(lái)的發(fā)展方向。已經(jīng)掌握了Java、Python、HTML的你,是不是也想了解下最近異?;鸨腉o語(yǔ)言呢?來(lái)吧,讓我們一起了解下。
Go 是一個(gè)開源的編程語(yǔ)言 ,它能讓構(gòu)造簡(jiǎn)單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發(fā),后來(lái)還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時(shí)候發(fā)布了Go 1穩(wěn)定版本。現(xiàn)在Go的開發(fā)已經(jīng)是完全開放的,并且擁有一個(gè)活躍的社區(qū)。這三個(gè)人都是計(jì)算機(jī)界的大神,有的參與了C語(yǔ)言的編寫,有的還是數(shù)學(xué)大神,有的還獲得了計(jì)算機(jī)最高榮譽(yù)-圖靈獎(jiǎng)。
接下來(lái)說(shuō)說(shuō) Go語(yǔ)言的特色 :
簡(jiǎn)潔、快速、安全
并行、有趣、開源
內(nèi)存管理、數(shù)組安全、編譯迅速
Go語(yǔ)言的用途 :
Go 語(yǔ)言被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語(yǔ)言。
對(duì)于高性能分布式系統(tǒng)領(lǐng)域而言,Go 語(yǔ)言無(wú)疑比大多數(shù)其它語(yǔ)言有著更高的開發(fā)效率。它提供了海量并行的支持,這對(duì)于 游戲 服務(wù)端的開發(fā)而言是再好不過(guò)了。
Go語(yǔ)言的環(huán)境安裝:
建議直接打開 官方地址因?yàn)閴Φ脑虼虿婚_
因?yàn)槲矣玫氖莣indows系統(tǒng),這里主要講下Windows系統(tǒng)上使用Go語(yǔ)言來(lái)編程。
Windows 下可以使用 .msi 后綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來(lái)安裝。
默認(rèn)情況下 .msi 文件會(huì)安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環(huán)境變量中。添加后你需要重啟命令窗口才能生效。個(gè)人建議還是安裝到 Program Files文件夾中。
使用什么開發(fā)工具來(lái)對(duì)Go語(yǔ)言進(jìn)行編寫:
個(gè)人建議用VS code, 也可以用Sublime Text來(lái)編輯。如果你之前看了我講的HTML語(yǔ)言的學(xué)習(xí),肯定已經(jīng)下載了VS code. 那么這時(shí)你需要在VS code中下載Go語(yǔ)言的擴(kuò)展插件。
這里有一個(gè)巨大的坑,就是在下載Go的插件和依賴包時(shí),會(huì)提示一些包沒(méi)有。主要是因?yàn)橄螺d的依賴包部分被墻了,只能想別的辦法去下載。
建議參考網(wǎng)頁(yè):
解決vscode中g(shù)olang插件安裝失敗方法
在學(xué)習(xí)go的過(guò)程中,使用的是vscode,但是一直提示安裝相關(guān)插件失敗,然后上網(wǎng)查方法,基本上是叫你建立golang.org目錄什么的,結(jié)果全是錯(cuò)的,而且都是抄襲,很煩。無(wú)意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然后找到了解決方法,這里向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對(duì)你有所幫助,也可以點(diǎn)開原博主鏈接參考:
Go有一個(gè)全球模塊代理,設(shè)置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個(gè)藍(lán)色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然后輸入powershell,搜索出來(lái)就可以了。
$env:GO111MODULE=“on”
$env:GOPROXY=“”
go env -w GOPROXY=
go env -w GOPRIVATE=*.corp.example.com
然后我們打開VsCode界面,下面會(huì)提示安裝插件,我們選擇Install ALL,就會(huì)安裝成功
當(dāng)你在運(yùn)行Go語(yǔ)言程序時(shí),提示所有的插件包都已經(jīng)安裝成功了時(shí),就可以正常使用了,要不然一堆報(bào)錯(cuò)會(huì)讓你非常心煩。
好了,今天先到這里,晚安、下班~
分享文章:go語(yǔ)言重定向輸入,go重寫方法
文章地址:http://aaarwkj.com/article26/hchecg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、電子商務(wù)、建站公司、動(dòng)態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)