1. golang web開發頁面傳值怎麼傳
如果你是指兩個頁面之間的傳值,那麼可以這么做:
簡單的話,可以通過URL傳值,比如 http://example.com?name=gem
可以通過讀取url的參數name獲得gem。
也可以通過session,cookie等方法,這兩種方法就有一些限制,比如換個瀏覽器,session和cookie就不一樣了,那麼你傳的值就不存在了。
所以第一種會比較通用。
如果是傳值給模板(一般是模板引擎之類的,比如html/template),這些教程很多,搜一下比較快速解決
2. golang go get報錯了 我git已經裝了的 錯誤信息在下面
你的git安裝在哪裡的?把它的bin目錄添加到PATH目錄里就好了。比如
setPATH=%PATH%;D:ProgramFiles(x86)Gitin
3. Golang 官方網站被封閉了怎麼辦
不可以嗎?現在應該可以訪問的吧,如果不可以,你可以去看go語言中文網,這個裡面可以看到官方文檔,也可以下載
4. 使用golang搭建的網站怎麼訪問
server這邊調用ListenAndServe方法監聽埠,針對不同路徑定義好相應的處理函數。
客戶端直接訪問http://hostname:<port>/<path>就可以訪問了。
5. 如何設置golang 系統gopath
計算機-屬性-高級系統設置,在高級選項卡選擇環境變數,然後在下邊的path中加上」;C:\MinGW\bin 「,注意是引號裡面的,包括分號。C:\MinGW\bin 是要添加的路徑。
6. 如何使用golang實現可透傳原請求的header的反向代理
優雅的Golang Web開發框架:Martini
Martini 是一個非常新的 Go 語言的 Web 框架,使用 Go 的 net/http 借口開發,類似 Sinatra 或者 Flask 之類的框架,你可使用自己的 DB 層、會話管理和模板。
特性:
使用非常簡單
無侵入設計
可與其他 Go 的包配合工作
超棒的路徑匹配和路由
模塊化設計,可輕松添加工具
大量很好的處理器和中間件
很棒的開箱即用特性
完全兼容 http.HandlerFunc 介面.
示例代碼:
01 package main
02
03 import "github.com/codegangsta/martini"
04
05 func main() {
06 m := martini.Classic()
07 m.Get("/", func() string {
08 return "Hello world!"
09 })
10 m.Run()
11 }
請求處理器:
查看源碼列印?
1 m.Get("/", func() {
2 println("hello world")
3 })
4
5 m.Get("/", func(res http.ResponseWriter, req *http.Request) { // res and req are injected by Martini
6 res.WriteHeader(200) // HTTP 200
7 })
7. 學習golang,以後做web網站用哪個go版本好
版本看需要,可以用最新版本,也可以用老版本,還要看你用的web框架支持什麼版本的,如果用原生的話,就隨意了
8. golang如何創建目錄
golang中關於目錄與文件名等操作都在os這個包中,具體的創建目錄都是通過Mkdir和MkdirAll這2個函數來實現的,這兩個函數用法一致
os.Mkdir(dirNamestring,permFileMode)
dirName即要創建的目錄(文件夾路徑),可以是絕對路徑,也可以是相對路徑(相對於GOPATH)
perm表示創建的目錄的許可權,如0777(讀r許可權值為4,寫許可權w值為2,執行許可權x值為1)
如:我要在/data/program/goapp這個目錄下創建一個golang這個子目錄,示例如下:
packagemain
import(
"os"
"fmt"
)
funcmain(){
err:=os.Mkdir("/data/program/goapp/golang",0666)
iferr!=nil{
fmt.Println(err)
}
}
註:Mkdir和MkdirAll的區別
Mkdir創建目錄,它的父級目錄必須是存在的,不然創建會失敗
MkdirAll可以遞歸創建目錄,即只要根目錄存在即可,如下:
err:=os.MkdirAll("/data/program/goapp/golang/test/hello",0766)
iferr!=nil{
fmt.Println(err)
}
本例中:/data/program/goapp是已經存在的目錄,而子目錄golang/test/hello是不存在,此時要使用MkdirAll來創建
9. golang排序問題求助
如果是只有這幾個的話 我們可以考慮自定義一個排序類型
func TestSort(t *testing.T) {
data := []string{"三級", "一級", "二級"}
rule := map[string]int{
"一級": 1,
"二級": 2,
"三級": 3,
}
self := &SelfSort{
Rule: rule,
Data: data,
}
sort.Sort(self)
fmt.Println(self.Data)
}
type SelfSort struct {
Rule map[string]int
Data []string
}
func (p SelfSort) Len() int { return len(p.Data) }
func (p SelfSort) Less(i, j int) bool { return p.Rule[p.Data[i]] < p.Rule[p.Data[j]] }
func (p SelfSort) Swap(i, j int) { p.Data[i], p.Data[j] = p.Data[j], p.Data[i] }
如過很多 就是真的要比較中文的話, 就用這種
package mainimport ( "bytes"
"fmt"
"io/ioutil"
"sort"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform")//ByPinyin is customized sort interface to sort string by Chinese PinYintype ByPinyin []stringfunc (s ByPinyin) Len() int { return len(s) }func (s ByPinyin) Swap(i, j int) { s[i], s[j] = s[j], s[i] }func (s ByPinyin) Less(i, j int) bool {
a, _ := UTF82GBK(s[i])
b, _ := UTF82GBK(s[j])
bLen := len(b) for idx, chr := range a { if idx > bLen-1 { return false
} if chr != b[idx] { return chr < b[idx]
}
} return true}//UTF82GBK : transform UTF8 rune into GBK byte arrayfunc UTF82GBK(src string) ([]byte, error) {
GB18030 := simplifiedchinese.All[0] return ioutil.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))
}//GBK2UTF8 : transform GBK byte array into UTF8 stringfunc GBK2UTF8(src []byte) (string, error) {
GB18030 := simplifiedchinese.All[0]
bytes, err := ioutil.ReadAll(transform.NewReader(bytes.NewReader(src), GB18030.NewDecoder())) return string(bytes), err
}func main() {
b := []string{"哈", "呼", "嚯", "ha", ","}
sort.Strings(b) //output: [, ha 呼 哈 嚯]
fmt.Println("Default sort: ", b)
sort.Sort(ByPinyin(b)) //output: [, ha 哈 呼 嚯]
fmt.Println("By Pinyin sort: ", b)
}
from網頁鏈接
10. golang怎麼返回結構體
用golang解析二進制協議時,其實沒必要管結構體的欄位的對齊規則,何況語言規范也沒有規定如何對齊,也就是沒有規則。用encoding/binary.Read函數直接讀入struct里就行,struct就像c那樣寫
type Data struct {
Size, MsgType uint16
Sequence uint32
// ...
}
golang編譯器加不加padding,Read都能正常工作,runtime知道Data的布局的,不像C直接做cast所以要知道怎樣對齊。
用unsafe.Alignof可以知道每個field的對齊長度,但沒必要用到。
package main
/*
#include <stdint.h>
#pragma pack(push, 1)
typedef struct {
uint16_t size;
uint16_t msgtype;
uint32_t sequnce;
uint8_t data1;
uint32_t data2;
uint16_t data3;
} mydata;
#pragma pack(pop)
mydata foo = {
1, 2, 3, 4, 5, 6,
};
int size() {
return sizeof(mydata);
}
*/
import "C"
import (
"bytes"
"encoding/binary"
"fmt"
"log"
"unsafe"
)
func main() {
bs := C.GoBytes(unsafe.Pointer(&C.foo), C.size())
fmt.Printf("len %d data %v\n", len(bs), bs)
var data struct {
Size, Msytype uint16
Sequence uint32
Data1 uint8
Data2 uint32
Data3 uint16
}
err := binary.Read(bytes.NewReader(bs), binary.LittleEndian, &data)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%v\n", data) // {1 2 3 4 5 6}
buf := new(bytes.Buffer)
binary.Write(buf, binary.BigEndian, data)
fmt.Printf("%d %v\n", buf.Len(), buf.Bytes()) // 15 [0 1 0 2 0 0 0 3 4 0 0 0 5 0 6]
}