Golang 的线上文件跟网路上的资料,实在是写得很烂,而且文章又少,官方文件喜欢写一堆 function definition ,却只给少少范例,或是给不完整的范例,以下是我使用 golang 的过程中,记录下来实做过的 golang 范例。
Request 中带 cookie
Cookie
- import "fmt"
- import "net/http"
- import "strconv"
- import "io/ioutil"
- func main() {
- var userId int = 5
- // Declare http client
- client := &http.Client{}
- // Declare HTTP Method and Url
- req, err := http.NewRequest("GET", "http://localhost", nil)
- // Set cookie
- req.Header.Set("Cookie", "stockId=" + strconv.Itoa(userId))
- // Send request
- resp, err := client.Do(req)
- // Read response
- data, err := ioutil.ReadAll(resp.Body)
- // error handle
- if err != nil {
- fmt.Printf("error = %s \n", err);
- }
- // Print response
- fmt.Printf("Response = %s", string(data));
- }
Query MySql
Query MySql 前,要先安装 MySql driver ,安装指令如下:
go get github.com/go-sql-driver/mysql
Example
- import _ "github.com/go-sql-driver/mysql"
- import "database/sql"
- import "fmt"
- import "os"
- import "log"
- func main () {
- db, err := sql.Open("mysql", "user:password@/dbName?charset=utf8");
- if err != nil {
- fmt.Println("error = %s", err);
- os.Exit(1);
- }
- ret, err := db.Query("select * from Person");
- if err != nil {
- log.Fatal(err);
- }
- for ret.Next() {
- var id int
- var email string
- if err := ret.Scan(&id, &email); err != nil {
- log.Fatal(err);
- }
- fmt.Printf("id=%d email=%s\n",id, email);
- }
- }
import local package / library
如果我要写一个稍大一点的功能,共有 A, B 两个档案,A 要去 include B ,golang 的档案结构很像 Java , 当 B 是一个 library 的话,那么我们一定要建一个资料夹 B ,并在程式中定义 "package B",范例如下。
example/B/B.go
- package B
- func Sum(a int, b int) (int) {
- return a + b
- }
example/A.go
- package main
- import "fmt"
- import "./B"
- func main() {
- ret := B.Sum(1, 2);
- fmt.Printf("sum = %d \n\n", ret);
- }
Big5 UTF8 编码转换
先用 go get 自动从 github 上安装 iconv 。
go get github.com/qiniu/iconv
Example
- package main
- import "github.com/qiniu/iconv"
- import "fmt"
- func main() {
- cd, _ := iconv.Open("UTF-8", "Big5");
- c := cd.ConvString("\xa6\x72");
- fmt.Printf("content = %s", c);
相关网站
下面几个网站,都可以用来查询 golang 语法。